PX4与Gazebo Harmonic仿真学习
环境安装
PX4源码中自带Gazebo仿真器,因此只需要下载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 <话题名称> |
ROS2桥接
注意:在桥接话题时需要安装
ros-humble-ros-gzharmonic,而不是ROS2自带的ros-humble-ros-gz
Gazebo话题可以桥接到ROS2话题:
1 | ros2 run ros_gz_bridge parameter_bridge /TOPIC@ROS_MSG@GZ_MSG |
参数说明:
/TOPIC:Gazebo里的话题名ROS_MSG:ROS2消息类型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模式
不启动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禁用GUI,或调整PX4_SIM_SPEED_FACTOR - 多机通信:使用
-i参数为每个实例分配唯一ID
参考资源
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dreamer Island!






