在这里插入图片描述

ROS 系列学习教程(总目录)
ROS2 系列学习教程(总目录)

目录

    • 1. 构造函数
    • 2. 节点名称相关
    • 3. 获取log对象句柄
    • 4. 回调组相关
    • 5. Topic发布与订阅
    • 6. Service服务端与客户端

1. 构造函数

public:Node(const std::string & node_name, const NodeOptions & options = NodeOptions());Node(const std::string & node_name, const std::string & namespace_, const NodeOptions & options = NodeOptions());
protected:Node(const Node & other, const std::string & sub_namespace);

2. 节点名称相关

获取节点名称

const char *get_name() const;

获取节点名空间

const char *get_namespace() const;

获取包含名空间和名称的全名

const char *get_fully_qualified_name() const;

获取当前 ROS 2 系统中所有活跃节点的名称列表

std::vector<std::string> get_node_names() const;

获取 ROS 2 系统中当前活跃的 主题(Topic)和 服务(Service)的名称及其关联的消息或服务类型

std::map<std::string, std::vector<std::string>> get_topic_names_and_types() const;
std::map<std::string, std::vector<std::string>> get_service_names_and_types() const;

获取指定节点提供的所有服务名称及其对应的服务类型列表

std::map<std::string, std::vector<std::string>>
get_service_names_and_types_by_node(const std::string & node_name,const std::string & namespace_) const;

3. 获取log对象句柄

rclcpp::Logger get_logger() const;

4. 回调组相关

回调组是ROS 2中管理回调函数执行的重要机制,它允许开发者控制不同回调之间的执行关系。(后面会详细介绍)

创建并返回一个回调组指针

