论文部分内容阅读
机器人或无人车等在避障时为了保证安全性,除了要求SLAM算法具备很高的计算精度外,还需要有较低的时间复杂度,以便能给决策控制系统及时地提供相应的数据。LSD-SLAM算法是单目直接法在SLAM中的成功应用,它不需要依赖特征点,可构建用于导航的半稠密地图。GPU具有强大的计算能力和存储带宽,善于处理密集型数据和并行数据。CUDA是NVIDIA公司推出的GPU通用并行计算架构,可以大幅提高程序的性能。尽管LSD-SLAM算法可运行在目前主流配置的CPU上,但存在相机快速运动时容易跟踪丢失的问题,且算法整体实时性不高。针对此问题,本文设计并实现了基于CUDA加速的LSD-SLAM算法中的相机追踪方案和深度估计方案。本文主要研究内容及结论如下:(1)分析了LSD-SLAM算法整体的可并行性,将算法中的相机追踪模块和深度估计模块作为本文并行化研究的具体对象。由于算法中的全局地图优化模块是以位姿图优化理论为基础并使用g2o工具进行求解的,该计算过程存在严格的前后依赖性,无法实现并行化。虽然相机追踪模块和深度估计模块的优化计算本身也存在前后依赖性,但对于每一帧图像上各个像素点在做一系列复杂计算时,很适合用数据并行的思路做优化。(2)设计并实现了基于CUDA加速的并行相机追踪方案。在本方案中,将相机追踪过程中的图像灰度化处理和梯度明显像素点的求解过程分别转化为核函数放在设备端执行;通过对图像做不同分块大小的测试,选取16?16像素作为图像分块大小;使用纹理内存对并行方案的性能做了进一步的优化,充分利用了显存的带宽资源。实验结果表明,本文并行方案对相机位姿估计的结果与原串行方法一致;并行方案中计算梯度及求得用于位姿估计的像素点的过程较原串行方法,性能加速比可达到7倍以上。(3)设计并实现了基于CUDA加速的并行深度估计方案。在本方案中,将深度估计过程中每个梯度明显像素点的极线范围确定、灰度匹配及深度计算与融合三个步骤分别转化为相应的核函数在设备端执行,大幅缩短了程序的计算时间;采用共享内存和多个CUDA流对并行方案的性能做了深入优化。实验结果表明,本文并行方案对图像帧中场景的深度估计结果与原串行方法相同;对于每一个参考帧和当前帧的深度估计过程,加速比可达到21倍以上。