在经典的SLAM中一旦确定了路标点的位置,就可以算作建图完成。但这种没办法完成导航、避障等功能,于是要用到稠密的地图。

建图的需求:定位,导航,避障,重建,交互。

单目稠密重建 

问题为:已知每一帧的对应的轨迹(位姿),以第一幅图像为参考帧,计算每个像素的深度。

步骤:1. 假设所有像素的深度满足某个初始的高斯分布

           2. 当新数据产生时,通过极线搜索和块匹配确定投影点的位置

           3. 根据几何关系计算三角化后的深度及不确定性

           4. 将当前的观测融合进上一次的估计中(深度滤波器)。若收敛则停止,否则返回第二步。

极线搜索和块匹配

假设:不同图像间整个小块的灰度值不变(假设性更强了)

计算小块之间的差异:

这里是相关性,接近0表示不相似,接近1表示相似。

由于沿着极线搜索通常会得到非凸函数,非线性优化耗时,所以通常使用深度滤波器。

高斯分布的深度滤波器

则由高斯分布的乘积:

问题是如何计算新数据不确定性:

通过几何关系可以得到:

 代码实践:

 

 

 可优化的部分

问题解决
对梯度不明显的地方,使用块匹配时没有区分性书里没有
深度的正态分布:实际场景不是对称的结构,近处不到0,但远处有无穷远使用逆深度,即d^(-1)d^{-1}
当相机发生明显旋转时,块匹配难以成立在块匹配之前把当前帧与参考帧之间的运动考虑进来,算出局部范围内参考帧与当前帧的坐标变换构成的仿射变换
稠密深度图的计算费时并行化(GPU)
因为各像素的计算是完全独立的,可能出现深度图不平滑的情况给深度估计加上空间正则性
没有显式地处理外点只要NCC大于一定值就认为出现了成功地匹配

R-GBD稠密重建

从点云重建网格

八叉树地图

优点:灵活、能压缩、能随时更新

在八叉树里,节点中储存是否被占据的信息,当某个方块都被占据或者都不被占据时,就没有必要展开这个节点。 

用概率表述是否被占据这件事

 代码

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