rclcpp::CallbackGroup::SharedPtr create_callback_group(// 指定回调组的类型,枚举值,决定回调组如何被调度执行rclcpp::CallbackGroupType group_type,// 决定是否自动将这个回调组添加到与节点关联的执行器(executor)中bool automatically_add_to_executor_with_node = true);

遍历节点中的所有回调组,并对每个有效的回调组执行给定的函数

void for_each_callback_group(const  node_interfaces::NodeBaseInterface::CallbackGroupFunction & func);

5. Topic发布与订阅

创建并返回一个发布者指针

std::shared_ptr<PublisherT>
create_publisher(const std::string & topic_name,const rclcpp::QoS & qos,const PublisherOptionsWithAllocator<AllocatorT> & options =PublisherOptionsWithAllocator<AllocatorT>()
);

参数说明:

topic_name 是topic的名字

qos 是服务质量策略设置(后面会详细介绍)

options 高级选项配置。(高级应用场景)

使用示例:

auto node = std::make_shared<rclcpp::Node>("my_node");
// 创建一个发布者,发布 String 类型消息到 "/chatter" 主题
auto publisher = node->create_publisher<std_msgs::msg::String>("/chatter",rclcpp::QoS(10).reliable()  // QoS 配置// 使用默认的 options
);

创建并返回一个订阅者指针

std::shared_ptr<SubscriptionT>
create_subscription(const std::string & topic_name,const rclcpp::QoS & qos,CallbackT && callback,const SubscriptionOptionsWithAllocator<AllocatorT> & options =SubscriptionOptionsWithAllocator<AllocatorT>(),typename MessageMemoryStrategyT::SharedPtr msg_mem_strat = (MessageMemoryStrategyT::create_default())
);

参数说明:

topic_name 是topic的名字

qos 是服务质量策略设置(后面会详细介绍)

callback 是回调函数。

options 高级选项配置。(高级应用场景)

msg_mem_strat 用于设置消息内存策略。(高级应用场景)

使用示例:

auto node = std::make_shared<rclcpp::Node>("subscriber_node");
auto callback = [](const std_msgs::msg::String::SharedPtr msg) {  // Lambda 回调RCLCPP_INFO(node->get_logger(), "Received: %s", msg->data.c_str());
};// 创建一个订阅者,接收 String 类型消息
auto subscription = node->create_subscription<std_msgs::msg::String>("/chatter",rclcpp::QoS(10),callback// 使用默认的 options 和 msg_mem_strat
);

统计当前订阅到指定主题(Topic)的发布者(Publisher)数量

size_t count_publishers(const std::string & topic_name) const;

使用场景

  1. 动态拓扑监控

    • 检查某个主题是否有发布者,避免订阅“无人发布”的主题。
    • 示例:机器人传感器主题 /lidar/data 的发布者是否在线。
  2. 条件性逻辑

    • 根据发布者数量决定是否启用某些功能。
    if (node->count_publishers("/cmd_vel") > 0) {// 安全地订阅 /cmd_vel,因为有发布者存在
    }
    
  3. 调试与日志

    • 记录主题的发布者数量变化,诊断通信问题。

统计当前有多少订阅者(Subscribers)正在订阅指定的主题(Topic)

size_t count_subscribers(const std::string & topic_name) const;

使用场景

  1. 动态发布决策

    • 检查是否有订阅者,避免无意义的数据发布(节省资源)
    if (node->count_subscribers("/sensor_data") > 0) {publisher->publish(data);  // 只在有订阅者时发布
    }
    
  2. 调试与监控

    • 诊断通信问题(例如订阅者未正确连接)。
    • 日志记录订阅者数量变化。
  3. 条件性初始化

    • 延迟初始化资源密集型组件,直到有订阅者存在。

6. Service服务端与客户端

创建Service客户端

template<typename ServiceT>
typename rclcpp::Client<ServiceT>::SharedPtr
create_client(const std::string & service_name,const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default,rclcpp::CallbackGroup::SharedPtr group = nullptr);

参数说明:

service_name :服务名称

qos_profile :服务质量(QoS)配置,默认值为 rmw_qos_profile_services_default(ROS 2 默认的服务 QoS)

group:回调组的智能指针,默认值为 nullptr

使用示例:

// 假设有一个服务类型:example_interfaces::srv::AddTwoInts
auto client = node->create_client<example_interfaces::srv::AddTwoInts>("/add_two_ints");// 发送请求
auto request = std::make_shared<example_interfaces::srv::AddTwoInts::Request>();
request->a = 2;
request->b = 3;
auto future = client->async_send_request(request);

创建Service服务端

template<typename ServiceT, typename CallbackT>
typename rclcpp::Service<ServiceT>::SharedPtr
create_service(const std::string & service_name,CallbackT && callback,const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default,rclcpp::CallbackGroup::SharedPtr group = nullptr);

参数说明:

service_name :服务名称

callback:Service的处理函数

qos_profile :服务质量(QoS)配置,默认值为 rmw_qos_profile_services_default(ROS 2 默认的服务 QoS)

group:回调组的智能指针,默认值为 nullptr

使用示例:

auto node = std::make_shared<rclcpp::Node>("my_node");// 定义回调函数
auto callback = [](const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response
) {response->sum = request->a + request->b;
};// 创建服务
auto service = node->create_service<example_interfaces::srv::AddTwoInts>("/add_two_ints", callback);

欢迎大家加QQ群,一起讨论学习:894013891

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917472.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917472.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917472.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶:技术、应用与未来展望——从开创到全面革新交通出行

一、引言1.1 研究背景与意义在过去的几十年里&#xff0c;随着科技的飞速发展&#xff0c;自动驾驶技术逐渐从科幻小说中的概念走进了现实生活。从最初简单的辅助驾驶功能&#xff0c;到如今高度自动化的自动驾驶系统&#xff0c;这一领域的进步正深刻地改变着我们的出行方式和…

【gradle】插件那些事

文章目录 1. 前言 2. 插件相关介绍 2.1 gradle插件的apply 2.2 引入自定义插件 2.3 常见构建任务 2.4 gradle生命周期 2.5 gradle的惰性属性&可注入的服务 2.6 常见命令 检查依赖树 查看tasks 构建扫描 查看多项目构建的结构 显示所选项目的构建脚本依赖项 指定控制台模式来…

测试平台如何重塑CI/CD流程中的质量协作新范式

测试平台如何重塑CI/CD流程中的质量协作新范式 在DevOps革命席卷全球软件行业的今天&#xff0c;测试的角色正在经历前所未有的转变。传统的"测试最后"模式正在被"测试全程"的新理念所取代&#xff0c;这一转变背后是测试平台与CI/CD流程深度融合带来的质量…

node.js不同环境安装配置

node.js不同环境安装配置 Windows环境安装配置 一、Node.js是什么&#xff1f; ​ Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]。 Node.js使用了一个事件驱动、非阻塞式I/O 的模型&#xff0c;Node.js是一个让JavaScript运行在服务端的开发平台&#xff0c;它让J…

深度学习-读写模型网络文件

模型网络文件是深度学习模型的存储形式&#xff0c;保存了模型的架构、参数等信息。读写模型网络文件是深度学习流程中的关键环节&#xff0c;方便模型的训练、测试、部署与共享。1. 主流框架读写方法&#xff08;一&#xff09;TensorFlow保存模型可以使用 tf.saved_model.sav…

智慧能源管理平台的多层协同控制架构研究

摘要&#xff1a;针对微电网多源异构设备协同难题&#xff0c;提出一种“云-边-端”三层智慧能源管理架构。平台集成数据采集、策略优化与全景分析功能&#xff0c;支持光伏、储能、充电桩等设备的动态调度&#xff0c;通过自适应算法实现防逆流、需量控制及峰谷套利等策略组合…

MySQL面试题及详细答案 155道(021-040)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

2025年IntelliJ IDEA最新下载、安装教程,附详细图文

文章目录下载与安装IDEA大家好&#xff0c;今天为大家带来的是IntelliJ IDEA的下载、安装教程&#xff0c;亲测可用&#xff0c;喜欢的朋友可以点赞收藏哦下载与安装IDEA 首先先到官网下载最新版的IntelliJ IDEA, 下载后傻瓜式安装就好了 1、下载完后在本地找到该文件&#xf…

深入解析 Apache Tomcat 配置文件

前言 Apache Tomcat 作为最流行的开源 Java Web 应用服务器之一&#xff0c;其强大功能的背后离不开一系列精心设计的配置文件。正确理解和配置这些文件&#xff0c;是部署、管理和优化 Web 应用的关键。本篇博客将深入探讨 Tomcat 的核心配置文件&#xff0c;涵盖其结构、关键…

ThinkPHP8学习篇(一):安装与配置

ThinkPHP有非常多的功能库&#xff0c;我的学习策略很明确&#xff1a;不贪多求全&#xff0c;只掌握最核心的20%功能&#xff0c;解决80%的业务需求。所有学习都围绕一个目标&#xff1a;够用就行。遇到复杂问题时&#xff0c;再具体学习对应的内容。 作为ThinkPHP学习的第一…

【Python练习】075. 编写一个函数,实现简单的语音识别功能

075. 编写一个函数,实现简单的语音识别功能 075. 编写一个函数,实现简单的语音识别功能 安装依赖库 示例代码 代码说明 示例输出 注意事项 使用 PocketSphinx 进行离线语音识别 注意事项 实现方法 使用SpeechRecognition库实现语音识别 使用PyAudio和深度学习模型 使用Vosk离…

chrome的数据采集插件chat4data的使用

简介&#xff1a; Chat4Data是一款Chrome扩展插件&#xff0c;支持AI网页数据采集与分析。用户可通过Chrome应用商店安装后&#xff0c;在网页上选择区块和字段进行数据抓取&#xff0c;设置采集页数后导出结果。该工具适用于结构化数据提取&#xff0c;操作简便&#xff0c;为…

《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:人工肌肉研发进展及一款超生物肌肉Hypermusclet的设计与制造

目录&#xff1a;一、人工股肉的不同种类及工作原理和比较优势二、人工肌肉研发的重点难点及成果进展和趋势三、人工肌肉主要研发机构及其研发成果四、人工肌肉主要性能检测表征能力及标准体系建设五、人工肌肉主要制造商及其产品性能优势和供应能力六、人工肌肉在机器人市场应…

【人工智能】AI代理的伦理迷局:自主智能体的责任归属之谜

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在人工智能时代,AI代理作为自主决策的代表,正深刻改变着人类社会。然而,其伦理困境日益凸显:当AI代理做出自主决策时,谁应为其后果负责…

C语言数据结构(6)贪吃蛇项目1.贪吃蛇项目介绍

1. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯方块&#xff0c;扫雷等游戏位列经典游戏的行列。 在编程语言的教学中&#xff0c;我们以贪吃蛇为例&#xff0c;从设计到代码实现来提升学生的编程能力和逻辑能力。 2. 游戏效果演示 3. 项目目标 使用C语言…

神经网络的并行计算与加速技术

神经网络的并行计算与加速技术一、引言随着人工智能技术的飞速发展&#xff0c;神经网络在众多领域展现出了巨大的潜力和广泛的应用前景。然而&#xff0c;神经网络模型的复杂度和规模也在不断增加&#xff0c;这使得传统的串行计算方式面临着巨大的挑战&#xff0c;如计算速度…

工厂方法模式:从基础到C++实现

引言 在软件开发中&#xff0c;设计模式是解决常见问题的经过验证的方案。其中&#xff0c;工厂方法模式是一种创建型设计模式&#xff0c;广泛应用于需要动态创建对象的场景。本文将详细介绍工厂方法模式的核心概念、应用场景&#xff0c;并通过C代码示例展示其具体实现。 核心…

我的世界进阶模组开发教程——伤害(2)

上一篇文章简要的讲述了伤害,这一篇文章就来讲一下机械动力的伤害 机械动力源码 DamageTypeBuilder 类定义与成员变量 public class DamageTypeBuilder {protected final ResourceKey<DamageType> key; // 伤害类型的唯一资源标识符

web前端第一次作业

一、用户注册界面作业要求: 1.用户名为文本框&#xff0c;名称为 UserName&#xff0c;长度为 15&#xff0c;最大字符数为 20 2.密码为密码框&#xff0c;名称为 UserPass&#xff0c;长度为 15&#xff0c;最大字符数为 20 3.性别为两个单选按钮&#xff0c;名称为 sex&#…

Jenkins 节点连接故障定位及解决方案总结 - PKIX path validation failed

一、故障现象 Jenkins 节点通过 Java Web 方式连接时&#xff0c;报错&#xff1a; java.io.IOException: Failed to connect to https://xxxx.zte.com.cn/yyyy/tcpSlaveAgentListener/: PKIX path validation failed: java.security.cert.CertPathValidatorException: validit…