QoS(Quality of Service)

 

 总的来说,QoS是一个强大的工具,它提供了一种高效、灵活的方式来处理分布式系统中的数据通信和共享问题。

ROS1中,节点间的通信是基于TCP的。因为TCP的失败重传机制,在一些网络不稳定的场景,通信会出现延时严重的问题。这大大限制了ROS1的使用场景。

ROS2中,采用DDS作为通信中间件。ROS2DDS中间件是可以配置成不同厂家提供的。这些不同的DDS各自有不同的侧重点,可根据项目的不同需求来选择。ROS2 Galactic和Rolling默认采用rmw_cyclonedds_cpprmw_cyclonedds_cpp在进程间和多主机间通信的场景下,主要是使用UDP做为通信媒介。

每一个node都可以单独配置一个QoS,但是要注意不同配置之间是否兼容。

常用的配置:

  • History

    • Keep last: 只缓存最新的N个数据,N可通过DepthQueue size配置。

    • Keep all: 缓存所有的数据,但是受限于DDS底层的资源限制。

  • Depth

    • Queue size: 当History设置为Keep last时有效
  • Reliability

      • Best effort: 尽力传送数据,但是网络不稳定可能会丢弃一些数据。

      • Reliable: 确保数据被传送到,可能会重传多次,导致数据延时严重。

  • Durability

      • Transient local: 为后订阅话题的订阅者保留数据,比如map_server发布mapQos策略。
      • Volatile: 不为后订阅话题的订阅者保留数据,比如订阅传感器数据的节点。
  • Deadline

      • Duration: 设置数据被发布的间隔时间。比如:像cmd_vel等控制命令就希望是固定间隔时间下发的。
  • Lifespan

      • Duration: 设置数据从发布到被接收的最大间隔时间。超过该时间将被认为是过时的数据,直接丢弃了。这对于传感器数据来说是很重要的。因为过时的传感器数据毫无用处。
  • Liveliness

      • Automatic: 一个节点可能有多个发布器。只要有一个发布器发布了数据,系统将认为该节点的所有发布器在接下来的lease duration时间段内是活跃的。
      • Manual by topic: 如果手动确认发布器仍然是活跃的,系统将认为该发布器在接下来的lease duration时间段内是活跃的。
  • Lease Duration

      • Duration: 在这个时间段内,发布器需发布数据,不然会被系统认为是停止工作了。该参数与Liveliness配合使用。
posted @ 2023-12-12 18:00  ponder776  阅读(21)  评论(0编辑  收藏  举报