【PX4】Ubuntu20.04+ROS Noetic 搭建Gazebo11多机仿真与MAVROS通信实战【避坑指南】
2026/5/16 16:53:34 网站建设 项目流程

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 -y

2. 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脚本。找到HEADLESS=1这行,改为HEADLESS=0才能显示Gazebo界面:

sed -i 's/HEADLESS=1/HEADLESS=0/g' Tools/simulation/gazebo-classic/sitl_multiple_run.sh

2.2 多机启动文件配置

PX4-Autopilot/launch目录下新建multi_uav_mavros_sitl.launch文件,这是我调试过的最佳配置:

<launch> <arg name="vehicle" default="iris"/> <arg name="world" default="empty"/> <!-- 第一台无人机 --> <group ns="uav1"> <include file="$(find px4)/launch/single_vehicle_spawn.launch"> <arg name="x" value="0"/> <arg name="y" value="0"/> <arg name="z" value="0"/> <arg name="R" value="0"/> <arg name="P" value="0"/> <arg name="Y" value="0"/> <arg name="vehicle" value="$(arg vehicle)"/> <arg name="rcS" value="$(find px4)/posix-configs/SITL/init/$(arg vehicle)/iris_1"/> <arg name="ID" value="1"/> </include> <include file="$(find mavros)/launch/px4.launch"> <arg name="fcu_url" value="udp://:14540@127.0.0.1:14580"/> <arg name="gcs_url" value=""/> <arg name="tgt_system" value="1"/> </include> </group> <!-- 第二台无人机 --> <group ns="uav2"> <include file="$(find px4)/launch/single_vehicle_spawn.launch"> <arg name="x" value="5"/> <arg name="y" value="0"/> <arg name="z" value="0"/> <arg name="R" value="0"/> <arg name="P" value="0"/> <arg name="Y" value="0"/> <arg name="vehicle" value="$(arg vehicle)"/> <arg name="rcS" value="$(find px4)/posix-configs/SITL/init/$(arg vehicle)/iris_2"/> <arg name="ID" value="2"/> </include> <include file="$(find mavros)/launch/px4.launch"> <arg name="fcu_url" value="udp://:14541@127.0.0.1:14581"/> <arg name="gcs_url" value=""/> <arg name="tgt_system" value="2"/> </include> </group> </launch>

3. MAVROS通信配置技巧

3.1 多机MAVROS参数调整

每台无人机的MAVROS需要配置不同的UDP端口。这是我在实际项目中总结的端口分配方案:

无人机编号MAVROS端口SITL端口QGC端口
UAV1145401458014550
UAV2145411458114551
UAV3145421458214552

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 14550

3.2 通信质量优化

当无人机数量超过3台时,建议调整MAVROS的通信参数。在px4.launch文件中添加这些参数能显著提升稳定性:

<arg name="conn" value="udp"/> <arg name="gcs_url" value=""/> <param name="sys_id" value="$(optenv GCS 1)"/> <param name="mavlink_diag_rate" value="1.0"/> <param name="fcu_protocol" value="v2.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错误时,按以下步骤排查:

  1. 检查端口是否被占用:netstat -tulnp | grep 145
  2. 确认PX4版本与MAVROS版本兼容性
  3. 尝试重启mavros节点:rosnode kill /mavros

4.3 多机位置漂移问题

在Gazebo配置文件中增加物理引擎参数可以改善这个问题。编辑~/.gazebo/gui.ini

[physics] max_step_size=0.001 iters=50 type=ode

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询