ARTICLE DETAIL

资讯详情

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

无人机室内定位实战:激光雷达SLAM与光流融合方案

无人机室内定位实战:激光雷达SLAM与光流融合方案 1. 没有GPS的室内无人机怎么知道自己在哪先说个现象。很多刚接触无人机开发的朋友把室外那套“GPS定好点 航线飞行”的思路直接搬进室内结果无一例外翻车。室内GPS信号衰减极其严重多路径效应能让定位误差漂到几十米飞控根本稳不住。换了UWB基站方案之后又要提前布置基站、标定坐标一旦换个房间就得重新来工程复杂度很快就把人劝退了。我试了差不多两个月最终把定位方案收敛成一条组合路线Livox Mid360激光雷达做主SLAM定位光流传感器做高频速度补偿两者融合后在完全无GPS的室内环境下稳定飞行。这篇文章把整个实践过程、选型理由、参数配置、踩过的坑全部摊开讲适合已经被“室内定位”折磨过、正在比较激光雷达SLAM和视觉方案的开发者参考。先说明一个容易被忽略的前提无人机和扫地机器人做SLAM完全是两码事。扫地机器人可以停下来慢慢算但无人机是动态系统每一帧点云处理、每一次位姿解算都会直接影响飞行稳定性。所以选型的第一原则不是“精度最高”而是“在机载算力有限的条件下能不能以足够高的频率输出足够稳的位姿”。2. 方案选型为什么是Mid360为什么还要光流2.1 室内定位候选方案横向对比我一开始也没有直接锁定激光雷达而是把市面上主流的室内定位方案全部过了一遍。这里直接给对比结果省去各位查资料的时间方案精度刷新率抗环境变化典型成本落地难度UWB基站10-30cm10-50Hz强需提前布站中基站标签低但要换场地重标视觉里程计1-5%漂移率15-30Hz弱怕光照变化低单目/双目相机中标定繁琐光流传感器相对速度有累积漂移100-200Hz依赖地面纹理低低2D激光SLAM厘米级5-10Hz强但只给2D位姿中中3D激光SLAM厘米级10-20Hz强高中高从表格看纯视觉方案在纹理弱的白墙房间基本废掉UWB要提前布点不适合探索未知环境。Mid360这类3D激光雷达是目前综合性价比最高的单传感器定位源但单靠它也有两个短板第一激光帧率通常只有10Hz左右飞控内环需要50-200Hz的反馈中间差了量级第二无人机快速旋转时激光点云畸变严重如果退化场景长走廊、玻璃墙特征不足位姿估计会漂。光流传感器恰好补这两个短板——它能以100Hz以上输出机体速度短时精度高专门负责“帧间平滑”。2.2 Mid360的核心参数和选型逻辑Livox Mid360之所以在无人机圈子里火三个参数起了决定作用非重复扫描方式传统机械雷达是一圈一圈扫Mid360是Lissajou曲线扫描点云轨迹随时间在视场角内不断填充这样即使静止时点云覆盖密度也会随着时间累积。对SLAM来说这意味着特征提取更充分建图更完整。360°水平视场角 59°垂直视场角同类产品中这个垂直视场角几乎是无敌的。无人机在室内经常要抬头看天花板、低头看地面垂直视场角小了天花板和地面就是空洞会给后续点云配准带来麻烦。盲区极低0.1m起近距物体也能完整感知这对无人机在狭小空间中飞行非常关键。重量方面Mid360裸机约265g。对于轴距250mm左右的小型无人机来说这个重量需要计入机架重心计算——不要只看雷达本身还要看它的供电线、转接板、减震海绵。我见过有人把雷达直接用扎带绑在机身上飞起来点云全在晃那不是雷达的问题是安装方式的问题。2.3 光流传感器怎么选光流传感器本质是一个向下看的摄像头加IMU通过像素运动推算机体平移速度。常见的有PX4FLOW老、HereFlow常用、以及一些基于开源方案自研的光流模块。选型时关注三个参数测距范围室内飞行高度通常在1-3米光流模块需要在这个距离内有良好的测距和成像能力输出频率至少要100Hz配合飞控的EKF才能平滑自带IMU强烈建议选带IMU的光流模块否则需要额外融合飞控IMU数据延迟会增加实际测试中光流配合激光SLAM做融合最大收益不是在平移而是在旋转的时候。无人机打转时激光SLAM如果退化光流还能提供角速度和速度约束让EKF不至于发散。3. 软件架构选型Fast-LIO和Cartographer怎么选3.1 Fast-LIO为何适合无人机在写代码之前先做软件选型。目前激光雷达SLAM的主流方案是Fast-LIO特别是Fast-LIO2和Cartographer。两者都支持Livox雷达但设计哲学完全不同。Fast-LIO2的核心思路是“紧耦合”——把激光点云、IMU、雷达原始数据放在一起做迭代误差状态卡尔曼滤波IESKF不需要单独提取特征直接对原始点云配准。这个方案的三大优势对无人机特别友好计算开销小在树莓派4B级别算力上跑10Hz没问题机载电脑用NUC级别能跑到20Hz对IMU外参标定精度依赖相对较低因为IMU和雷达是紧耦合的状态估计会同时修正外参误差天然输出高频位姿虽然激光只有10Hz但IMU积分是高频的Fast-LIO直接把这两者融合输出位姿可以达到100Hz3.2 Cartographer的定位Cartographer是老牌方案ROS1时代用得非常广泛ROS2也有对应移植版本。它的强项是回环检测Loop Closure和子图Submap管理适用于大场景建图后长期重定位。但Cartographer在无人机上的体验是建图质量高但实时定位延迟明显。它的优化过程是全局的每插入一帧激光数据要维护一个子图栈在大地图上重定位时计算量陡增。我在实机上跑过同样的NUCFast-LIO的位姿输出延迟比Cartographer低了将近一帧别小看这一帧对于穿越机级别的飞行手感差别非常大。所以我的建议很直接如果你主要目标是探索建图 后续重定位选择Cartographer保存的2D栅格地图对导航路径规划非常友好如果你主要目标是实时定位 自主飞行选择Fast-LIO2闭环更快、对无人机更友好两个都可以跑通但不要同时跑算力不够最后会互相拖累3.3 既然有Fast-LIO为什么还要光流这里可以说说很多人的误区。装了激光雷达SLAM就以为飞控能直接用这个位姿悬停、飞行。实际上飞控内部的EKF扩展卡尔曼滤波需要多种传感器数据来做融合只给它一个激光雷达位姿会发生两个问题位姿断崖激光SLAM偶尔失配或者退化位姿会突然跳变飞控来不及平滑直接导致无人机急偏一下刷新率不匹配飞控位置环通常需要50Hz以上激光SLAM就算输出100Hz位姿在室内低纹理区域也会偶尔出现“打滑”光流传感器给EKF提供的是一条连续稳定的速度观测它天然就是为飞控设计的。激光SLAM给的是一个绝对位置约束光流管高频平滑激光管绝对精度两者结合是我实测中最稳的组合。4. 建图实操怎么让点云不乱飘4.1 点云预处理在建图前点云预处理直接决定质量。Mid360的原始点云第一步做的是去除运动畸变。雷达扫描期间无人机自身在运动原始点云上的物体位置其实是“移动过的”需要用IMU积分补偿每一束激光的时间戳偏移。Fast-LIO内部有畸变补偿但如果你用Cartographer这一步通常要自己写。第二步是动态点滤除。室内如果有人走动或者风扇转动点云里会有大量“飞点”这些点会严重干扰配准。常用做法是按距离阈值筛掉过远的点室内一般保留25米以内的点就足够用体素滤波降采样把点云密度压到可计算的量级体素尺寸一般取0.1-0.2m对每一帧点云做离群点剔除统计每个点邻域内的点数少于阈值的删除滤波器参数不能照抄别人的必须根据房间大小调。我最初直接抄了一份室外果园场景的配置房间才40平米雷达参数全是30米阈值结果一帧点云里面大多数是无用远点计算量白白翻倍建图还飘。4.2 建图飘的根因排查“飘”是所有激光雷达建图玩家最头疼的问题。我花了整整三天排查最后定位到三个根因按发生频率排序根因一IMU外参标定不准。这是最常见的。Mid360和IMU之间的安装位置、朝向如果没有精确标定旋转时会产生系统性偏差点云配准会一直往一个方向漂。解决方案是跑Livox官方的标定工具或者用Fast-LIO自带的标定程序最好在室外大场地标一次标定完保存外参矩阵后面每次装拆雷达都要重新核对外参是否变化。根因二雷达安装角度导致视场角遮蔽。如果雷达装偏了有一侧的视场角被机架挡住那一侧永远没有点云。SLAM在缺一侧观测的情况下位姿解算会不对称地漂。检查方法是把雷达点云在Rviz里显示出来看是不是360°分布均匀如果出现明显的扇形空洞就要调整安装位置。根因三建图时飞机速度过快。这个我说句实话无人机上的激光点云畸变和速度强相关太快了旋转的角速度会让一帧点云扭曲得没法看。建图时飞行速度建议控制在1.5m/s以内角速度不大于90°/s这是让人接受的数据超过这个阈值即使是Fast-LIO也会逐渐失配。4.3 保存地图的正确姿势我用的是Fast-LIO2输出全局一致点云地图保存地图有几个注意点不要用实时输出的点云直接保存先用“建图-回放-合并”的思路结束建图后导出完整地图保存前对地图做一次体素滤波下采样不然一平米几十万点后续重定位加载极慢如果要给导航模块用建议把3D点云投影成2D栅格地图保存后续做路径规划会快很多至于用 ROS2Cartographer 建图并保存地图参照文档走一遍核心步骤是启动雷达驱动 - 启动Cartographer建图 - 跑完数据 - 执行ros2 run cartographer_ros cartographer_pbstream_to_ros_map把pbstream转成pgm和yaml。这里要注意的是Cartographer在室内用2D模式时如果雷达是3D的需要先做点云投影否则建出的图会包含天花板的错误信息。5. 从“建图”到“用图”重定位与自主飞行实现5.1 快速重定位策略建完图无人机重启后激光SLAM的里程计是从零开始的需要重新和已有地图对齐这一步叫重定位。对于Fast-LIO2最简单的方式是启动时先让无人机静止几秒让它把初始位姿对齐到全局坐标。如果初始位置和建图时不一致需要手动给定一个粗初值。更好的方案是跑一个基于点云配准的全局定位节点比如用NDT匹配当前雷达帧到已有地图得到全局位姿再把这个位姿喂给Fast-LIO重置状态。实际操作中我发现一个很实用的技巧在机库或者起飞点贴一个高反光标记点重定位前先飞到标记点附近用目视/遥控让雷达扫到标记点然后程序自动用标记点在地图里的坐标重设初值。这样既省掉了全局搜索的计算量又稳定。5.2 光流和Fast-LIO的融合实现飞控端我用的PX4机载NUC跑Fast-LIO2和光流驱动通过MAVROS转发。PX4的EKF2配置最关键的是选择传感器来源把激光SLAM的位姿作为external vision position estimate输入EKF2_AID_MASK打开视觉位置融合把光流数据作为optical flow输入同时用光流内置的距离传感器作为高度观测最关键的一步是设置好时间戳和延迟。PX4对传感器时间非常敏感MAVROS把外部位姿发进来时一定要带上原始时间戳receive time并且把延迟补偿打开。我最初没管时间戳结果位姿滞后了100多毫秒飞机悬停时像喝醉了一样画圈。时间戳的简单检查方法起飞前手动拿无人机晃一晃在QGC地面站看EKF的 innovation 曲线。正常情况 innovation 在±1之间如果超过3基本就是时间戳不对或外参标定错了。5.3 室内飞行测试验证在约60平米的室内场地做了完整的自主飞行测试包含“解锁 - 起飞到1.2m - 按预设路径巡航 - 悬停 - 降落”全流程。飞行数据记录项目数值飞行时长6分30秒最大距离误差0.18m平均悬停位置RMS0.06m光流辅助前后悬停稳定性提升约40%激光SLAM单点失配次数2次均由光流平滑纠正这个数据说明了两个问题一是纯激光SLAM在室内已经能飞但失配不可避免光流是兜底二是误差0.18m对室内无人机来说完全可用不需要再去追求毫米级。6. 实测中的意外情况和排查链路6.1 建图时点云“飞点”导致的回环错位第一次在带有玻璃隔断的办公室建图时地图出现了明显的两段错位看起来就像同一面墙被平移了几十厘米。排查链路先确认不是雷达本身的机械问题用固定支架扫描点云正常在Rviz中实时看点云发现玻璃墙面的点云时有时无反射率极低导致配准时有效特征减少更严重的是办公室摄像头和玻璃会形成镜面反射点这些点在点云中表现为“穿透玻璃”的飞点直接拉偏了配准最终的解决方式是开启反射率滤波Mid360带反射率强度把反射率低于某个阈值的点丢掉同时调大离群点剔除的邻域半径这是室内建图特有的问题室外基本遇不到。建议所有做室内项目的朋友在建图前先扫一遍场地在Rviz里看看有没有明显飞点再决定要不要开反射率滤波。6.2 光流数据跳变的隐藏原因光流传感器给我挖过一次坑。飞行中悬停还算稳但只要飞机飞过地板上的一块纯色地毯区域光流数据就疯狂跳变Z轴高度也跟着抖差点触发降落保护。根本原因是光流传感器依赖地面纹理纯色地毯上像素运动估计完全失效。排查后发现PX4的EKF里同时有光流高度和雷达高度雷达高度优先级更高时问题不明显但当时把光流内置测距作为主高度源就出事了。解决方式有两个任选其一把光流高度融合关掉只用激光SLAM的高度或者单独的激光测距仪如果要用光流高度必须设置一个“信任区间”——当地面纹理置信度低于阈值时拒绝光流高度观测实际工程中更推荐第一种简单可靠。光流就让它专心输出水平速度别去管高度。6.3 电机振动导致雷达点云模糊无人机和车载雷达最大的不同是振动。小四轴起飞后整机高频振动直接传到雷达虽然Mid360内部有减震但大幅度的电机振动依然会让点云看起来“变糊”。排查过程把无人机绑在测试架上先不装螺旋桨推油门看点云再装螺旋桨推油门看点云。两次对比发现不装桨时点云清晰装桨后点云模糊根因就是电机振动。解法是给雷达加一层独立的减震海绵垫并且尽量让雷达靠近无人机重心。注意减震不是越软越好太软会产生低频振荡反而让点云更糟。我用的是25度左右的记忆海绵厚度5mm效果最好。7. 最终心得哪些坑可以提前避开最后分享几条我实际跑了三四个月之后的心得都是花时间买来的教训。第一先把“点云可视化”跑通再谈建图。很多人一上来就建图结果点位全乱。先确保能在Rviz里看到雷达点云、看到IMU轨迹确认数据流没问题再开始SLAM。这一步能省下三分之二的排查时间。第二激光SLAM和光流的融合参数不要照抄别人的。不同机架的振动特性、不同光流模块的噪声特性都不一样PX4的EKF参数一定要根据自己的实测数据调。重点观察innovation曲线盯着飞控终端看比盲调参数快得多。第三时刻记住无人机是动态系统。任何传感器方案都有输出延迟光流100Hz、激光10Hz、IMU400Hz它们之间的对齐和延迟补偿是第一优先级。传感器数据没对齐后面什么都白搭。第四设计时留好余量。无论是算力还是电池续航都要留出至少20%的冗余。机载电脑在高负载SLAM时CPU会飙到80%以上再叠加其他任务很容易过热降频影响实时性。这个项目后续还有很多可扩展的方向比如加上全局路径规划让无人机在室内自动巡航避障或者把地图和视觉目标检测做融合实现指定物体跟随。等我做完下一阶段再来更新。
返回列表