跳至内容

利用 ROS 2 进行多车模拟

XRCE-DDS 允许多个客户端通过 UDP 连接到同一个代理。这在模拟中特别有用,因为只需启动一个代理。

设置和要求

唯一的要求是

运行原理

在模拟过程中,每个 PX4 实例都会收到一个唯一的 px4_instance0.该值用于为 UXRCE_DDS_KEY:

停止 设置 UXRCE_DDS_KEY $((px4_instance+1))

信息

这样做 UXRCE_DDS_KEY 总是与 MAV_SYS_ID.

此外,当 px4_instance 大于零,则唯一的 ROS 2 命名空间前缀 形式 px4_$px4_instance 已添加:

uxrce_dds_ns="-n px4_$px4_instance";

信息

环境变量 px4_uxrce_dds_ns的设置将覆盖上述命名空间行为。

第一例 (px4_instance=0的默认行为保持一致。 xrce-dds 在真实载具上的客户端。这种不匹配可以通过手动使用 px4_uxrce_dds_ns 或从索引开始添加载具。 1 而不是 0 (的默认行为)(这是 sitl_multiple_run.sh 用于 Gazebo Classic)。

模拟中的默认客户端配置概述如下:

px4_uxrce_dds_nspx4_instanceUXRCE_DDS_KEY客户端命名空间
未提供0px4_instance+1
只要0px4_instance+1px4_uxrce_dds_ns
未提供>0px4_instance+1px4_${px4_instance}
只要>0px4_instance+1px4_uxrce_dds_ns

调整 目标系统 价值

PX4 接受 载具指令 只有当其 目标系统 字段为零(广播通信)或与 MAV_SYS_ID.在所有其他情况下,信息都会被忽略。因此,当 ROS 2 节点要发送 载具指令 他们必须确保信息中填写了适当的 目标系统 价值。

例如,如果您想向您的第三辆车发送命令,该车有 px4_instance=2,您需要设置 target_system=3 在你所有的 载具指令 留言