rclcpp::Qos
是一个用于配置 ROS 2 发布者和订阅者质量保证(Quality of Service,QoS)的类。QoS 可以用来配置通信中的一些属性,例如消息传输的可靠性、延迟和带宽等。
在 ROS 2 中,发布者和订阅者可以通过使用 rclcpp::Qos
类来配置其QoS。
通讯需求-三参数
当使用 rclcpp::Qos
类配置 ROS 2 发布者和订阅者的 QoS 时,可以选择不同的 QoS 配置参数,以满足不同的通信需求。下面是一些常用的 QoS 配置参数:
1.可靠性 (Reliability)
可靠性是指消息传输的可靠程度。在 ROS 2 中,有两种可靠性选项:
ReliabilityPolicyKind::BEST_EFFORT
:不保证消息的传输,如果有消息丢失,将不会重发。ReliabilityPolicyKind::RELIABLE
:保证消息传输,如果有消息丢失,将会重发。
例如,以下代码创建一个发布者,并将其 QoS 配置为可靠性为 RELIABLE
:
auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", rclcpp::Qos(rclcpp::ReliabilityPolicyKind::RELIABLE));
2.延迟 (Latency)
延迟是指消息在发送和接收之间所需的时间。在 ROS 2 中,可以选择以下延迟选项:
HistoryPolicyKind::KEEP_LAST
:保留最近的一些消息,可以设置保留的消息数。HistoryPolicyKind::KEEP_ALL
:保留所有消息,可能会占用大量内存。HistoryPolicyKind::KEEP_LAST
+depth
:保留最近的depth
条消息。
例如,以下代码创建一个发布者,并将其 QoS 配置为保留最近的10条消息:
auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", rclcpp::Qos(rclcpp::KeepLast(10)));
3.带宽 (Bandwidth)
带宽是指在给定时间内可以传输的消息数量。在 ROS 2 中,可以选择以下带宽选项:
ReliabilityPolicyKind::BEST_EFFORT
+BandwidthPolicyKind::BEST_EFFORT
:不保证带宽。ReliabilityPolicyKind::RELIABLE
+BandwidthPolicyKind::RELAXED
:尽量提供带宽,但不保证完全可用。ReliabilityPolicyKind::RELIABLE
+BandwidthPolicyKind::DEDICATED
:保证带宽完全可用。
例如,以下代码创建一个发布者,并将其 QoS 配置为带宽完全可用:
auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", rclcpp::Qos(rclcpp::ReliabilityPolicyKind::RELIABLE, rclcpp::BandwidthPolicyKind::DEDICATED));
同时配置多参数也可以参考配置带款的代码
这些仅仅是 QoS 配置参数的一部分,实际使用中,可以根据具体的通信需求选择适当的 QoS 配置参数。
同时配置qos的多参数可参考配置带宽的代码。
可以同时使用多个 QoS 配置参数,以满足不同的通信需求。以下是一个示例,展示如何同时使用可靠性、延迟和带宽 QoS 配置参数:
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
int main(int argc, char ** argv)
{
// 初始化ROS节点
rclcpp::init(argc, argv);
// 创建节点
auto node = std::make_shared<rclcpp::Node>("my_publisher");
// 配置QoS
rclcpp::Qos qos(rclcpp::QosInitialization::from_xml_file("/path/to/qos.xml"));
// 创建发布者,指定消息类型为std_msgs::msg::String
auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", qos);
// ... }
在这个示例中,通过 rclcpp::QosInitialization::from_xml_file()
方法从 XML 文件中加载 QoS 配置参数,并将其传递给 rclcpp::Qos
对象。XML 文件可以包含可靠性、延迟和带宽等多个 QoS 配置参数,例如:
<?xml version="1.0" encoding="UTF-8"?>
<ros_qos_profile>
<reliability>
<kind>BEST_EFFORT</kind>
</reliability>
<history>
<kind>KEEP_LAST</kind>
<depth>10</depth>
</history>
<resource_limits>
<max_samples>100</max_samples>
<max_instances>1</max_instances>
<max_samples_per_instance>100</max_samples_per_instance>
</resource_limits>
</ros_qos_profile>
在这个 XML 文件中,使用了 BEST_EFFORT
可靠性、 KEEP_LAST
延迟和 100 次传输限制。可以根据实际需求修改这些配置参数。最后将 rclcpp::Qos
对象传递给发布者的构造函数,以将 QoS 配置参数应用于发布者。