QoS(Quality of Service)
总的来说,QoS是一个强大的工具,它提供了一种高效、灵活的方式来处理分布式系统中的数据通信和共享问题。
在ROS1
中,节点间的通信是基于TCP
的。因为TCP
的失败重传机制,在一些网络不稳定的场景,通信会出现延时严重的问题。这大大限制了ROS1
的使用场景。
在ROS2
中,采用DDS
作为通信中间件。ROS2
的DDS
中间件是可以配置成不同厂家提供的。这些不同的DDS
各自有不同的侧重点,可根据项目的不同需求来选择。ROS2 Galactic和Rolling
默认采用rmw_cyclonedds_cpp
。rmw_cyclonedds_cpp
在进程间和多主机间通信的场景下,主要是使用UDP
做为通信媒介。
每一个node都可以单独配置一个QoS,但是要注意不同配置之间是否兼容。
常用的配置:
-
History
-
Keep last: 只缓存最新的
N
个数据,N
可通过Depth
的Queue size
配置。 -
Keep all: 缓存所有的数据,但是受限于DDS底层的资源限制。
-
Depth
- Queue size: 当
History
设置为Keep last
时有效 -
Reliability
-
Best effort: 尽力传送数据,但是网络不稳定可能会丢弃一些数据。
-
Reliable: 确保数据被传送到,可能会重传多次,导致数据延时严重。
-
-
Durability
- Transient local: 为后订阅话题的订阅者保留数据,比如
map_server
发布map
的Qos
策略。 - Volatile: 不为后订阅话题的订阅者保留数据,比如订阅传感器数据的节点。
- Transient local: 为后订阅话题的订阅者保留数据,比如
-
Deadline
- Duration: 设置数据被发布的间隔时间。比如:像
cmd_vel
等控制命令就希望是固定间隔时间下发的。
- Duration: 设置数据被发布的间隔时间。比如:像
-
Lifespan
- Duration: 设置数据从发布到被接收的最大间隔时间。超过该时间将被认为是过时的数据,直接丢弃了。这对于传感器数据来说是很重要的。因为过时的传感器数据毫无用处。
-
Liveliness
- Automatic: 一个节点可能有多个发布器。只要有一个发布器发布了数据,系统将认为该节点的所有发布器在接下来的
lease duration
时间段内是活跃的。 - Manual by topic: 如果手动确认发布器仍然是活跃的,系统将认为该发布器在接下来的
lease duration
时间段内是活跃的。
- Automatic: 一个节点可能有多个发布器。只要有一个发布器发布了数据,系统将认为该节点的所有发布器在接下来的
-
Lease Duration
- Duration: 在这个时间段内,发布器需发布数据,不然会被系统认为是停止工作了。该参数与
Liveliness
配合使用。
- Duration: 在这个时间段内,发布器需发布数据,不然会被系统认为是停止工作了。该参数与
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)