环境安装

PX4源码中自带Gazebo仿真器,因此只需要下载PX4源码即可:

1
git clone git@github.com:dreamer198/PX4-Autopilot.git --recursive

命令中的 --recursive 表示同时下载子模块。

基本使用

启动仿真

进入PX4目录并编译启动仿真:

1
2
cd /path/to/PX4-Autopilot
make px4_sitl gz_x500

这会编译并启动x500无人机模型。

其他常用模型:

1
2
make px4_sitl gz_x500_depth    # 带深度相机的x500
make px4_sitl gz_rc_cessna # Cessna飞机模型

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
2
3
4
export PX4_HOME_LAT=51.1788
export PX4_HOME_LON=-1.8263
export PX4_HOME_ALT=101
make px4_sitl gz_x500

选择世界模型

设置特定的世界模型:

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_MODELPX4_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
2
3
4
5
6
7
8
# 第一架无人机
PX4_SYS_AUTOSTART=4001 PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4 -i 1

# 第二架无人机(独立启动,位置偏移1米)
PX4_GZ_STANDALONE=1 PX4_SYS_AUTOSTART=4001 PX4_GZ_MODEL_POSE="0,1" PX4_SIM_MODEL=gz_x500 ./build/px4_sitl_default/bin/px4 -i 2

# 第三架无人机(Cessna模型,位置偏移2米)
PX4_GZ_STANDALONE=1 PX4_SYS_AUTOSTART=4003 PX4_GZ_MODEL_POSE="0,2" PX4_SIM_MODEL=gz_rc_cessna ./build/px4_sitl_default/bin/px4 -i 3

常见问题

  1. 桥接失败:确保安装了正确的 ros-humble-ros-gzharmonic
  2. 仿真启动慢:可以使用 HEADLESS=1 禁用GUI,或调整 PX4_SIM_SPEED_FACTOR
  3. 多机通信:使用 -i 参数为每个实例分配唯一ID

参考资源