# 带仿真场景Gazebo的多车模拟

本主题介绍如何使用以下工具模拟多个无人飞行器 仿真场景Gazebo (Gz) 和 SITL。

备注

使用 Gazebo 进行多车模拟仅支持 Linux 系统。

与其他模拟器相比,Gazebo 可以非常方便地设置多载具场景。

首先使用 PX4 SITL 生成代码:

生产 px4_sitl

然后,PX4 的每个实例都可以在自己的终端中启动,并指定一个唯一的实例编号及其所需的 环境变量:

ARGS ./build/px4_sitl_default/bin/px4 [-i <;实例>;]
  • 实例>;:载具的实例编号。
    • 每辆车必须有一个唯一的实例编号。如果没有给出,实例编号默认为零。
    • 当与 PX4_GZ_MODEL,Gazebo 会自动选择一个唯一的模型名称,其形式为 ${PX4_GZ_MODEL}_instance.
  • ARGS:中描述的环境变量列表。 仿真场景Gazebo模拟 > 用途/配置选项.

这样可以实现更大的灵活性和定制化。

# 配备 ROS 2 和仿真场景Gazebo的多辆汽车

使用 ROS 2 的多辆汽车 是可能的。

  • 首先按照以下安装说明进行安装 仿真场景Gazebo.

  • 然后将系统配置为 ROS 2 / PX4 操作.

  • 在不同终端手动启动多飞行器模拟。本示例将生成 2 架 X500 四旋翼飞行器和 1 架固定翼飞行器:

    px4_sys_autostart=4001 PX4_GZ_MODEL=x500 ./build/px4_sitl_default/bin/px4 -i 1
    
    px4_sys_autostart=4001 px4_gz_model_pose="0,1"; PX4_GZ_MODEL=x500 ./build/px4_sitl_default/bin/px4 -i 2
    
    px4_sys_autostart=4003 px4_gz_model_pose="0,2"; PX4_GZ_MODEL=rc_cessna ./build/px4_sitl_default/bin/px4 -i 3
    
  • 启动代理:

    MicroXRCEAgent udp4 -p 8888
    

    代理将自动连接所有客户端。

  • 运行 ros2 主题列表 查看主题列表,列表应该是这样的:

/参数事件 /px4_1/fmu/in/obstacle_distance /px4_1/fmu/in/offboard_control_mode /px4_1/fmu/in/onboard_computer_status /px4_1/fmu/in/sensor_optical_flow/px4_1/fmu/in/telemetry_status /px4_1/fmu/in/trajectory_setpoint /px4_1/fmu/in/vehicle_attitude_setpoint /px4_1/fmu/in/vehicle_command/px4_1/fmu/in/vehicle_mocap_odometry /px4_1/fmu/in/vehicle_rate_setpoint /px4_1/fmu/in/vehicle_trajectory_bezier /px4_1/fmu/in/vehicle_trajectory_waypoint/px4_1/fmu/in/vehicle_visual_odometry /px4_1/fmu/out/failsafe_flags /px4_1/fmu/out/sensor_combined /px4_1/fmu/out/timesync_status /px4_1/fmu/out/vehicle_attitude/px4_1/fmu/out/vehicle_control_mode /px4_1/fmu/out/vehicle_global_position /px4_1/fmu/out/vehicle_gps_position /px4_1/fmu/out/vehicle_local_position/px4_1/fmu/out/vehicle_odometry /px4_1/fmu/out/vehicle_status /px4_2/fmu/in/obstacle_distance /px4_2/fmu/in/offboard_control_mode /px4_2/fmu/in/onboard_computer_status/px4_2/fmu/in/sensor_optical_flow /px4_2/fmu/in/telemetry_status /px4_2/fmu/in/trajectory_setpoint /px4_2/fmu/in/vehicle_attitude_setpoint/px4_2/fmu/in/vehicle_command /px4_2/fmu/in/vehicle_mocap_odometry /px4_2/fmu/in/vehicle_rate_setpoint /px4_2/fmu/in/vehicle_trajectory_bezier/px4_2/fmu/in/vehicle_trajectory_waypoint /px4_2/fmu/in/vehicle_visual_odometry /px4_2/fmu/out/failsafe_flags /px4_2/fmu/out/sensor_combined /px4_2/fmu/out/timesync_status/px4_2/fmu/out/vehicle_attitude /px4_2/fmu/out/vehicle_control_mode /px4_2/fmu/out/vehicle_global_position /px4_2/fmu/out/vehicle_gps_position/px4_2/fmu/out/vehicle_local_position /px4_2/fmu/out/vehicle_odometry /px4_2/fmu/out/vehicle_status /px4_3/fmu/in/obstacle_distance /px4_3/fmu/in/offboard_control_mode/px4_3/fmu/in/onboard_computer_status /px4_3/fmu/in/sensor_optical_flow /px4_3/fmu/in/telemetry_status /px4_3/fmu/in/trajectory_setpoint/px4_3/fmu/in/vehicle_attitude_setpoint /px4_3/fmu/in/vehicle_command /px4_3/fmu/in/vehicle_mocap_odometry /px4_3/fmu/in/vehicle_rate_setpoint/px4_3/fmu/in/vehicle_trajectory_bezier /px4_3/fmu/in/vehicle_trajectory_waypoint /px4_3/fmu/in/vehicle_visual_odometry /px4_3/fmu/out/failsafe_flags/px4_3/fmu/out/sensor_combined /px4_3/fmu/out/timesync_status /px4_3/fmu/out/vehicle_attitude /px4_3/fmu/out/vehicle_control_mode /px4_3/fmu/out/vehicle_global_position/px4_3/fmu/out/vehicle_gps_position /px4_3/fmu/out/vehicle_local_position /px4_3/fmu/out/vehicle_odometry /px4_3/fmu/out/vehicle_status /rosout