本发明具体涉及一种基于lsd-slam和激光雷达的深度信息估计方法。
背景技术:
lsd-slam(largescaledirectmonocularslam)是j.engle等人于2014年提出的slam工作,它标志着单目直接法在slam中的成功应用。lsd-slam的核心贡献是将直接法应用到了半稠密的单目slam中,它不仅不需要计算特征点,还能构建半稠密的地图。
lsd-slam的直接法是针对像素进行的,在cpu上实现了半稠密场景的重建,基于特征点的方法只能是稀疏的,而进行稠密重建的方案大多要使用rgb-d传感器,或者使用gpu构建稠密地图。tum计算机视觉组在多年对直接法研究的基础上,使用了一些精妙的手段来保证追踪的实时性与稳定性,实现了这种cpu上的实时半稠密slam。
但是通过lsd-slam获取当前场景深度信息必然存在着较大的误差,本发明通过将点云的深度信息与相应范围的激光雷达的深度信息相融合,能起到有效地减少深度数据误差的作用。
技术实现要素:
发明目的:本发明提供一种基于lsd-slam和激光雷达的深度信息估计方法,能充分发挥激光雷达测距的优势,通过匹配融合,弥补lsd-slam算法从视觉上估计深度信息的不足的问题。
技术方案:本发明所述的一种基于lsd-slam和激光雷达的深度信息估计方法,包括以下步骤:
(1)通过lsd-slam算法得到当前场景的点云数据,并将其导出;
(2)利用激光雷达得到周围场景相应范围内的深度数据;
(3)将点云数据和激光雷达数据做相应位置的匹配,并记录所匹配的每个对应位置的深度数据的差值;
(4)根据步骤(3)所得差值对整个点云数据进行更新,从而得到当前场景较为准确的深度信息。
所述步骤(1)包括以下步骤:
(11)将lsd-slam所依赖的ros系统去除掉,并使用相应的库进行代替;
(12)保存当前场景的点云数据,并将点云缓存为“.ply”文件。
步骤(2)所述的激光雷达位于单目摄像头正下方,初始角度一致。
步骤(2)所述的深度数据为激光雷达和单目摄像头视角所对应角度范围内的深度数据。
步骤(3)所述深度数据的差值为一度。
有益效果:与现有技术相比,本发明的有益效果:充分发挥激光雷达测距的优势,通过匹配融合,弥补lsd-slam算法从视觉上估计深度信息的不足,可获得当前场景较为准确的深度信息。
附图说明
图1本发明流程示意图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
图1为本发明的流程图,包括以下步骤:
1、通过将lsd-slam算法得到当前场景的点云数据,并将其导出。
首先,将lsd-slam所依赖的ros系统去除掉。ros操作系统在lsd-slam中只是起到了数据的输入和输出的作用,完全可以通过g2o,eigen,qt等库来进行代替,这样就能不依赖于冗杂的ros操作系统而实现lsdslam,显著地提高了运行的效率。具体方案是把源码中的ros的发布订阅机制去除掉,采用线程间的通信方式来代替,并通过opengl图像库来代替源码中三维显示方案。
其次,保存当前场景的点云数据。该算法在运行的时候会对当前场景进行深度信息的估计,从而生成点云数据,每当点云数据产生的时候,通过文件流的写操作将每个点云的数据写到“.ply”文件里,当点云数据不再更新的时候,关闭文件流。
2、利用激光雷达得到周围场景相应范围内的深度数据。
原始的激光雷达的数据的范围是360度的,但是这里只需要和单目摄像头视角所对应的角度的范围内的深度数据即可。将激光雷达和摄像头的初始角度设为一致,然后记录下摄像头的视角范围,在激光雷达扫描数据的时候,如果所扫描到的点的角度不在这个范围的话,则丢弃,只保留在这个角度范围的深度数据。
3、将点云数据和激光雷达数据做相应位置的匹配,并记录所匹配的每个对应位置的深度数据的差值。
由于激光雷达是放在摄像头正下方的,因此认为点云数据中y坐标为0的点云的深度数据是和激光雷达所扫描到的数据是在同一个高度的。通过激光雷达所扫描到的点的深度数据和角度数据,算出每个点的x坐标,并将该点与点云数据中y坐标为0的点进行匹配,凡是x坐标的差值在1度范围之内的,均认为是对应的点。
4、根据步骤3所得差值对整个点云数据进行更新,从而得到当前场景较为准确的深度信息。
计算出步骤3中的点云数据和激光雷达数据中对应位置的点的深度信息的差值,并将此差值结合该点的x坐标用一个map数据结构进行保存,用一个vector保存所有的map数据;
遍历点云文件,依次点云数据中与vector中的map的x坐标的差值在1度以内的点的深度数据均做相应的差值处理,进而更新整个点云数据。