ARTICLE DETAIL

资讯详情

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

基于Livox MID360与FAST-LIO2的高速避障无人机方案设计与实现

基于Livox MID360与FAST-LIO2的高速避障无人机方案设计与实现 1. 高速避障无人机的整体方案设计思路1.1 为什么选择Livox MID360作为核心感知传感器做高速避障无人机感知层选型是整个项目的地基。我前后试过几种方案单目视觉、双目视觉、传统机械式激光雷达最后落到Livox MID360上原因很直接——20m/s的飞行速度意味着每秒前进20米留给感知和决策的时间窗口极短。传统机械式激光雷达虽然点云质量好但体积大、重量重、运动畸变严重装在穿越机上基本不现实。视觉方案在高速运动下受光照和纹理影响太大室外强光或者室内弱光都容易翻车。MID360是非重复扫描体制的固态激光雷达重量约265克探测距离在80米80%反射率条件下水平视场360度垂直视场-7度到52度。这个垂直视场很关键——无人机在高速前飞时会有俯仰角变化垂直视场不够的话地面和天空的点云会丢失导致建图和避障出现盲区。MID360的52度上视场让我在急转弯和俯冲时仍然能保持对前方障碍物的感知。另一个核心原因是点云密度和帧率。MID360默认10Hz帧率单帧约20万点。在20m/s速度下每帧之间无人机移动2米这个间距对于FAST-LIO2的帧间匹配来说是可以接受的。如果换成低帧率雷达帧间位移过大点云配准容易失败建图直接飘走。注意MID360的接口是航空插头供电和以太网二合一接线时务必确认线序反接会烧毁雷达。我第一次上电就是因为用了非原厂线缆导致雷达内部保险丝熔断返厂修了两周。1.2 为什么用FAST-LIO2而不是LOAM或LIO-SAMFAST-LIO2的核心优势是紧耦合迭代卡尔曼滤波直接把原始点云配准到地图上不需要特征提取。LOAM系列需要提取边缘点和平面点在高速运动和非结构化环境中特征提取不稳定容易丢失。LIO-SAM依赖GPS和回环检测在室内或GPS拒止环境下直接歇菜。FAST-LIO2的计算量相对可控在Intel NUC或者Jetson Orin NX上都能跑到实时。我实测在Orin NX 16GB上MID360的10Hz点云FAST-LIO2单帧处理时间约60-80ms留出了足够的余量给避障规划模块。更重要的是FAST-LIO2输出的里程计频率可以配置到50Hz甚至更高通过IMU积分插值给控制器提供高频位姿反馈。1.3 整体硬件架构与数据流整套系统的硬件架构分三层感知层Livox MID360 IMU雷达内置IMU可用但建议外置一个更高频率的IMU比如BMI088或ICM42688计算层Jetson Orin NX或Xavier NX 飞控Pixhawk 6C或CUAV V5执行层四轴动力系统电机、电调、桨叶 电池数据流是这样的MID360通过以太网输出点云和IMU数据到Orin NXFAST-LIO2订阅点云和IMU话题输出里程计和点云地图。避障规划节点订阅里程计和局部点云生成速度指令通过MAVROS或DroneKit发送给飞控。飞控在OFFBOARD模式下执行速度指令同时融合光流和超声波做低空定高。这个架构的关键在于时间同步。MID360的IMU和点云时间戳必须对齐否则FAST-LIO2的配准会出问题。我建议在Orin NX上跑一个PTP或者NTP服务让雷达和计算单元的时间戳统一。如果雷达固件支持PPS输出最好把PPS接到飞控的GPS接口上实现硬件级时间同步。2. Livox MID360配置与FAST-LIO2建图实操2.1 MID360网络配置与IP修改MID360出厂默认IP是192.168.1.1XX具体地址贴在雷达背面。修改IP需要用Livox Viewer或者SDK提供的工具。我习惯用Livox Viewer 2图形化操作不容易出错。步骤是这样的先用网线把雷达和电脑直连电脑网卡设置成同网段比如192.168.1.50子网掩码255.255.255.0。打开Livox Viewer 2软件会自动发现设备。在设备列表里右键点击雷达选择“网络设置”把IP改成你想要的地址比如192.168.1.100。改完之后雷达会重启重新连接即可。提示修改IP后记得把电脑网卡改回DHCP或者你常用的网段否则下次连其他设备会连不上。我习惯在电脑上建两个网络配置一个专门给雷达用一个日常用切换起来方便。在ROS2环境下需要安装Livox ROS2驱动。驱动包名是livox_ros_driver2编译之前要确认ROS2版本Humble和Foxy的编译选项略有不同。编译命令如下mkdir -p ~/ws_livox/src cd ~/ws_livox/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd .. colcon build --symlink-install --cmake-args -DROS_EDITIONROS2 -DDISTRO_ROShumble编译完成后修改配置文件MID360_config.json把雷达IP和主机IP填进去。主机IP是你Orin NX上连接雷达的网卡地址雷达IP是刚才修改的地址。配置文件里还有publish_freq参数默认10Hz可以改成20Hz但要注意点云数据量翻倍计算压力也会增加。2.2 FAST-LIO2编译与参数调优FAST-LIO2的ROS2版本在GitHub上有多个分支我推荐用fast_lio的ros2分支。依赖项包括Eigen、PCL、Sophus用apt安装即可sudo apt install libeigen3-dev libpcl-dev libsophus-dev编译FAST-LIO2之前需要修改CMakeLists.txt里的ROS版本和Livox驱动路径。编译完成后配置文件在config/目录下MID360对应的配置文件是mid360.yaml。关键参数调优参数名默认值建议值说明lidar_type111代表Livox系列scan_line44MID360是4线blind_spot0.50.3盲区距离太小会引入噪声time_sync_enfalsetrue开启时间同步extrinsic_T[0,0,0]实测值雷达和IMU的平移外参extrinsic_R单位矩阵实测值雷达和IMU的旋转外参外参标定是FAST-LIO2建图质量的关键。如果雷达和IMU不是刚性连接或者安装角度有偏差点云会明显分层。我通常用CAD模型量出大致外参然后跑一段直线和转弯数据看建图是否闭合。如果发现墙壁有重影说明外参有误差需要微调。2.3 建图实操与点云保存启动顺序很重要先启动雷达驱动再启动FAST-LIO2。命令如下# 终端1启动雷达 ros2 launch livox_ros_driver2 msg_MID360_launch.py # 终端2启动FAST-LIO2 ros2 launch fast_lio mapping_mid360.launch.py启动后在RViz里添加PointCloud2话题/cloud_registered就能看到实时建图效果。手持雷达在环境中缓慢走动速度不要太快让FAST-LIO2有足够的时间做帧间匹配。如果发现点云飘移先检查IMU数据是否正常再看外参是否准确。保存点云地图用pcl_ros的pointcloud_to_pcd节点或者直接用FAST-LIO2自带的保存功能。在RViz里点击“File”-“Save Map”或者用命令行ros2 run pcl_ros pointcloud_to_pcd input:/cloud_registered保存下来的PCD文件可以用CloudCompare查看和编辑去掉离群点和地面点方便后续做路径规划。注意建图时尽量避开动态物体比如走动的人和移动的车辆。FAST-LIO2虽然有一定的动态点剔除能力但大量动态点会导致地图出现“鬼影”影响避障效果。我一般在晚上或者人少的时候去建图效果最好。3. 高速避障算法与飞控集成3.1 局部避障规划从点云到速度指令20m/s速度下避障算法的实时性是第一位的。我试过几种方案基于栅格的A*、基于采样的RRT、基于动态窗口的DWA。最后选择的是基于柱状图的局部避障类似Autoware里的obstacle_avoidance思路但做了简化。具体做法是把FAST-LIO2输出的局部点云投影到无人机前方的二维平面按角度分成若干个扇区每个扇区取最近障碍物距离。然后根据当前速度方向选择障碍物距离大于安全阈值的扇区作为候选方向。安全阈值和速度相关20m/s时我设的是8米留出0.4秒的反应时间。速度指令生成逻辑# 伪代码 safe_distance max(5.0, current_speed * 0.4) for angle in candidate_angles: if sector_distance[angle] safe_distance: target_angle angle break # 平滑处理 target_angle low_pass_filter(target_angle, prev_angle, alpha0.3) # 生成速度指令 cmd_vel.linear.x current_speed * cos(target_angle) cmd_vel.linear.y current_speed * sin(target_angle) cmd_vel.linear.z altitude_hold_pid(current_altitude, target_altitude)这个逻辑简单但有效计算量极小在Orin NX上跑1kHz都没问题。关键参数是安全距离和扇区数量。扇区太多会导致计算量增加太少会导致方向分辨率不够。我一般用36个扇区每10度一个。3.2 飞控OFFBOARD模式配置与MAVROS桥接Pixhawk飞控需要配置成OFFBOARD模式接收来自机载电脑的速度指令。MAVROS是ROS和MAVLink之间的桥梁安装命令sudo apt install ros-humble-mavros ros-humble-mavros-extras安装完成后需要下载地理围栏数据sudo /opt/ros/humble/lib/mavros/install_geographiclib_datasets.shMAVROS启动后通过/mavros/setpoint_raw/local话题发送速度指令。消息类型是PositionTarget需要设置坐标系为FRAME_BODY_NED或FRAME_LOCAL_NED。我习惯用FRAME_BODY_NED速度指令直接对应机体坐标系避障算法输出的角度可以直接用。飞控参数配置参数值说明COM_RC_IN_MODE1允许OFFBOARDCOM_OBL_ACT1OFFBOARD丢失时悬停MPC_XY_VEL_MAX20最大水平速度20m/sMPC_Z_VEL_MAX_UP3最大上升速度MPC_Z_VEL_MAX_DN2最大下降速度EKF2_HGT_MODE3使用视觉/激光定高提示OFFBOARD模式切换需要遥控器辅助。我一般设置一个三段开关低位是手动中位是定高高位是OFFBOARD。切换前确保机载电脑已经在发送速度指令否则飞控会拒绝切换。3.3 高速飞行下的振动抑制与IMU减震20m/s飞行时机架振动会显著增大IMU数据噪声直接影响FAST-LIO2的配准精度。我踩过的坑是一开始用硬连接把雷达和IMU固定在碳纤维板上结果振动导致点云严重畸变建图飘得没法看。解决方案是三级减震第一级用减震球把飞控和机载电脑隔开第二级用减震板把雷达和IMU隔开第三级在IMU下面垫3M减震胶。减震球的硬度要选对太软会导致低频晃动太硬起不到减震效果。我试过几种硬度最后用的是硬度30A的硅胶减震球效果最好。另外桨叶一定要做动平衡。高速飞行时不平衡的桨叶会产生周期性振动频率和电机转速相关容易和IMU的共振频率耦合。我一般用动平衡仪把桨叶调到振动量小于0.5g·mm这样IMU的原始加速度噪声能降低一个数量级。4. 常见问题与排查技巧实录4.1 FAST-LIO2建图飘移的排查思路建图飘移是最高频的问题原因通常有以下几个外参不准这是最常见的原因。排查方法是跑一段直线看建图后的墙壁是否平直。如果墙壁有弧度或者重影说明外参有误差。解决方法是用CAD模型重新测量或者用lidar_align工具做离线标定。时间同步未开启MID360的点云和IMU时间戳如果不同步FAST-LIO2的帧间匹配会出错。检查time_sync_en是否设为true以及雷达固件是否支持时间同步。如果雷达不支持可以在Orin NX上跑一个软件时间同步节点把IMU时间戳对齐到点云时间戳。IMU噪声过大振动导致的IMU噪声会让FAST-LIO2的预测步骤发散。检查IMU的原始数据如果加速度计噪声超过0.1m/s²说明减震不够。加强减震或者换更低噪声的IMU。场景特征不足在长走廊或者空旷场地点云特征少FAST-LIO2容易退化。解决方法是在这些场景下降速飞行或者引入视觉辅助。4.2 避障误报和漏报的处理避障误报通常是因为点云噪声或者地面点未剔除。MID360的垂直视场较大地面点会被扫描到如果不剔除避障算法会把地面当成障碍物。解决方法是在点云预处理阶段做地面分割用RANSAC或者CSF算法把地面点滤掉。漏报则是因为障碍物太小或者太近。MID360的最小探测距离是0.1米但实际有效距离在0.3米以上。如果障碍物是细小的树枝或者电线点云可能只有几个点容易被忽略。我一般会在避障算法里加一个“膨胀”步骤把障碍物点云按安全距离膨胀确保不会漏掉。注意高速飞行时避障算法的延迟必须控制在50ms以内。如果延迟过大无人机发现障碍物时已经来不及避让。我实测Orin NX上从点云输入到速度指令输出延迟约30ms满足要求。如果用树莓派或者Jetson Nano延迟会超过100ms不建议用于20m/s的场景。4.3 常见问题速查表问题现象可能原因排查方法解决方案建图飘移外参不准跑直线看墙壁是否平直重新标定外参点云分层时间不同步检查时间戳开启时间同步避障误报地面点未剔除查看点云是否包含地面加地面分割避障漏报障碍物太小检查点云中障碍物点数加膨胀步骤OFFBOARD切换失败速度指令未发送检查MAVROS话题先发指令再切换飞行振动大桨叶不平衡动平衡仪检测做动平衡IMU噪声大减震不足查看原始数据加强减震雷达断连网线松动检查航空插头更换原厂线缆4.4 实操心得与避坑建议电池选择20m/s飞行时电流消耗很大。我用的6S 10000mAh电池续航约8分钟。如果追求更长续航可以用两块电池并联但重量会增加影响机动性。建议根据实际任务需求权衡。桨叶选择高速飞行需要高螺距桨叶但高螺距桨叶在低速时效率低。我试过几种桨叶最后用的是7寸三叶桨螺距4.5兼顾高速和悬停效率。飞控固件PX4和ArduPilot都支持OFFBOARD但PX4的EKF2对视觉/激光定高的支持更好。我建议用PX4 1.14以上版本EKF2的参数调优更方便。安全策略高速避障无人机风险很高一定要设置失效保护。我设置了三级保护第一级是避障算法失效时自动悬停第二级是OFFBOARD丢失时自动返航第三级是遥控器失控时自动降落。每次飞行前都要检查这些保护是否生效。场地选择第一次试飞一定要在空旷场地周围没有人和贵重物品。我一般选在郊外的草地半径50米内没有障碍物。试飞时先低速飞行逐步提速确认避障算法稳定后再上20m/s。日志记录每次飞行都要记录rosbag包括点云、IMU、里程计、速度指令。出问题时回放日志能快速定位是感知问题还是控制问题。我习惯用ros2 bag record记录所有话题飞行后分析。这个项目后续还可以扩展的地方很多比如加入视觉语义信息做目标识别或者用多机协同做编队避障。我目前在做的是把避障算法移植到FPGA上进一步降低延迟争取把速度提到25m/s以上。等有新的进展再跟大家分享。
返回列表