PX4与Gazebo Harmonic仿真学习
PX4 源码自带 Gazebo Harmonic 仿真,不需要单独安装仿真器。本文整理 PX4 + Gazebo Harmonic 的常用操作:启动仿真、查看 Gazebo 话题、桥接到 ROS 2,以及独立启动、无界面、多机等启动参数。
环境安装
下载 PX4 源码即可:
1 | git clone git@github.com:dreamer198/PX4-Autopilot.git --recursive |
命令中的 --recursive 表示同时下载子模块。
基本使用
启动仿真
进入 PX4 目录,编译并启动仿真:
1 | cd /path/to/PX4-Autopilot |
这会编译并启动 x500 无人机模型。
其他常用模型:
1 | make px4_sitl gz_x500_depth # 带深度相机的 x500 |
Gazebo 话题操作
查看所有 Gazebo 话题:
1 | gz topic -l |
查看特定话题的数据:
1 | gz topic -e -t <话题名称> |
桥接到 ROS 2
桥接话题需要安装
ros-humble-ros-gzharmonic,而不是 ROS 2 自带的ros-humble-ros-gz。
桥接命令的格式:
1 | ros2 run ros_gz_bridge parameter_bridge /TOPIC@ROS_MSG@GZ_MSG |
| 写法 | 含义 |
|---|---|
/TOPIC |
Gazebo 中的话题名 |
ROS_MSG |
ROS 2 消息类型 |
GZ_MSG |
Gazebo 消息类型 |
@ |
双向桥接 |
[ |
Gazebo → ROS 单向 |
] |
ROS → Gazebo 单向 |
桥接后话题名保持不变。例如桥接深度相机图像:
1 | ros2 run ros_gz_bridge parameter_bridge /depth_camera@sensor_msgs/msg/Image[gz.msgs.Image |
高级配置
独立启动模式
只启动 PX4,等待单独启动的 Gazebo 环境:
1 | PX4_GZ_STANDALONE=1 make px4_sitl gz_x500 |
无GUI模式
不启动图形界面,减少内存占用:
1 | HEADLESS=1 make px4_sitl gz_x500 |
设置地理位置
手动设置世界模型的中心经纬高:
1 | export PX4_HOME_LAT=51.1788 |
选择世界模型
设置特定的世界模型:
1 | PX4_GZ_WORLD=Baylands make px4_sitl gz_x500 |
调整仿真速度
1 | PX4_SIM_SPEED_FACTOR=2 make px4_sitl gz_x500 |
参数配置要点
| 配置项 | 参数 | 说明 |
|---|---|---|
| 飞行机型 | PX4_SYS_AUTOSTART |
指定使用的机型编号 |
| 新建飞机 | PX4_SIM_MODEL 或 PX4_GZ_MODEL_NAME |
连接已有飞机 |
| 初始位置 | PX4_GZ_MODEL_POSE |
设置模型的初始位姿 |
| 世界模型 | PX4_GZ_WORLD |
选择Gazebo世界环境 |
| 启动模式 | PX4_GZ_STANDALONE |
是否独立启动 |
| 仿真速度 | PX4_SIM_SPEED_FACTOR |
仿真速度倍率 |
直接使用px4二进制文件
除了 make,也可以直接运行编译好的 px4 二进制文件,参数调整更灵活:
1 | ./build/px4_sitl_default/bin/px4 -i <实例编号> |
-i 用来区分不同的无人机实例。
多机仿真示例
1 | # 第一架无人机 |
常见问题
| 问题 | 处理方法 |
|---|---|
| 桥接失败 | 确认安装的是 ros-humble-ros-gzharmonic |
| 仿真启动慢 | 用 HEADLESS=1 关闭图形界面,或调整 PX4_SIM_SPEED_FACTOR |
| 多机实例冲突 | 用 -i 给每个实例分配唯一编号 |
参考资源
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dreamer Island!

