SLAM学习——建图(二)

本文深入探讨了SLAM中的稠密地图构建,包括单目建图中的像素梯度问题和逆深度挑战,以及图像间的变换。还介绍了RGB-D传感器在稠密建图中的应用和外点去除、降采样滤波器的使用。最后,文章讨论了八叉树作为高效地图存储结构的优势,以解决点云地图的大小和运动物体处理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对单目构建稠密地图的讨论

像素梯度的问题

在前面中,通过块匹配来获得匹配结果。块匹配的正确与否,依赖于图像块是否具有区分度,有明显梯度的小块将具有良好的区分度。对于梯度不明显的像素,将比较难估计其有效深度。立体视觉一个常见问题:对物体纹理的依赖性

像素梯度与极线的关系:像素梯度平行于极线方向以及垂直于极线方向。
像素梯度垂直于极线:当沿极线寻找的时候,发现匹配程度是一样的,得到不到有效匹配。
这里写图片描述
像素梯度平行于极线:能够精确的找到匹配程度最高的地方。

这里写图片描述

但是实际上极线与相机深度是有一定的角度的,从上面我们可以看到角度越大,匹配的不确定性越大,角度越小,匹配的不确定性越小。

逆深度问题

当我们描述一个点时,可以用(x,y,z)三个量来描述,而这三个亮可能存在明显的相关性,如果不太好。我们可以描述成(u,v)和d来表示一个点,毕竟相互独立。我们假设的是深度值满足高斯分布
但是,存在以下问题:
1.场景深度大概5-10米,但近处肯定不会小于相机焦距。这个分布并不是像高斯分布那样,形成对称形状,尾部可能稍微长一点,而负数区域为0。
2.在室外应用中,存在距离非常远的点,高斯分布描述他们会有数值计算上的困难。
因此我们设深度的倒数,即逆深度为服从高斯分布,可修改上述程序。

图像间的变换

在块匹配之前,做一次图像到图像间的变换是一种常见的预处理方式。我们假设图像小块在相机运动时保持不变,而这个假设在相机平移时能保持不变,但是发生明显的旋转时难以保持。

根据相机模型,参考帧上的一个像素与真实的三维点世界坐标关系为: ,对于当前帧,亦有在它上面的投影。,消去,可以得到俩副图像之间的像素关系。

—-讨论:尽管双目和移动单目能够建立稠密的地图,但是我们认为它们过于依赖环境纹理和光照ÿ

### ORB SLAM3 联合教程和实现方法 ORB SLAM3 是一种先进的多传感器融合SLAM系统,支持单目、双目、RGB-D相机以及IMU等多种输入设备。为了实现实时定位与地功能,该框架采用了多种优化策略和技术。 #### 初始化阶段 在纯视觉单目SLAM模式下,通过运动恢复结构(SfM)完成初始地[^4]。此过程会以较高频率插入关键帧,由于这些关键帧间时间间隔较短,使得基于IMU数据的预积分计算更加精确可靠。最终形成一个包含约十个关键帧位置姿态及数百个特征点的地模型。值得注意的是,在这一阶段所获得的地比例尺尚未确定。 #### 多线程架构下的局部流程 局部主要负责管理和优化当前活动区域内的三维几何关系。具体来说: - **关键帧管理**:当新像到来时,如果满足一定条件,则将其作为新的关键帧加入到现有地中; - **地点维护**:对于每一个被选为关键帧的画面,从中提取出足够数量的兴趣点,并尝试将它们三角化成世界坐标系中的真实空间点; - **闭环检测**:定期执行回环闭合操作来修正累积漂移误差; 上述工作是在独立于跟踪主线程之外的一个专门子进程中完成的,从而保证了系统的实时性能[^2]。 #### 点云映射模块 针对稠密需求,ORB SLAM3引入了一个额外的任务——`PointCloudMapping`实例。这个组件不仅能够接收来自前端处理单元传递过来的关键帧信息,而且还可以启动专用绘进程(`viewerThread`)用于直观展示整个环境的空间布局情况[^3]。 #### 实现联合的具体步骤 要使不同类型的感知装置协同作业,需遵循如下原则: 1. 对每种模态的数据流分别立对应的处理器对象(如MonoInertialProcessor),并将各自获取的信息同步馈送到中央控制器处统一调度; 2. 利用共视性约束机制寻找跨源观测间的对应关联,进而立起全局一致性的拓扑连接网络; 3. 借助因子表示法表达各节点之间的相对变换参数及其不确定度分布特性,再借助非线性最小乘求解器进行整体最优估计; 4. 完整运行一次大规模束调整算法(Global BA),期间暂停一切增量式的更新动作直至收敛结束为止[^5]。 ```cpp // 创并配置各类Sensor Processor... std::shared_ptr<SensorProcessor> monoProc(new MonoInertialProcessor()); monoProc->SetCalibration(calibFile); // 启动后台服务... mpSystem = new System(vocFile, settings); mpSystem->Start(); while (!bShutdown){ // 获取最新测量样本... cv::Mat img = GrabImage(); // 将其提交给相应处理器... mpSystem->Track(img); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值