ARTICLE DETAIL

资讯详情

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

无人机三维建图实战:MID360与FAST_LIO从调参到飞行全流程

无人机三维建图实战:MID360与FAST_LIO从调参到飞行全流程 无人机平台做三维建图最怕两件事一是飞完一圈回来发现点云分层、重影二是定位在飞行中途突然飘掉整段数据报废。我前后用MID360配合FAST_LIO在几款不同轴距的机上跑过完整流程从最初的点云糊成一团到后来能稳定输出厘米级精度的稠密地图中间踩的坑基本都集中在几个固定环节上。这篇就把整套流程拆开讲清楚包括雷达为什么选它、外参怎么标、参数怎么调、飞完怎么验证以及那些文档里不会写但实际一定会遇到的问题。1. 为什么这套组合值得在无人机上认真跑一遍1.1 MID360到底解决了传统雷达的哪些痛点先说雷达本身。MID360属于固态激光雷达非重复扫描方式视场角做到水平360度、垂直方向也有较大覆盖这对无人机来说非常关键。传统机械式多线雷达体积大、重量高装在中小型四轴无人机上会明显影响续航和机动性而且机械旋转部件在振动环境下寿命和稳定性都要打折扣。MID360没有机械旋转结构靠内部光学扫描实现全向覆盖重量和体积都压得很低装在机腹或机头位置对飞行性能影响很小。它的点云特性也值得说清楚。非重复扫描意味着每一帧的扫描轨迹不重合随着积分时间增加点云会逐渐填满整个视场等效密度越来越高。这个特性对建图特别友好——单帧看着稀疏但连续几十帧叠加后墙面、地面、建筑立面的细节会明显丰富起来。相比之下重复扫描雷达每帧打在同一组固定线上密度提升只能靠多帧简单叠加遇到快速运动就容易出现条纹状空洞。注意MID360的点云密度和积分时间强相关静止时效果最好飞行速度越快单帧覆盖越稀疏所以飞行速度要和外参、滤波参数配合着调不能只顾飞得快。1.2 FAST_LIO在无人机场景下的真实优势FAST_LIO是基于迭代误差状态卡尔曼滤波的激光惯性里程计方案核心思路是把激光点云和IMU数据紧耦合用IMU做高频预测用点云做低频更新。它最大的特点是计算量相对可控在机载算力有限的平台上也能跑到实时而且对点云配准的鲁棒性做得不错。放到无人机上这个方案的优势体现在几个方面。第一它不依赖GPS纯靠雷达和IMU就能输出位姿室内、林区、城市峡谷这些场景都能用。第二它对IMU和雷达之间的时间同步要求虽然高但一旦同步做好位姿输出非常平滑不会像纯激光里程计那样在快速旋转时跳变。第三它输出的位姿可以直接喂给建图模块边飞边建飞完就能拿到完整地图不需要事后做复杂的离线优化。我实测下来在轴距450毫米左右的四轴上MID360加FAST_LIO跑一圈标准操场水平定位误差能控制在十几厘米以内垂直方向稍差一些但配合回环检测后整体一致性很好。这个精度对于巡检、测绘、建模这类应用已经够用了。1.3 这套方案适合谁、不适合谁适合的人群很明确做无人机自主导航、三维重建、巡检测绘的开发者手里有MID360或者准备入手想快速跑通建图定位流程。也适合做科研的学生需要一套成本可控、开源可改的雷达惯性里程计方案。不适合的情况也要说清楚。如果你需要的是大范围室外高精度测绘单靠这套方案精度还不够得配合RTK或者做闭环优化。如果你追求的是超远距离探测MID360的量程有限远距离场景要换雷达。另外如果你的机载算力非常紧张比如只有一块低功耗单片机那FAST_LIO跑不动得考虑更轻量的方案。2. 硬件选型与安装那些决定成败的物理细节2.1 雷达安装位置对建图质量的影响雷达装在哪直接决定点云里有多少是自己的机体。我试过三种位置机腹正下方、机头前方、机背上方。机腹正下方是最常用的好处是视野开阔地面和前方障碍都能扫到缺点是起落架和机臂会进入视场形成固定遮挡。机头前方视野最好但重心前移飞控要重新调参。机背上方适合做俯视建图但上方遮挡多。最终我固定用机腹下方稍微往前偏一点让雷达中心大致在机体几何中心正下方偏前五厘米左右。这样机臂遮挡最少而且前后视野比较均衡。安装时一定要用刚性连接最好直接固定在碳板上中间不要加软垫。软垫会引入高频振动点云会出现明显的抖动和重影。提示安装完成后用手轻轻晃动雷达确认没有松动。任何微小位移都会导致外参变化建图直接崩。2.2 IMU与雷达的坐标系对齐FAST_LIO需要知道IMU和雷达之间的外参包括旋转和平移。如果用的是MID360内置IMU那外参基本是固定的但还是要确认雷达坐标系和IMU坐标系的方向定义。MID360的坐标系通常是X向前、Y向左、Z向上IMU如果也是同一套定义那旋转部分就是单位矩阵。如果外接独立IMU那就必须做外参标定。我一般用两种方法一是用CAD模型量出相对位置和角度作为初值二是跑一段数据用FAST_LIO自带的外参优化功能微调。实测下来平移外参对建图影响相对小旋转外参错几度就会导致点云明显倾斜所以旋转部分一定要标准。2.3 机载计算平台的选择逻辑FAST_LIO对算力的要求中等偏上。我试过几款平台Jetson Orin NX跑起来很轻松点云降采样后能到20赫兹以上Jetson Xavier NX勉强够用需要把降采样调激进一些树莓派级别的平台基本跑不动点云一多就卡死。选平台的核心逻辑是看你的点云处理量和实时性要求。如果只是离线建图算力可以低一些飞完再处理。如果要实时建图并做导航那必须保证里程计输出频率稳定在10赫兹以上否则飞控拿到的位姿更新太慢控制会抖。我一般建议至少用Orin NX级别留出余量给后续的避障和规划模块。平台实时建图表现建议降采样适用场景Jetson Orin NX流畅20Hz以上0.2米实时建图导航Jetson Xavier NX可用10-15Hz0.3米离线建图为主树莓派4B卡顿不可用不适用仅数据采集2.4 供电与振动的隐藏坑供电这块很多人忽略。MID360对电压波动比较敏感无人机电池电压随电量下降会从满电的较高电压一路降到截止电压如果直接接电池雷达在低电量时可能出现掉线或点云异常。我一般加一个稳压模块把电压稳定在雷达额定范围内确保全程供电干净。振动是另一个隐形杀手。无人机电机和桨叶产生的高频振动会通过机架传到雷达导致点云在垂直方向出现周期性抖动。解决办法有两个一是做桨叶动平衡二是把雷达安装在减振板上。但减振板不能太软否则会引入低频晃动反而更糟。我试过几种减振方案最终用较硬的硅胶减振柱效果最好既能滤高频又不会让雷达晃。3. 软件环境搭建与参数配置的实操路径3.1 系统环境与依赖安装我一般用Ubuntu 20.04或者22.04ROS版本对应Noetic或者Humble。FAST_LIO有ROS1和ROS2两个版本无人机上我倾向用ROS1生态成熟驱动和工具链齐全。安装依赖主要是Eigen、PCL、Sophus这几个用apt装就行。编译FAST_LIO之前先确认雷达驱动能正常出点云。MID360的驱动在官方仓库里有编译后跑起来用rviz看点云是否正常。这一步很关键如果驱动层面点云就有问题后面调参都是白费。# 安装依赖 sudo apt install libeigen3-dev libpcl-dev libsophus-dev # 编译雷达驱动 cd ~/catkin_ws/src git clone livox驱动仓库 cd .. catkin_make3.2 雷达与IMU的时间同步配置时间同步是FAST_LIO能否跑稳的前提。MID360内置IMU雷达驱动会同时输出点云和IMU数据但两者时间戳必须对齐。我一般用雷达的硬件同步功能让IMU和点云共用同一个时钟源。如果雷达支持PPS和GPRMC输入可以接GPS模块做硬同步但无人机上不一定有GPS那就用雷达内部时钟确保驱动输出的时间戳一致。软件层面检查驱动配置文件里的时间同步选项确保点云和IMU的时间戳来自同一时钟。跑起来后用rosbag录一段数据用rqt_plot看IMU角速度和点云时间戳的对应关系如果发现明显偏移就要调同步参数。3.3 FAST_LIO核心参数逐项拆解FAST_LIO的配置文件里参数不少但真正影响建图质量的就那几个。我按重要性排序讲。雷达类型和话题名确认lid_topic和imu_topic和实际发布的话题一致这个错了直接没数据。外参矩阵extrinsic_R和extrinsic_T如果雷达和IMU一体旋转设单位矩阵平移设零。外接IMU就要填标定值。降采样分辨率filter_size_surf和filter_size_map前者控制单帧点云降采样后者控制地图降采样。无人机上我一般设0.2到0.3米太小算力扛不住太大细节丢失。IMU噪声参数acc_cov、gyr_cov、b_acc_cov、b_gyr_cov这几个决定滤波器对IMU的信任程度。无人机振动大IMU噪声要设得比地面平台大一些否则滤波器会过度信任IMU导致点云配准被带偏。地图更新频率map_update_interval控制地图发布频率设太高算力浪费设太低地图更新不及时。我一般设0.1秒。# FAST_LIO配置片段 common: lid_topic: /livox/lidar imu_topic: /livox/imu time_sync_en: true time_offset_lidar_to_imu: 0.0 preprocess: lidar_type: 1 scan_line: 4 blind: 1.0 mapping: acc_cov: 0.1 gyr_cov: 0.1 b_acc_cov: 0.0001 b_gyr_cov: 0.0001 fov_degree: 360.0 det_range: 70.0 extrinsic_T: [0.0, 0.0, 0.0] extrinsic_R: [1, 0, 0, 0, 1, 0, 0, 0, 1] filter_size_surf: 0.2 filter_size_map: 0.2 map_update_interval: 0.13.4 启动流程与首次跑通验证启动顺序有讲究。先启动雷达驱动确认点云和IMU话题都在发布。然后启动FAST_LIO看rviz里有没有地图生成。最后启动飞控或者手动移动雷达观察位姿输出是否跟随。首次跑通建议先手持雷达在室内走一圈不要直接上无人机。手持走一圈能快速验证外参、时间同步、参数是否合理。如果手持走一圈点云就糊了那上无人机只会更糟。手持验证通过后再把雷达装到无人机上地面推油门模拟振动看建图是否稳定最后再实际飞行。4. 飞行建图过程中的实战技巧与异常处理4.1 飞行轨迹设计对建图完整性的影响飞行轨迹不是随便飞飞就行。建图质量很大程度上取决于你有没有把该看的地方都看到。我一般遵循几个原则第一尽量做闭环飞出去再飞回来让雷达有机会看到之前看过的区域这样FAST_LIO的回环检测才能起作用累积误差能被拉回来。第二速度要均匀不要急加速急减速速度突变会让点云配准变难。第三高度变化要平缓垂直方向快速运动会加剧点云分层。具体到操作我一般让无人机在目标区域做蛇形或者环形飞行高度保持相对稳定速度控制在每秒一米到两米之间。如果是建一栋楼的外立面就绕着楼飞一圈保持距离墙面五到十米这样点云密度和覆盖都比较好。4.2 点云分层和重影的排查链路点云分层是最常见的问题表现为墙面出现两层甚至多层平行点云。遇到这个我按以下顺序排查。第一步检查外参。外参错了点云在旋转时会出现系统性偏移分层是必然的。重新标定外参或者用FAST_LIO的外参优化功能跑一段数据看优化结果。第二步检查时间同步。时间戳偏移会导致点云和IMU数据错位运动时点云会拖尾。用rosbag录数据离线分析时间戳对齐情况。第三步检查IMU噪声参数。IMU噪声设得太小滤波器过度信任IMU点云配准被带偏。适当增大acc_cov和gyr_cov让滤波器更多依赖点云。第四步检查振动。振动导致的点云抖动表现为高频重影不是分层。如果确认是振动就要做桨叶动平衡或者改减振方案。第五步检查飞行速度。速度太快单帧点云太稀疏配准容易失败。降低速度重新飞。注意排查顺序很重要从外参和时间同步开始这两个是基础基础不对后面怎么调都没用。4.3 定位丢失的应急处理与数据保护定位丢失在飞行中很危险因为飞控拿不到位姿就可能失控。我一般做几层保护。第一层飞控切到手动或者定点模式不依赖雷达位姿。第二层FAST_LIO检测到位姿异常时自动降低点云更新权重靠IMU短时维持。第三层数据记录不能停即使定位丢了rosbag还在录事后可以离线重新处理。实际遇到定位丢失最常见的原因是场景特征太少比如对着大片白墙或者空旷天空飞。这时候要么改变飞行区域要么在场景里放一些特征物。另一个原因是快速旋转雷达视场变化太快点云配准跟不上。遇到这种情况降低旋转角速度让雷达有足够时间积累点云。4.4 建图结果的离线验证与精度评估飞完不是就结束了必须验证建图质量。我一般做三件事。第一看整体地图有没有明显变形比如直线变弯、平面变翘。第二回到起点看起点和终点的点云是否重合重合度高说明闭环做得好。第三用已知尺寸的物体做尺度验证比如量一段墙的实际长度和地图里量出来的对比误差在百分之一以内算合格。如果发现地图变形先看是不是闭环没做好再检查IMU零偏是否估计准确。FAST_LIO会在线估计IMU零偏但如果飞行时间短零偏还没收敛地图就会有累积误差。这种情况可以飞长一点或者起飞前让雷达静止一段时间让零偏先收敛。5. 从建图到定位让这套系统真正用起来5.1 位姿输出如何接入飞控FAST_LIO输出的位姿要通过MAVROS或者类似接口发给飞控。我一般用MAVROS的vision_pose话题把FAST_LIO的位姿转成飞控能识别的格式。这里要注意坐标系转换FAST_LIO输出的是雷达坐标系下的位姿飞控需要的是机体坐标系中间要做一次变换。接入后飞控要切到外部定位模式比如PX4的EKF2外部视觉定位。参数上要设置好外部位姿的噪声噪声设得太小飞控过度信任雷达位姿雷达一飘飞机就抖噪声设得太大飞控不信任雷达定位模式形同虚设。我一般根据实测精度设水平方向设0.1米左右垂直方向设0.2米左右。5.2 实时建图与导航的算力分配如果既要实时建图又要做导航规划算力分配要提前规划。我的做法是把FAST_LIO和建图模块放在一个进程导航规划放在另一个进程用ROS话题通信。降采样参数要调得比纯建图更激进保证里程计输出频率稳定。地图发布频率可以降低导航规划不需要那么高的地图更新率。另外点云地图不要一直累积要定期做体素滤波把地图大小控制在合理范围内。否则飞久了地图越来越大内存和算力都会被吃掉。5.3 常见应用场景的适配调整不同场景参数要微调。室内建图空间小、特征多降采样可以细一些飞行速度慢一些。室外建筑建图空间大、特征相对少降采样粗一些飞行速度快一些但要保证闭环。林区或者植被多的场景点云噪声大IMU噪声参数要调大滤波器更多依赖点云。如果是做巡检重点是把设备拍清楚飞行轨迹要围绕设备做环绕保证雷达和相机都能覆盖到。如果是做测绘重点是覆盖完整轨迹要规则速度要均匀。6. 几个我踩过之后才明白的经验第一个经验是关于雷达清洁的。MID360的光学窗口如果沾了灰尘或者水渍点云会出现异常噪点看起来像鬼影。我一开始以为是参数问题调了半天后来发现是窗口脏了。每次飞行前用镜头布擦一下能省很多排查时间。第二个经验是关于IMU零偏的。无人机上的IMU零偏会随温度变化冷机起飞和热机起飞零偏不一样。我一般起飞前让雷达通电静置两到三分钟等IMU温度稳定了再起飞这样零偏估计更准建图一致性更好。第三个经验是关于rosbag的。飞行数据一定要录而且要用足够大的存储。我遇到过飞完发现bag没录上或者录到一半存储满了整段数据白飞。现在我的习惯是起飞前检查存储空间确认bag正常录制再起飞。第四个经验是关于参数备份的。每次调好一组参数我都会把配置文件备份下来标注适用场景和机型。下次换场景或者换飞机直接从备份里找相近的改比从头调快得多。这套流程我反复跑过很多次从最初的手忙脚乱到现在基本能一次飞成功核心就是把外参、时间同步、振动控制这三个基础打牢剩下的就是根据场景微调参数。建图这件事硬件装对了、参数调对了剩下的就是飞行技巧和耐心。
返回列表