ARTICLE DETAIL

资讯详情

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

无人机SLAM技术选型与工程实践:从视觉惯性融合到真机部署

无人机SLAM技术选型与工程实践:从视觉惯性融合到真机部署 1. 为什么无人机SLAM比自动驾驶更让人头疼SLAMSimultaneous Localization and Mapping同步定位与建图这话题在机器人圈和无人机圈都不算新鲜但真正把主流方案从头到尾梳理一遍并且放到“无人机”这个具体平台上去审视还是能发现不少容易被忽略的门道。我这次做调研的起因很简单要给一款小型旋翼无人机做室内无GPS环境下的自主定位且要求双目视觉方案为主偶尔能补激光雷达做精度验证。带着这个需求我把主流视觉SLAM、激光SLAM、多传感器融合方案完整过了一遍也踩了不少资料和开源代码里的坑这篇博文算是把调研结论和实操心得整理成一份可以复用的文档尤其适合准备做无人机定位方案选型、或者正在啃SLAM又觉得书和论文太散的读者。先说一个反直觉的结论无人机SLAM的难度很大程度上不在算法本身而在平台特性。汽车跑SLAM地面基本是平面约束运动速度虽然快但轨迹相对平滑传感器安装位置稳定而无人机是六自由度的刚体运动会有剧烈的俯仰、滚转、偏航变化飞行速度快时还伴随明显的运动模糊、视场快速切换和光照突变。这些都会直接摧毁前端视觉里程计的稳定性也是很多人在电脑上跑数据集效果很好、一上真机就漂移炸机的根本原因。再叠加一个约束算力。自动驾驶可以上高功率工控机消费级无人机和很多工业级小型无人机只能带轻量级嵌入式平台比如NVIDIA Jetson系列。这就意味着那些论文里用GPU跑出来的重型网络没法直接搬而轻量化的SLAM系统要在精度、鲁棒性和计算开销三者之间做取舍。调研一圈下来我的结论是无人机场景下的SLAM不是一个“选个开源框架就完事”的问题而是一个“传感器、算法、平台算力、飞行策略”四者耦合的系统工程。另一个值得注意的点是SLAM这个词在无人机的语境里往往被拆成两个目标一个是定位我要知道我在哪里另一个是建图我要知道环境长什么样。两者常常需要分开对待。对自主飞行来说定位永远是第一优先级的建图反而是为了后续路径规划或者人为检查服务的。我见过不少项目组把精力全部花在建图上尤其是想做高精度三维重建的结果基础定位不够稳重建出来的地图也是歪的。这个顺序一旦搞反后面所有工作都会被拖垮。2. 主流技术路线横向对比单目、双目、RGB-D与激光做调研的第一步就是把所有可行的技术路线摆到一起先看清楚各自的适用范围。这个环节不需要太深的理论推导但需要把关键特性摸清因为选型一旦定下来后续所有算法栈、传感器硬件、算力预算都是围绕这个选择展开的。2.1 单目方案成本最低但尺度漂移是硬伤单目视觉SLAM的代表是ORB-SLAM系列我也是从这套代码开始入门的。单目方案最大的优点是用一个普通摄像头就能工作硬件成本几乎可以忽略标定也相对容易。但它的原理决定了它有一个天然缺陷无法从单帧图像中恢复真实尺度。实际飞行中的表现就是单目SLAM在平移飞行时还能维持一个相对一致的轨迹形状但一旦遇到长时间的匀速飞行或者旋转运动尺度漂移就会开始累积地图中的距离会逐渐缩放。无人机是动态平台控制指令依赖米制单位的位姿反馈这个问题是无法用“建图好看就行”糊弄过去的。除非额外接入其他绝对尺度信息来源比如高度计、测距传感器否则单目方案在无人机上只能算是“实验室玩具”不适合作为核心定位手段。2.2 双目方案两帧图像算深度仍是当前无人机主流双目视觉SLAM的核心思想是用左右两个相机同时采集图像通过立体匹配计算每个像素的深度因此能直接获得尺度信息。这一点在工程上极其重要因为无人机控制器需要的是一个有明确单位的位置估计而不是一个任意尺度的轨迹。目前无人机场景最常见的开源方案是ORB-SLAM3的双目模式和VINS-Fusion的双目版本。从我的实测看ORB-SLAM3特征点法在建图精度上很有优势轨迹平滑适合需要稳定输出的场景VINS-Fusion则因为带了IMU紧耦合在快速运动和光照变化场景下的抗性更好代价是初始化阶段比较敏感配置参数也多。双目方案的关键难题是基线长度基线太短近处精度尚可但远距离深度误差急剧放大基线太长又会导致近处物体超出公共视场。对轴距在400mm左右的小型旋翼无人机来说基线在100mm到200mm之间是一个工程上比较折中的选择。2.3 RGB-D方案室内小场景好用室外基本废掉RGB-D相机比如Kinect、RealSense D435i这类用红外结构光或飞行时间法直接测量深度。优点是拿到的深度图是稠密的建出来的地图非常直观处理起来也省掉了立体匹配这个计算大坑。但这类相机的有效测量范围通常只有4到6米而且受环境光影响严重在室外强光下很容易出现大面积深度空洞。因此RGB-D方案只适合室内无人机近距离作业比如仓库巡检、管道探查根本不适合户外飞行场景。我在调研中发现很多初学者会直接把ORB-SLAM2的RGB-D模式拿来跑结果在室内效果出奇地好就误以为无人机定位问题很好解决然后拿到室外一试就彻底翻车。这个坑提前讲清楚能帮读者省下不少试错时间。2.4 激光SLAM精度天花板高但重量和成本卡脖子激光SLAM尤其是用三维激光雷达的方案比如LOAM及其后续改进版本精度和稳定性确实是无与伦比的厘米级甚至毫米级定位不在话下而且对光照完全免疫适合绝对精度要求高的场景。问题是硬件本身。目前主流的机械式三维激光雷达比如若干16线产品重量普遍在600g以上功耗也在10W上下。对小型无人机来说这个传感器就要占掉将近一半的载重预算更别提随之而来的减震、供电和散热设计。再加上价格远高于摄像头方案大部分无人机项目都承担不起这个成本。我在调研中的结论是激光方案适合做精度验证的对照组或者用在无人车、大型工业无人机上小型旋翼无人机用激光做最小系统不太现实。2.5 多传感器融合无人机SLAM的正确终极形态把传感器融合放在最后是因为它才是无人机SLAM的真正答案。视觉里程计在纹理稀疏场景容易飘IMU短期内相对稳定但长期有漂移GPS在室外开阔环境能提供全局约束但室内失效、高楼附近还会多径。没有任何单一传感器能在所有条件下保持稳定唯一靠谱的做法是把它们以概率方式融合在一起。这一派的工程实现代表是VINS-Fusion和MAVLab的各类工作基本思路是用基于滤波或图优化的方式把视觉观测、IMU预积分、可选的GPS/气压计/磁力计观测全部纳入同一个状态估计问题中。在实际飞行体验上加了IMU融合之后最直观的变化就是快速旋转时位姿不再发散短时遮住摄像头也不会立刻丢位置。可以说多传感器融合不是可选项而是无人机能真正飞稳的底线要求。3. 前端里程计、后端优化与回环检测的工程理解在调研过程中我花了不少时间重新梳理SLAM系统的内部模块因为只有把前端、后端、回环这套管线彻底理解透了才能真正看懂参数调优和故障排查的方向。下面结合无人机场景把这个管线逐层拆开讲。3.1 前端视觉里程计帧帧匹配是基本功别指望一上来就用端到端深度学习前端负责从连续图像帧中估计相邻帧的相对运动。特征点法的主要步骤是先提取关键点比如ORB角点、SIFT特征等再计算描述子然后用描述子匹配相邻帧最后通过求解对极几何或PnP问题恢复帧间运动。一个工程细节值得特别提出无人机飞行时机载相机朝下或朝前斜视的情况很常见这会导致特征点分布不均匀。如果特征点全部集中在图像的一小半区域解算出来的位姿容易出现退化尤其在做纯旋转时更容易数值不稳定。实操中比较稳妥的做法是保证特征是均匀分布的通常可以用网格方式强制抽取特征点同时设定最小特征点数量的阈值低到一定程度就触发关键帧插入或丢帧保护。这属于老生常谈却总容易忽视的细节。直接法或半直接法方案则跳过特征提取用像素灰度一致性的假设来做配准代表作有LSD-SLAM和SVO。直接法在弱纹理场景下往往效果比特征点法更好但对光照一致性非常敏感无人机朝向改变带来的阴影和曝光变化会让灰度假设迅速失效。我自己的使用体会是SVO这类方案的运算效率极高适合算力严重受限的平台但鲁棒性需要仔细调参才能保障不太适合刚接触SLAM的人直接上手。3.2 IMU紧耦合为什么快速运动时它能力挽狂澜IMU以高频输出加速度和角速度可以在两帧视觉观测之间提供运动预测相当于给优化器提供了先验约束。紧耦合的意思是把IMU的原始测量直接放进状态向量里进行联合优化而不是把IMU单独解算出一个位姿再喂给视觉SLAM。这两者的精度差距很大。紧耦合中最核心的概念是IMU预积分。原始IMU测量频率很高动辄200Hz以上如果全部作为待优化变量参与图优化计算量会爆炸。预积分的思路是在相邻两个视觉关键帧之间把IMU的增量运动和偏置的转移关系提前计算成一种“压缩”形式之后在优化中只需要把预积分项当做一个约束因子来用。这样既保留了高频IMU信息又控制了计算量。对无人机来说IMU与相机的外参标定精度极为关键。如果外参标定误差超过一定程度融合后的位姿会在快速加减速时出现明显漂移。这也是很多飞行炸机案例的隐性原因代码看起来没问题但相机和IMU的安装角度标定不准一做大机动运动就完蛋。3.3 后端优化与回环检测散装的约束如何变成一致的地图后端优化的作用是处理累积误差。视觉里程计是增量式的每一帧都只跟上一帧比较哪怕每一帧误差极小经过成百上千帧的累积也会变成不可忽略的漂移。后端优化就是把过去一段时间内的所有约束包括帧间运动约束、IMU约束、回环约束放在一个图里做全局的批量优化重新调整所有位姿来让整体误差最小化。图优化中的顶点代表位姿边代表约束用最小二乘法代求解。这里一个重要的工程选择是滑动窗口法与全局优化的取舍实时的VIO系统通常采用滑动窗口只优化最近一段时间内的状态保证算力可控而回环检测触发之后系统会再做一次全局优化把整个历史轨迹和地图一起修正。无人机场景中算力有限滑动窗口几乎是必选项。回环检测的目的是识别“我是不是回到了之前来过的地方”如果识别成功就能构建一个跨时间的长距离约束一次性消除大面积累积漂移。这类似乎是一个简单的模块实际工程中却充满细节。在快速飞行时相机视角变化剧烈同一个地点在两次经过时拍摄到的画面可能差异非常大在室内重复纹理很多的环境下比如走廊、货架区又容易产生感知歧义。回环检测一般会用词袋模型做视觉特征检索但实际使用中误回环的代价很高一次错误的回环可能让整个地图“跳变”到错误的位置所以很多系统都要求回环候选帧再做几何一致性验证才敢真正加入优化。无人机项目中回环的触发条件会设置得更保守一些尽量少触发也不要错误触发。4. 从仿真到真机参数调参与坑点复盘这一部分的内容我觉得在整个调研中最有工程价值。因为阅读论文和跑开源代码是相对“干净”的体验但一旦上了真机各种跨界问题都会冒出来。下面把我在实际部署中遇到的主要问题和解决思路整理出来。4.1 仿真环境选型先跑通再上真机别急着插相机调研和算法验证阶段我建议先在仿真环境里跑通全套流程。仿真中常用的平台有Gazebo配合PX4/ArduPilot的无人机仿真环境以及AirSim等游戏引擎类仿真器。Gazebo物理引擎的真实感更好一些社区资料多支持传感器模型也比较全面AirSim的图像渲染效果更逼真对视觉SLAM验证更友好但计算开销更大。实际操作时可以先在仿真环境中注入不同噪声和光照条件来测试SLAM系统的鲁棒性这一步花的时间不会白费。比如在Gazebo里进入室内环境模板切换照明亮度模拟光照突变的场景。真机测试成本高、耗时长能在仿真里提前发现的问题就不要等到试飞阶段再解决。4.2 真机调参中遇到的高频问题第一个高频问题是视场角不足导致的特征丢失。很多无人机出厂自带镜头的视场角只有60度上下飞行过程中如果剧烈俯仰画面中很大一部分会被地面或天空占据特征点数量骤降导致位姿估计退化。我个人的经验是把镜头视场角选在120度以上配合俯仰角向下的安装方式比如45度斜视这样既能保证大部分地面纹理在画面内又不会丢失远处信息。如果用定焦镜头记得先把畸变标定做扎实否则前端匹配的误差会直接传给后端优化。第二个高频问题是曝光和运动模糊。有自动曝光功能的相机在无人机快速转向时会频繁调整曝光参数导致前后帧亮度不一致特征匹配的可靠性大大降低。很多无人机SLAM部署者会牺牲自动曝光把曝光时间固定或者限制曝光调节范围。同时曝光时间不宜太长比如说超过5ms就比较容易在快速运动时产生明显运动模糊。如果想要保证画质和定位的平衡建议选择全局快门相机卷帘快门在旋翼振动下容易出现果冻效应对定位精度影响非常大。第三个高频问题是机载电脑的实时性。很多SLAM系统在电脑上能跑到30帧每秒但上了机载电脑就掉到10帧以下。优化方向有三个一是降低图像分辨率比如从1280x720降到640x480代价是有效特征距离变短二是限制关键帧数量适当增加帧间阈值减少后端优化压力三是检查传感器驱动比如IMU消息在ROS中的时间戳延迟如果没有做好时间同步融合效果会大打折扣。4.3 坐标系与时间同步无人机最容易翻车的一环无人机有自己的机体坐标系和世界坐标系约定不同的飞控固件定义规则还不完全一致。例如有的约定机头朝前为X轴有的是朝右为X轴。如果不对齐坐标系SLAM输出的位姿给到飞行控制器时就会产生非常奇怪的飞行行为。时间同步是另一个几乎必踩的坑。相机图像的时间戳和IMU的时间戳可能各自来自不同的时钟源如果它们之间有一个几十毫秒的随机延迟融合后的位姿在剧烈运动时会抖动得非常厉害。我最终的处理办法是给所有传感器打上硬件同步信号作为时间基准或者至少在软件层面用ROS的message_filters做时间对齐并估算固定延迟后做补偿。这些东西写出来只是一两句话但实际排查起来非常耗时值得提前设计好。4.4 关于建图和定位分离策略再补充几句我上面反复提到无人机SLAM要优先保证定位但有些任务天生就依赖建图这里补充一套折中策略。在任务执行阶段可以采用“定位用VIO、建图用激光”的分工飞行过程中用轻量化的视觉惯性里程计维持实时位姿和安全性同时用激光雷达或深度相机在飞行结束后离线重建高精度地图。长时间定位依靠实时VIO的计输出精度可能一般但一致性有保障离线重建则可以用非实时的算法做精细优化不需要考虑实时算力。这种方法在很多实际项目中都能看到因为它本质上把“实时性”和“精度”两个矛盾目标拆给了不同的系统去完成。5. 调研结论与后续学习建议整个调研走下来我的最终结论可以浓缩成几条后面做决策时可以直接参考。第一如果是产品化的无人机定位方案优先考虑双目相机加IMU融合也就是VINS-Fusion或ORB-SLAM3这类体系。第二如果只飞行室内小区域且没有强光干扰RGB-D方案可以大幅降低系统复杂度。第三激光SLAM不要轻易上除非项目预算充足、载重有富余否则性价比远不如视觉方案。第四无论选哪条路线时间同步、外参标定、坐标系对齐这三件事都要在项目启动初期就做好绝不能拖到后期再补。再说说学习路径。对零基础的人来说如果直接啃视觉SLAM十四讲心理压力会比较大我建议先按“开源框架走查加模块精读”的方式推进。第一步把ORB-SLAM3或者VINS-Fusion在数据集上跑通第二步尝试把传感器替换成自己的数据第三步再回头读论文和源码中的核心模块比如后端图优化和IMU预积分。这样形成正反馈之后学到后面会轻松很多。这本书和相关课程依然是目前最好的中文入门资料只是需要带着工程导向去学而不是当纯理论去背。如果你现在已经开始接触KITTI数据集或各类SLAM数据集的下载与调试我建议同样先用一套数据把整个流程走通再换无人机自采数据来对比效果。因为公开数据集的传感器参数和真机往往相差很大直接在真机上调试会同时面对太多变量很难定位问题而先把公开数据集的基准摸清真机上遇到问题才能更快判断是传感器问题、标定问题还是算法参数问题。调研这件事做到最后往往是“方案越简单越可靠”的感觉。无人机SLAM不是越新的论文、越复杂的系统就越好而是在明确平台约束下把每一个环节做到稳定可靠。希望这篇调研笔记能帮你少走一些弯路。
返回列表