【PX4】Ubuntu20.04+ROS Noetic 搭建Gazebo11多机仿真与MAVROS通信实战【避坑指南】
1. 环境准备与依赖安装在开始PX4多机仿真之前确保你的Ubuntu 20.04系统已经完成基础配置。我建议使用全新安装的系统避免之前安装的软件包造成冲突。实测下来ROS Noetic与Gazebo11的组合在纯净系统中表现最稳定。首先更新软件源这个步骤经常被新手忽略但非常重要sudo apt update sudo apt upgrade -y安装ROS Noetic桌面完整版时记得加上--fix-missing参数。我在三台不同配置的电脑上测试时发现某些依赖包会因为网络问题安装失败sudo apt install ros-noetic-desktop-full --fix-missing关键依赖项安装有个坑点要注意如果你之前安装过Anaconda必须彻底退出虚拟环境。有次我调试了3小时才发现是conda环境导致的编译错误。执行以下命令确保环境干净conda deactivate source /opt/ros/noetic/setup.bash多机仿真需要额外安装的依赖比单机更多这些包容易被遗漏sudo apt install python3-catkin-tools python3-osrf-pycommon \ libgazebo11-dev libgeographic-dev protobuf-compiler \ libeigen3-dev libopencv-dev -y2. PX4源码编译与多机配置2.1 PX4源码获取与分支选择推荐使用PX4 v1.13版本它对多机仿真的支持更完善。克隆代码时务必加上--recursive参数我第一次没加这个参数导致子模块缺失编译各种报错git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot多机仿真需要修改Tools/simulation/gazebo-classic/sitl_multiple_run.sh脚本。找到HEADLESS1这行改为HEADLESS0才能显示Gazebo界面sed -i s/HEADLESS1/HEADLESS0/g Tools/simulation/gazebo-classic/sitl_multiple_run.sh2.2 多机启动文件配置在PX4-Autopilot/launch目录下新建multi_uav_mavros_sitl.launch文件这是我调试过的最佳配置launch arg namevehicle defaultiris/ arg nameworld defaultempty/ !-- 第一台无人机 -- group nsuav1 include file$(find px4)/launch/single_vehicle_spawn.launch arg namex value0/ arg namey value0/ arg namez value0/ arg nameR value0/ arg nameP value0/ arg nameY value0/ arg namevehicle value$(arg vehicle)/ arg namercS value$(find px4)/posix-configs/SITL/init/$(arg vehicle)/iris_1/ arg nameID value1/ /include include file$(find mavros)/launch/px4.launch arg namefcu_url valueudp://:14540127.0.0.1:14580/ arg namegcs_url value/ arg nametgt_system value1/ /include /group !-- 第二台无人机 -- group nsuav2 include file$(find px4)/launch/single_vehicle_spawn.launch arg namex value5/ arg namey value0/ arg namez value0/ arg nameR value0/ arg nameP value0/ arg nameY value0/ arg namevehicle value$(arg vehicle)/ arg namercS value$(find px4)/posix-configs/SITL/init/$(arg vehicle)/iris_2/ arg nameID value2/ /include include file$(find mavros)/launch/px4.launch arg namefcu_url valueudp://:14541127.0.0.1:14581/ arg namegcs_url value/ arg nametgt_system value2/ /include /group /launch3. MAVROS通信配置技巧3.1 多机MAVROS参数调整每台无人机的MAVROS需要配置不同的UDP端口。这是我在实际项目中总结的端口分配方案无人机编号MAVROS端口SITL端口QGC端口UAV1145401458014550UAV2145411458114551UAV3145421458214552在rcS启动文件中需要修改mavlink端口配置。以iris_1为例修改PX4-Autopilot/posix-configs/SITL/init/$(arg vehicle)/iris_1文件mavlink start -x -u 14580 -r 4000000 -f -m onboard -o 145503.2 通信质量优化当无人机数量超过3台时建议调整MAVROS的通信参数。在px4.launch文件中添加这些参数能显著提升稳定性arg nameconn valueudp/ arg namegcs_url value/ param namesys_id value$(optenv GCS 1)/ param namemavlink_diag_rate value1.0/ param namefcu_protocol valuev2.0/4. 常见问题排查指南4.1 模型加载失败问题如果Gazebo提示模型缺失手动下载模型包是最快解决方案。创建一个gazebo_models目录存放自定义模型mkdir -p ~/.gazebo/models wget http://file.ncnynl.com/ros/gazebo_models_2016-04-18.tar.gz tar -xzf gazebo_models_2016-04-18.tar.gz -C ~/.gazebo/models/4.2 MAVROS连接超时当出现FCU: DeviceError:serial:open: Unknown error错误时按以下步骤排查检查端口是否被占用netstat -tulnp | grep 145确认PX4版本与MAVROS版本兼容性尝试重启mavros节点rosnode kill /mavros4.3 多机位置漂移问题在Gazebo配置文件中增加物理引擎参数可以改善这个问题。编辑~/.gazebo/gui.ini[physics] max_step_size0.001 iters50 typeode