SLAM总结(六)-视觉建图

1.地图的种类和用途

一般根据地图的用途决定建立什么样的地图,地图的用途一般有定位、导航、避障、3D重建和交互。地图的类型分为稀疏地图、半稠密地图、稠密地图、栅格地图、八叉树地图、TSDF地图和拓扑地图。稀疏地图一般在CPU就能实现实时建图,而稠密一般需要GPU才能实现实时建图,获得相机位姿后,建图也可离线建,这就不那么在乎速度了,使用CPU也能完成。
各种地图如下所示。
1)稀疏地图:稀疏地图一般由点特征、线特征等组成,ORB-SLAM2建立的稀疏点地图如下图。
在这里插入图片描述
2)半稠密:半稠密地图主要是有纹理的点有深度值,可进行3D重建,相对稀疏点的点要多很多。
3)稠密地图:稠密地图则几乎所有点都有深度值,然后进行3D重建。稠密方法的深度如何得到?深度相机?单目如何找匹配点三角化?
4)栅格地图:cartographer建立的栅格地图如下图所示,每个栅格都有的占用概率值,该值高于一个阈值可认为是占用的,否则认为是free的。
在这里插入图片描述
4)八叉树地图:栅格地图把2D空间分为栅格,八叉树地图把3D空间分为正方块。八叉树地图的正方块是大小不一的,可以节省内存空间。
5)拓扑地图:带结点和相关连接线的拓扑结构图,如下图所示,地铁线路图也是拓扑地图的一种形式。
在这里插入图片描述
6)TSDF地图:与八叉树相似,存于显存中,便于用GPU加速。可用于定位和建图。
用途如下。
1)定位:定位即使用地图确定机器人此时在地图中的位姿。可使用单帧连续进行重定位或全局定位实现定位,但一般前端会开启跟踪使得定位更加鲁棒和精确。定位过程中一般不会更新原来的地图。在当前帧的位姿未知的情况下,使用视觉的DBoW方法进行全局定位还比较快。稀疏地图、半稠密地图、稠密地图、栅格地图和八叉树地图都可用于定位,拓扑地图不能用于定位。
2)导航:导航可分为导和航,导是为机器人指明方向,航是控制机器人沿指定方向运动。一般使用地图做路径规划,规划出的路径为机器人指明了方向,完成导的功能。然后控制机器人沿路劲行走,这是运动控制方面需要做的,与地图无关。路径规划目的是一般是规划出机器人能通过的到达目标点的最短路径。稀疏地图和拓扑地图一般不能指明障碍物,从而机器人无从得知哪里能通过哪里不能通过,故它们不能用于导航。半稠密、稠密地图经过处理可以转换成栅格地图或八叉树地图,而栅格地图和八叉树地图可直接获得障碍物信息。
3)避障:避障即避开障碍物。障碍物分为静态障碍物和动态障碍物,建立的地图一般保存的是静态障碍物的信息,然后用当前帧附近的帧指明动态障碍物。稀疏地图不能用来标记障碍物。同样地,稀疏地图和拓扑地图一般不能指明障碍物,半稠密、稠密地图经过处理可以获得障碍物信息,而栅格地图和八叉树地图可直接获得障碍物信息。
4)3D重建:3D重建比较重视建图,如建立房间地3D地图用于销售和装修设计等。这种需要地图是光滑而连续地3D地图。3D重建与SLAM联系紧密,但3D重建是另一个研究领域,也有大量相关论文,其着重于建图。一般稠密地图可用于3D重建。
5)交互:交互指人与地图的互动。如增强现实,这种一般需要语义地图。

2.建图

若是建立稀疏地图,一般的SLAM算法都能实现。但是建立半稠密和稠密地图对单目或双目视觉都伴随着很大的计算量,两者都得通过匹配点然后三角化来得到像素点的深度,稀疏一般只需计算640*480=307200(最低像素情况)中的几百个点,而稠密重建需要计算几乎所有点的深度,相差几百倍。一般使用ToF和结构光等主动测量深度的深度相机会更好一点,但主动光源不太适合室外和大场景,其易受光照干扰,测距范围相对较小。
对于单目和双目,可以假定已经通过SLAM等方法获得了每帧的位姿。有一下两种基本方法
1)最简单方法就是不去追踪特征点在各帧之间的移动,这样就不用进行帧间匹配,当然单目至少要进行2帧间的特征匹配,先直接将所有点反投影到3D空间形成点云,尽管点云中存在很多重复点或噪点,最后可以通过点云处理方法去除重复点和噪点,如PCL库中方法、拼接方法(三角网格(mesh
)、面片(surfel))。这种方法要求位姿比较准确,漂移较小。稠密点云地图就比较容易转换成栅格地图和八叉树地图,用于导航和避障。一般地,ToF和结构光等主动测距深度相机测得深度较准确、可靠和稠密,不需要考虑极线搜索和纹理等,由物理方法得到深度,计算量小很大。它们一般可以直接拼接多帧点云,然后再处理点云。ICP对点云精度要求较高,用这种点云做ICP是不够的。泊松重建和sufel可以将这种点云转换成更光滑和自然的三维重建结果。
2)追踪点在各帧间的运动,这就要求进行特征匹配。
对于单目和双目,已知两帧相对位姿后,可以通过极线搜索和块匹配加速匹配过程。得到2帧像素之间的匹配便可通过三角化得到像素点的深度,若位姿是不太准确的,可能还需要顺便优化一下相机位姿。极线搜索即已知第一帧上一个点可以知道该点可能在第二帧哪条线上出现,一条线上点远少于整幅图像点,缩小了搜索范围。因为单个点的亮度不足以判断相似性,一般去点周围一个小块的像素点进行比对,已知相对位姿,块的方向也是可以确定的。那么通过遍历第一帧上所有点,可以尽可能多的在第二帧找到匹配,若将已经匹配上的排除在外,也能进一步缩小匹配范围。计算两小块相似度(距离)的方法有:SAD(sum of absolute distance,绝对值之和)、SSD(sum of square distance,平方和)和NCC(normalized cross correlation)等。SAD和SSD去均值后更可靠。多帧可能看到相同的点,深度滤波器可以使用滤波方法或非线性优化方法。滤波方法计算量小相对于不断在两帧两帧之间计算深度,然后更新深度。而非线性方法则可使用BA方法,但计算量大。因为稠密点的数量很大,使用BA计算量很大,而且前端又占据了计算资源,考虑到算力,使用滤波方法可能更合适一些,各点块匹配和深度计算相对独立,可使用并行方法加速。滤波方法的重点是如何得到不确定性,即方差,它可分为几何不确定性和光度不确定性2种方法。一般块匹配在梯度明显的地方表现。在相同颜色区域容易出现误匹配,从而造成计算出错误的深度,也就是一个不存在的点。块匹配精度还和梯度与极线线的夹角有关,垂直是最不好的,平行是最好的。依赖纹理和极线和梯度夹角问题、光照等造成单目和双目重建不太可靠。
表示深度方式:用x、y和z表示时,它们之间时相关的,而u、v和d是近乎独立的。显然用d表示更好一些。逆深度更符合高斯分布和更好的数值稳定性。

3.地图的保存和加载

待补充

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值