警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

设计指南:ROS 2 中的常见模式

作为共享库的可组合节点

背景

你想从一个软件包中导出一个可组合节点作为共享库,并在另一个可进行链接时组合的软件包中使用该节点。

解决方案

  • 在 CMake 文件中添加代码,以导入下游软件包中的实际目标

    • 安装生成的文件

    • 导出生成的文件

示例

ROS Discourse - Ament 库共享最佳实践

快速 RTPS 大数据传输

背景

您想通过快速 RTPS 传输大量数据。

问题

DDS/RTPS 使用 UDP,信息最大大小为 64k

解决方案

配置中间件,以便将大型数据分割成信息

实施情况

使用异步发布模式:

<publishMode>;
  <kind>ASYNCHRONOUS</kind> </publishMode>;

ROS2 微调

快速 RTPS 尽力而为视频流

背景

您希望传输视频流并提供最新数据。丢失一些图像也没关系。

问题

确认数据传输机制(也称为 "可靠 "传输)可确保每个数据包都能送达,但这可能会导致视频流落后。

解决方案

使用 "尽最大努力 "通信(而不是通常的基于确认的机制),并优先处理最后一帧。

实施情况

  • 配置 "尽力而为 "的可靠性机制

  • 配置服务质量历史记录以保留最后一帧

可靠性
  <kind>BEST_EFFORT</kind> </reliability> <historyQos>;
  <kind>KEEP_LAST</kind>;
  <深度>1</深度> </historyQos>;

ROS2 微调

快速 RTPS 可靠的视频流

背景

您想在不可靠的网络设置下传输视频流。

解决方案

使用可靠的通信机制。编写者和阅读者都要快速反应。

实施情况

  • 配置 "可靠 "的可靠性机制

  • 将写入器的 NACK 响应延迟和抑制持续时间配置为 0

  • 将阅读器的心跳响应延迟配置为 0

可靠性
  <kind>RELIABLE</kind> </reliability>;

# 作家
次数>;
  nackResponseDelay>;
    <持续时间名称>零</持续时间名称>;
  </nackResponseDelay>;
  nackSupressionDuration>;
    <持续时间名称>零</持续时间名称>;
  </nackSupressionDuration> </times>;

# 阅读器
次数>;
  <heartbeatResponseDelay>;
    <持续时间名称>零</持续时间名称>;
  </heartbeatResponseDelay> </times>;

ROS2 微调