1. 项目概述
在无人机开发领域,仿真环境搭建是每个开发者必经的第一道门槛。今天我要分享的是在Ubuntu 22.04系统上构建一个完整的四轴无人机仿真环境,这个环境整合了ROS 2 Humble、Gazebo Harmonic和PX4 SITL三大核心组件。这套方案不仅能模拟无人机的基本飞行特性,还能实现完整的传感器仿真和控制系统闭环测试。
为什么选择这个组合?首先,PX4是目前最成熟的开源飞控系统,提供了完整的飞控算法和硬件抽象层;Gazebo Harmonic是最新的仿真引擎,物理模拟精度更高;而ROS 2 Humble则是机器人开发的标配中间件。三者结合,可以构建一个从底层控制到上层算法开发的完整仿真平台。
2. 系统准备与环境配置
2.1 基础系统要求
在开始安装前,确保你的Ubuntu 22.04系统满足以下条件:
- 至少20GB的可用磁盘空间(仿真环境和依赖包体积较大)
- 8GB以上内存(推荐16GB以获得流畅体验)
- 支持OpenGL 3.3以上的显卡(Gazebo需要硬件加速)
重要提示:如果是全新安装的Ubuntu 22.04,强烈建议先执行系统升级。ROS 2官方文档特别指出,22.04上的systemd/udev相关问题可能导致后续安装失败。
bash复制sudo apt update
sudo apt upgrade -y
sudo reboot
2.2 开发工具链安装
安装基础开发工具和依赖库:
bash复制sudo apt update
sudo apt install -y git curl wget gnupg lsb-release \
build-essential cmake python3-pip python3-venv \
python3-colcon-common-extensions
这些工具将用于后续的代码克隆、编译和包管理。特别说明:
python3-venv:用于创建Python虚拟环境python3-colcon-common-extensions:ROS 2的构建工具扩展
3. ROS 2 Humble安装与配置
3.1 设置UTF-8 Locale
ROS 2对系统locale有严格要求,必须使用UTF-8编码:
bash复制sudo apt update && sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
验证locale设置是否正确:
bash复制locale
输出应包含en_US.UTF-8,特别是LC_ALL和LANG变量。
3.2 添加ROS 2软件源
使用官方推荐的ros2-apt-source方式添加软件源:
bash复制sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install -y curl
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
3.3 安装ROS 2桌面版
安装完整桌面版ROS 2和开发工具:
bash复制sudo apt update
sudo apt upgrade -y
sudo apt install -y ros-humble-desktop
sudo apt install -y ros-dev-tools
安装完成后,设置环境变量:
bash复制echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.4 初始化rosdep
rosdep是ROS的依赖管理工具,必须初始化:
bash复制sudo apt install -y python3-rosdep
sudo rosdep init
rosdep update
3.5 验证ROS 2安装
运行简单的发布-订阅示例验证安装:
终端1:
bash复制ros2 run demo_nodes_cpp talker
终端2:
bash复制ros2 run demo_nodes_py listener
如果能看到消息正常传输,说明ROS 2安装成功。
4. Gazebo Harmonic安装与配置
4.1 安装Gazebo Harmonic
Gazebo现在有两个主要版本线:
- Gazebo Classic(旧版,不建议新项目使用)
- Gazebo Sim(新版,推荐使用)
安装Gazebo Harmonic:
bash复制sudo apt-get update
sudo apt-get install -y curl lsb-release gnupg
sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] https://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install -y gz-harmonic
验证安装:
bash复制gz sim --version
4.2 解决Gazebo版本冲突
如果之前安装过Gazebo Classic(gazebo11),必须先卸载:
bash复制sudo apt remove gazebo11 libgazebo11-dev
sudo apt autoremove
注意:
gz-harmonic与gazebo11不能共存,因为它们使用相同的命令行工具gz。
5. ROS 2与Gazebo集成
5.1 安装ros_gz集成包
ROS 2 Humble官方支持的是Gazebo Fortress,但我们要用Harmonic,需要安装特定版本:
bash复制sudo apt-get update
sudo apt-get install -y ros-humble-ros-gzharmonic
重要提示:
ros-humble-ros-gzharmonic会与官方ros-humble-ros-gz*包冲突,不要混装。
5.2 测试ROS 2与Gazebo联动
启动Gazebo仿真环境:
bash复制source /opt/ros/humble/setup.bash
ros2 launch ros_gz_sim gz_sim.launch.py gz_args:="shapes.sdf"
如果能看到Gazebo界面并加载了基本形状,说明集成成功。
6. PX4飞控系统安装与配置
6.1 获取PX4源码
克隆PX4源码仓库(包含所有子模块):
bash复制cd ~
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
6.2 安装PX4工具链
因为我们已手动安装Gazebo,使用--no-sim-tools选项:
bash复制bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-sim-tools
6.3 编译PX4 SITL
首次编译需要较长时间:
bash复制cd ~/PX4-Autopilot
make px4_sitl
6.4 启动Gazebo四轴模型
PX4提供了多种无人机模型,我们使用gz_x500四轴模型:
bash复制make px4_sitl gz_x500
如果遇到ninja: error: unknown target 'gz_x500'错误,执行:
bash复制make distclean
make px4_sitl gz_x500
7. ROS 2与PX4通信配置
7.1 安装Micro XRCE-DDS Agent
PX4通过uXRCE-DDS与ROS 2通信,需要安装Agent:
bash复制cd ~
git clone -b v2.4.3 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/
7.2 启动通信系统
需要三个终端分别运行不同组件:
终端1 - 启动Agent:
bash复制MicroXRCEAgent udp4 -p 8888
终端2 - 启动PX4仿真:
bash复制cd ~/PX4-Autopilot
make px4_sitl gz_x500
终端3 - 创建ROS 2工作区并测试通信:
bash复制mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
cd ..
source /opt/ros/humble/setup.bash
colcon build
安装额外Python依赖:
bash复制pip install --user -U empy==3.3.4 pyros-genmsg setuptools
运行测试节点:
bash复制source install/local_setup.bash
ros2 launch px4_ros_com sensor_combined_listener.launch.py
如果能看到传感器数据输出,说明整个系统已正确连接。
8. 常见问题与解决方案
8.1 系统包冲突问题
现象:安装ROS 2后系统组件异常
解决方案:按照ROS 2文档建议,在安装前执行sudo apt upgrade
8.2 Gazebo版本冲突
现象:gz命令行为异常
解决方案:彻底卸载Gazebo Classic后再安装Harmonic
8.3 ROS 2与Gazebo版本不匹配
现象:ros_gz功能异常
解决方案:确保使用ros-humble-ros-gzharmonic而非官方默认包
8.4 PX4模型加载失败
现象:gz_x500目标不存在
解决方案:执行make distclean后重新编译
8.5 通信链路不通
现象:ROS 2节点收不到PX4数据
解决方案:
- 检查Agent是否正常运行
- 确认PX4启动时连接了正确的Agent端口
- 验证ROS 2工作区是否正确构建
9. 进阶使用建议
9.1 自定义无人机模型
要使用自己的无人机模型,需要:
- 在
PX4-Autopilot/Tools/simulation/gz/models下添加模型文件 - 创建对应的SDF配置文件
- 在PX4编译系统中注册新模型
9.2 添加自定义传感器
通过修改Gazebo模型文件可以添加虚拟传感器,如:
- 摄像头
- 激光雷达
- 深度相机
9.3 开发控制算法
利用ROS 2节点可以:
- 订阅PX4发布的传感器数据
- 实现控制算法
- 通过uXRCE-DDS向PX4发送控制指令
9.4 性能优化技巧
对于资源有限的系统:
- 降低Gazebo的物理仿真频率
- 使用
headless模式运行Gazebo - 简化无人机模型和场景复杂度
这套仿真环境已经过实际项目验证,能够稳定支持从基础飞行控制到复杂自主导航算法的开发。我在实际使用中发现,定期更新各组件到最新稳定版本能有效避免兼容性问题。特别是在PX4固件升级后,记得同步更新px4_msgs和px4_ros_com仓库,确保消息定义一致。