DDS为数据为中心模型。DDS里所有节点可以在DataBus发布和订阅消息,不过DataBus有许多并行通路,各个节点互不干扰
DDS全面数据分发服务(data distribution service),是为实时系统设计的数据分发、订阅标准
DDS有很多不同厂商提供的版本。在ROS2里面,ROS Middleware确保任何版本都和上层软件兼容,以提高软件复用率
DDS的QoS传输策略:
1 Deadline:在每一个时间范围内必须传输一次数据
2 History:历史数据缓存大小
3 Reliability:在BEST_EFFORT模式会加快传输,但是可能会丢失数据。在RELIABLE模式数据会完整传输,但可能较慢
对于通信双方QoS传输策略必须完全一致才能进行通信
示例:
在终端创建一个发布者:
ros2 topic pub /chatter std_msgs/Int32 “data: 42” --qos-reliability best_effort
这里QoS设置通信可靠性为best_effort
再创建一个订阅者
ros2 topic echo /chatter --qos-reliability reliable
这里QoS设为reliable,和前者不符。会发现订阅者尽管订阅的话题名称和发布者一致,但由于QoS不同无法通信
将订阅者里reliable改为best_effort会恢复通信
ros2 topic info (查询节点) --verbose
查询发布者详细信息,包括QoS信息
在程序里面配置QoS设置:
还是利用hello world话题通信程序作为例子,不过在这里我们为发布者和订阅者都配置QoS设置。
发布者
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy
class PublisherNode(Node):