ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第261篇 多传感器融合SLAM——视觉+激光+IMU的组合方案

第261篇 多传感器融合SLAM——视觉+激光+IMU的组合方案 单一传感器做SLAM总有各自的短板。相机在暗处和纹理缺失区域不好使激光雷达在长走廊和开阔场地精度差IMU有漂移但短时间精度高。把这些传感器组合起来让它们的优缺点互补是SLAM走向实用的必然选择。多传感器融合SLAM已经是自动驾驶和高端机器人的标配。融合的核心难点不是把数据拼在一起而是不同传感器的数据在时间、空间和精度上都对不齐。相机30fps激光雷达10fpsIMU 200Hz帧率不一样。相机有畸变激光雷达有运动畸变时间戳不完全同步。视觉的深度信息不准确激光的反射率信息和视觉无关。怎么把这些异构数据融合到一起是融合SLAM的核心问题。视觉IMU融合VIO视觉惯性里程计Visual-Inertial OdometryVIO是目前最成熟的多传感器融合方案。相机提供丰富的环境信息和全局一致性IMU提供高频的运动估计和尺度信息。两者融合后互补效果很好。VIO有两种主流架构滤波方案和图优化方案。MSCKFMulti-State Constraint Kalman Filter是滤波方案的代表用扩展卡尔曼滤波融合视觉和IMU数据。VINS-Mono是图优化方案的代表用滑动窗口优化最近N帧的视觉特征和IMU预积分约束。# VIO的状态向量 # 包含位姿、速度、IMU偏置 state { pose: SE3(), # 相机位姿 velocity: vec3(), # 线速度 gyro_bias: vec3(), # 陀螺仪偏置 accel_bias: vec3(), # 加速度计偏置 } # IMU预积分给出帧间约束 # 视觉特征给出观测约束IMU预积分是VIO中的关键技术。它把两帧之间的所有IMU测量值积分成一个相对运动约束避免了每次状态更新都要重新积分的问题。Forster等人在2015年提出的预积分理论让VIO的效率大幅提升现在几乎所有VIO系统都用这个方案。激光IMU融合LIO激光惯性里程计Lidar-Inertial OdometryLIO在自动驾驶领域应用广泛。激光雷达提供精确的3D结构信息IMU提供高频运动估计和去畸变能力。LOAM系列是最早的LIO方案之一。它用IMU的高频数据做运动补偿去除激光雷达扫描过程中的运动畸变然后用特征点ICP做帧间匹配。IMU的作用是辅助性的主要解决运动畸变问题。LIO-SAM是更系统的融合方案。它用IMU预积分给出帧间约束用激光配准给出观测约束两者放在因子图中一起优化。这种紧耦合的方式比LOAM的松耦合更精确特别是运动剧烈的场景下优势明显。# LIO-SAM的因子图结构 graph FactorGraph() # IMU预积分因子 graph.add_imu_factor(prev_state, curr_state, imu_data) # 激光配准因子 graph.add_lidar_factor(prev_scan, curr_scan, ndt_result) # GPS因子如果有的话 if gps_available: graph.add_gps_factor(curr_state, gps_position)FAST-LIO是另一种高效LIO方案。它用迭代卡尔曼滤波IEKF融合激光和IMU不需要显式的点云配准步骤。IEKF直接用点到面残差更新状态计算速度很快在嵌入式设备上也能实时运行。视觉激光IMU三融合三种传感器一起用是目前最全面的SLAM配置。R3LIVE和LIO-SAMCamera是这个方向的代表工作。三融合的优势在于覆盖了更多场景。激光雷达在开阔场地和长走廊不好使的时候视觉可以提供补充。视觉在暗处和纹理缺失区域不好使的时候激光雷达可以提供稳定的3D结构。IMU在任何情况下都能提供短时间的高精度运动估计作为兜底。实际实现中三融合通常用因子图框架。每种传感器对应一种或多种因子所有因子放在同一个优化问题中求解。因子图的好处是灵活性高想加什么因子就加什么因子不需要改整体架构。# 三融合因子图的典型结构 graph FactorGraph() graph.add_imu_factors(imu_preintegration) # IMU因子 graph.add_visual_factors(feature_observations) # 视觉因子 graph.add_lidar_factors(scan_matching) # 激光因子 graph.add_loop_closure_factors(loop_edges) # 回环因子 graph.add_gps_factors(gps_measurements) # GPS因子时间同步和标定——工程上的硬仗多传感器融合在理论上很美好但在工程上有很多脏活累活要做。时间同步和外参标定是两个最大的工程挑战。时间同步指的是不同传感器的数据要在同一个时间基准下对齐。IMU 200Hz的数据要插值到相机或激光雷达的时间戳上。如果时间对齐差了哪怕几毫秒高速运动时位姿估计就会出错。硬件同步用同一个时钟触发所有传感器是最佳方案但不是所有硬件都支持。软件同步用时间戳对齐插值是退而求其次的做法。外参标定指的是不同传感器之间的相对位姿要知道。相机和激光雷达的相对位置和朝向、IMU和相机的相对位置和朝向这些外参如果不准融合效果会大打折扣。离线标定用标定板或标定场景是常用方法在线自标定在SLAM运行过程中估计外参也在一些系统中支持。面试官问起时间同步和标定时要能说出具体做法和注意事项这是区分会用和真正理解的关键点。面试追问环节面试官松耦合和紧耦合有什么区别松耦合是各传感器独立处理最后把结果融合。比如视觉单独跑一个里程计IMU单独跑一个积分器最后用卡尔曼滤波把两个轨迹融合。紧耦合是把所有传感器的原始数据放到同一个优化问题中。比如VINS-Mono把视觉特征和IMU预积分放在一起优化。紧耦合精度更高因为能充分利用传感器间的相关性。但实现复杂度也更高。面试官IMU预积分解决了什么问题传统的EKF方案中每次状态更新都要用当前估计的状态重新积分IMU数据计算量很大。IMU预积分把两帧之间的IMU数据积分成一个相对运动增量这个增量和状态无关只和IMU测量值有关。状态更新时不需要重新积分只需要用更新后的偏置做一阶修正。这样计算量从O(N^2)降到O(1)N是IMU测量次数。面试官FAST-LIO为什么这么快FAST-LIO用迭代卡尔曼滤波而不是优化方法。IEKF的状态向量只包含当前帧的状态位姿、速度、偏置不需要维护历史帧。每次更新只需要一次矩阵求逆矩阵大小是状态维度约15维计算量很小。而且FAST-LIO直接用ikd-tree做点到面搜索不需要显式提取特征点省去了特征提取的时间。面试官多传感器融合时怎么设权重每种传感器的权重由其噪声特性决定。IMU的噪声模型通常从数据手册或Allan方差分析中获取。视觉特征的噪声取决于特征检测的精度通常1-2个像素。激光配准的噪声取决于配准算法和场景结构。在因子图框架中噪声用信息矩阵表示信息矩阵越大权重越大。如果不确定具体数值可以通过实验调参看不同权重下轨迹精度的变化。面试官什么时候需要三融合什么时候双融合就够了取决于场景。室内服务机器人用视觉IMUVIO就够了激光雷达太贵太大。自动驾驶必须用激光IMULIO因为高速公路等场景视觉不好使。如果要在室内外切换、全天候运行三融合更可靠。成本也是一个考量——三融合的硬件成本和标定成本都更高小项目不一定值得投入。多传感器融合SLAM是当前SLAM技术的主流方向。视觉IMU适合轻量级应用激光IMU适合自动驾驶和大型机器人三融合是最全面的方案。选择哪种组合要根据场景需求、硬件条件和预算来决定。融合的关键不只是算法还有工程——时间同步、外参标定、系统调试。一个好的融合SLAM系统算法只占三分工程要占七分。上一篇第260篇 重定位技术——机器人在已知地图中重新定位下一篇我们聊语义SLAM看看怎么给地图加上这是什么的标签。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力
返回列表