1

我正在使用 xml 应用程序创建将 ROS2 与本机 RTI DDS 连接,即意味着所有 QoS 设置都在此 xml 文件中。

现在,对于本机 DDS 应用程序,我可以设置这个 .xml 文件,但是如何为基于 ROS2 的功能设置类似的配置文件?

4

1 回答 1

2

您是否查看过以下材料:https ://github.com/ros2/ros2/wiki/About-Quality-of-Service-Settings ?ROS2 有一组有限的用于设置 QoS 的选项。

通过在 DDS 应用程序中设置 QoS 策略以匹配 ROS2 中的设置,您可能会取得更大的成功。(顺便说一句,这是 RTI Admin Console 使事情变得更容易的地方;它会立即显示参与者之间的任何 QoS 不匹配)。

我用来获得 DDS/ROS2 互操作性的 DDS QoS 设置包括:

  • 如果使用 ROS2 'Ardent':
    • 使用名为“rt”的 DDS 分区(在 QoS 文件中设置<publisher_qos>
  • 如果使用 ROS2 'Bouncy':
    • 在主题名称前加上“rt/”
    • 抑制 typeCode 发送(在 QoS 文件<participant_qos><resource_limits>中为 type_code 和 type_object == 0 设置 max_serialized_length 下)
  • 对于任一版本:
    • 可能需要包括对无界字符串和序列的支持。
    • 可能需要包含 UDPv6 并禁用 SHMEM 传输

ROS2 RMW代码中做的QoS设置不多;Connext 库将使用正常搜索顺序(在此处详述)查找用户 QoS 设置的来源——这意味着您可以使用多种方法为 ROS2 下的 Connext 库提供自己的 QoS 设置。这是我所做的:

  • 要在 ROS2 中禁用多播,请在启动 ROS2 应用程序的目录(输入并运行 ros2 命令的目录)中创建一个名为“NDDS_DISCOVERY_PEERS”的文件。在此文件中放置用于发现的初始对等点列表(确保排除多播和 shmem)格式,详见此处
    • 我的文件有:localhost,192.168.1.44
  • 对于其他 QoS 设置,将包含您希望在 ROS2 中使用的 QoS 设置的“USER_QOS_PROFILES.xml”文件放在与上述相同的目录中。这些设置将影响从该目录启动的 ROS2 应用程序。
于 2018-09-05T17:07:40.047 回答