保姆级教程:在Ubuntu 20.04上为PX4无人机配置MID360+FAST-LIO(含Python代码避坑指南)
保姆级教程Ubuntu 20.04下PX4无人机与MID360激光雷达的FAST-LIO集成实战在无人机自主飞行领域室内定位一直是技术难点。传统GPS信号在室内完全失效而视觉方案受光照条件影响大。激光雷达SLAM技术凭借其稳定性和高精度成为室内无人机定位的理想选择。本教程将手把手带您完成PX4飞控与MID360激光雷达的FAST-LIO集成从环境配置到代码调试涵盖所有关键步骤和常见陷阱。1. 环境准备与基础配置1.1 硬件清单与连接检查在开始软件配置前确保您已准备好以下硬件飞控系统推荐使用兼容PX4的飞控如Holybro Pixhawk 4机载计算机至少i5处理器8GB内存安装Ubuntu 20.04MID360激光雷达Livox最新款固态激光雷达连接方式飞控与机载电脑通过USB或数传模块连接MID360通过Type-C接口连接机载电脑注意MID360安装方向会影响坐标系定义建议雷达接口朝向无人机后方并在后续配置中保持一致。1.2 软件依赖安装执行以下命令安装基础依赖sudo apt-get update sudo apt-get install -y ros-noetic-desktop-full \ ros-noetic-mavros ros-noetic-mavros-extras \ python3-catkin-tools python3-rosdep配置MAVROSwget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh chmod x install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh2. PX4飞控参数配置2.1 关键参数修改通过QGroundControl连接飞控修改以下参数参数名推荐值说明EKF2_AID_MASK24启用视觉位置融合EKF2_HGT_REF2高度参考源设为视觉EKF2_EV_CTRL7启用全部视觉融合选项COM_ARM_MAG_STR0禁用磁力计检查2.2 罗盘处理技巧由于激光雷达可能干扰磁力计建议完全禁用罗盘在QGC中搜索MAG相关参数将所有MAGx_EN参数设为0重启飞控使设置生效重要禁用罗盘后无人机上电时机头将随机指向这是正常现象。实际方向将由FAST-LIO提供的位置信息确定。3. FAST-LIO与MID360驱动配置3.1 雷达驱动安装与频率调整克隆并编译Livox驱动mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git cd .. rosdep install --from-paths src --ignore-src -r -y catkin_make修改雷达频率至30Hznano ~/catkin_ws/src/livox_ros_driver2/launch_ROS1/msg_MID360.launch找到并修改以下参数param namepublish_freq typedouble value30.0/3.2 FAST-LIO编译与配置安装FAST-LIO依赖sudo apt-get install -y libeigen3-dev libboost-all-dev cd ~/catkin_ws/src git clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO git submodule update --init cd ../.. catkin_make配置MID360专用启动文件cp ~/catkin_ws/src/FAST_LIO/launch/mapping_mid360.launch ~/catkin_ws/src/FAST_LIO/launch/custom_mapping.launch根据实际安装位置修改TF参数arg namelidar2base_tf default0 0 0 0 0 0 1/4. 关键代码实现与调试4.1 坐标转换节点实现创建Python节点处理FAST-LIO输出并发布到MAVROS#!/usr/bin/env python3 import rospy import tf import numpy as np from geometry_msgs.msg import PoseStamped from nav_msgs.msg import Odometry class FastLIOToMavros: def __init__(self): rospy.init_node(fastlio_to_mavros) # 初始化坐标系转换参数 self.init_yaw None self.init_quat [0, 0, 0, 1] # 订阅FAST-LIO和PX4的odometry rospy.Subscriber(/Odometry, Odometry, self.lio_callback) rospy.Subscriber(/mavros/local_position/odom, Odometry, self.px4_callback) # 发布到MAVROS的vision_pose self.vision_pub rospy.Publisher(/mavros/vision_pose/pose, PoseStamped, queue_size10) rospy.spin() def px4_callback(self, msg): # 获取初始yaw角 if self.init_yaw is None: quat [ msg.pose.pose.orientation.x, msg.pose.pose.orientation.y, msg.pose.pose.orientation.z, msg.pose.pose.orientation.w ] self.init_yaw tf.transformations.euler_from_quaternion(quat)[2] self.init_quat tf.transformations.quaternion_from_euler(0, 0, self.init_yaw) def lio_callback(self, msg): if self.init_yaw is None: return # 创建并发布vision_pose消息 vision_msg PoseStamped() vision_msg.header.stamp rospy.Time.now() vision_msg.header.frame_id map # 应用初始旋转 rot_matrix tf.transformations.quaternion_matrix(self.init_quat)[:3,:3] position np.array([msg.pose.pose.position.x, msg.pose.pose.position.y, msg.pose.pose.position.z]) rotated_pos np.dot(rot_matrix, position) vision_msg.pose.position.x rotated_pos[0] vision_msg.pose.position.y rotated_pos[1] vision_msg.pose.position.z rotated_pos[2] # 保持原始姿态 vision_msg.pose.orientation msg.pose.pose.orientation self.vision_pub.publish(vision_msg) if __name__ __main__: FastLIOToMavros()4.2 频率优化与性能平衡MID360默认频率(10Hz)与30Hz性能对比频率定位延迟CPU占用适合场景10Hz较高30%计算资源有限20Hz中等50%平衡场景30Hz最低70%高动态环境修改频率后需监控系统负载htop # 查看CPU使用率 rostopic hz /Odometry # 确认实际发布频率5. 系统验证与飞行测试5.1 坐标系验证方法启动所有节点roslaunch livox_ros_driver2 msg_MID360.launch roslaunch fast_lio mapping_mid360.launch roslaunch mavros px4.launch rosrun your_package fastlio_to_mavros.py检查坐标系对应关系在QGC中观察LOCAL_POSITION_NED消息在终端查看/mavros/local_position/pose话题预期行为无人机向前移动 → QGC中Y增加ROS话题中X增加无人机向右移动 → QGC中X减小ROS话题中Y减小无人机向上移动 → 两者Z值均减小5.2 首次飞行检查清单[ ] 确认MID360点云质量[ ] 检查FAST-LIO输出的位姿稳定性[ ] 验证QGC中位置反馈与实际移动方向一致[ ] 在1米高度内进行短时悬停测试[ ] 逐步扩大飞行范围常见问题排查位置漂移检查雷达安装稳固性减少振动方向错误确认初始yaw角计算正确更新延迟降低雷达频率或优化代码效率6. 高级优化与扩展6.1 多传感器融合配置在FAST-LIO基础上增加IMU数据融合修改FAST-LIO配置param nameuse_imu_as_input typebool valuetrue/ param nameimu_topic typestring value/mavros/imu/data/调整EKF2参数EKF2_AID_MASK 24 EKF2_EV_DELAY 0.056.2 性能监控脚本创建实时监控脚本#!/bin/bash while true; do echo CPU Usage: $(top -bn1 | grep fast_lio | awk {print $9})% echo Memory Usage: $(free -m | awk /Mem/{print $3})MB rostopic hz /Odometry sleep 2 done6.3 定位精度提升技巧在飞行区域放置反射标记物使用多雷达配置增加FOV定期校准雷达与飞控之间的TF变换调整FAST-LIO的point_filter_num参数平衡精度与性能实际飞行中保持环境有足够的几何特征最为关键。在空旷走廊等特征稀少区域建议降低飞行速度或增加辅助传感器。