【ROS2】演示:创建内容过滤订阅

目标:创建内容过滤订阅。

 教程级别:高级

 时间:15 分钟

 目录

  •  概述

  •  RMW 支持

  •  安装演示

  • 温度过滤演示

  •  相关内容

 概述 

ROS 2 应用程序通常由主题组成,以便将数据从发布者传输到订阅者。基本上,订阅者会接收主题上发布者发布的所有数据。但有时,订阅者可能只对发布者发送的数据的一个子集感兴趣内容过滤订阅允许仅接收应用程序感兴趣的数据。

在此演示中,我们将重点介绍如何创建内容过滤订阅及其工作原理。

 RMW 支持 

内容过滤订阅需要 RMW 实施支持。

内容过滤订阅支持状态 

rmw_fastrtps

 支持

rmw_connextdds

 支持

rmw_cyclonedds

 不支持

目前所有支持内容过滤订阅的 RMW 实现都是基于 DDS 的。这意味着支持的过滤表达式和参数也依赖于 DDS https://www.omg.org/omg-dds-portal/ ,详情请参阅 DDS https://www.omg.org/spec/DDS/1.4/PDF 规范 Annex B - Syntax for Queries and Filters 。

安装演示 

请参阅安装说明以了解安装 ROS 2 的详细信息。

如果您已经从软件包安装了 ROS 2,请确保已安装 ros-jazzy-demo-nodes-cpp 。如果您下载了存档或从源代码构建了 ROS 2,它将已经是安装的一部分。

温度过滤演示 

此演示展示了如何使用内容过滤订阅仅接收超出可接受温度范围的温度值,从而检测紧急情况。内容过滤订阅会过滤掉不感兴趣的温度数据,因此不会发出订阅回调。

内容过滤发布者:

https://github.com/ros2/demos/blob/jazzy/demo_nodes_cpp/src/topics/content_filtering_publisher.cpp

#include <array> // 引入数组头文件
#include <chrono> // 引入时间库头文件
#include <memory> // 引入智能指针头文件
#include <utility> // 引入实用工具头文件


#include "rclcpp/rclcpp.hpp" // 引入ROS2的核心库
#include "rclcpp_components/register_node_macro.hpp" // 引入ROS2节点注册宏


#include "std_msgs/msg/float32.hpp" // 引入标准消息类型Float32


#include "demo_nodes_cpp/visibility_control.h" // 引入可见性控制头文件


namespace demo_nodes_cpp
{
// 模拟的温度数据从-100.0开始,到150.0结束,步长为10.0
constexpr std::array<float, 3> TEMPERATURE_SETTING {-100.0f, 150.0f, 10.0f};


// 创建一个ContentFilteringPublisher
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值