当前位置: 首页 > news >正文

rclcpp常用功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

rclcpp常用的类模板和函数

  • 前言
  • 一、rclcpp是什么?
  • 二、rclcpp有哪些?
    • 1.节点类(Node)
    • 2.发布器模板类(Publisher)
    • 3.订阅器模板类(Subscription)
    • 4.服务(Service)
    • 5.定时器(Timer)
    • 6.执行器(Executor)
    • 7.初始化(init())
    • 8.事件循环(spin())
    • 9.关闭ROS2(shutdown())
    • 10.日志(Logger)
    • 11.时间(Time)
    • 12.参数(Parameter)
  • 总结

前言

记录第一天写ROS2学习笔记:

可以把 rclcpp理解成 ROS2 给 C++ 提供的一个大型工具箱,里面主要包含:

节点类(Node)
通信类(Publisher、Subscription、Client、Service)
定时器(Timer)
执行器(Executor)
初始化和运行函数(init、spin 等)
日志系统(Logger)
时间和参数系统(Time、Parameter)


提示:以下是本篇文章正文内容,下面案例可供参考

一、rclcpp是什么?

rclcpp 本身不是一个类(class),而是一个命名空间(namespace),相当于c++中的一个大文件夹或者包名,同理std也是一个命名空间。
为什么要命名空间呢?比如当我写的如下程序:

classNode{};voidinit();

如果你的程序也写了

classNode{};voidinit();

就会产生冲突。

二、rclcpp有哪些?

1.节点类(Node)

rclcpp::Node 创建节点的用法:classMyNode:publicrclcpp::Node#先继承{public:MyNode():Node("my_node"){//先初始化父类节点名字为my_node再执行My_node自己的构造函数}};// 等价于autonode=std::make_shared<rclcpp::Node>("my_node");//现实中机器人系统中摄像头节点、激光雷达节点都是如此

2.发布器模板类(Publisher)

ROS2要发很多种消息例如:发送字符串、发速度、发图片等等
相当于生活中的广播站,广播站收集信息再发给所有收音机,Publisher充当的就是这个角色。
Publisher

一个专门发送 Twist 消息的广播站对象

SharedPtr

指向广播站对象的智能指针

create_publisher()

创建广播站并绑定 Topic

publish(msg)

把消息广播出去
模板:

template<typenameMessageT>classPublisher;

使用:

rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr cmd_pub_;

创建:

cmd_pub_=create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",10);

发布:

geometry_msgs::msg::Twist msg;msg.linear.x=0.5;cmd_pub_->publish(msg);

3.订阅器模板类(Subscription)

接收消息。

rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_;

创建:

sub_=create_subscription<std_msgs::msg::String>("/topic",10,std::bind(&MyNode::callback,this,std::placeholders::_1));

回调:

voidcallback(conststd_msgs::msg::String::SharedPtr msg){RCLCPP_INFO(get_logger(),"%s",msg->data.c_str());}

4.服务(Service)

同步请求响应。

例如:

客户端:帮我算 2+3
服务器:结果是5

服务器:

rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtr service_;

客户端:

rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtr client_;

5.定时器(Timer)

周期执行任务。

rclcpp::TimerBase::SharedPtr timer_;

创建:

timer_=create_wall_timer(std::chrono::milliseconds(100),std::bind(&MyNode::timer_callback,this));

6.执行器(Executor)

负责调度回调函数。

单线程:

rclcpp::executors::SingleThreadedExecutor

多线程:

rclcpp::executors::MultiThreadedExecutor
类比 Publisher、Subscription、Timer:像员工。 Executor:像调度员。 Timer回调 Subscription回调 Service回调 ↓ Executor ↓ CPU执行

7.初始化(init())

初始化 ROS2。

rclcpp::init(argc,argv);

类比像:

HAL_Init();

先把整个框架启动起来。

8.事件循环(spin())

进入事件循环。

rclcpp::spin(node);

9.关闭ROS2(shutdown())

关闭 ROS2。

rclcpp::shutdown();

释放资源。

10.日志(Logger)

输出信息。

RCLCPP_INFO(this->get_logger(),"Hello");

还有:

RCLCPP_WARN()RCLCPP_ERROR()RCLCPP_DEBUG()RCLCPP_FATAL()

类比

相当于:

printf();

但是:

有颜色
有时间戳
有节点名
可以过滤日志等级

11.时间(Time)

rclcpp::Time rclcpp::Clock

获取时间:

this->get_clock()->now();

类比

像:

millis()

12.参数(Parameter)

声明:

declare_parameter("speed",0.5);

读取:

doublespeed=get_parameter("speed").as_double();

类比

像:

doublespeed=0.5;

总结

提示:这里对文章进行总结:
按照这个顺序,后面学习 Nav2、MoveIt2、机器人控制框架时,会感觉所有东西都是在这些 rclcpp 基础类上搭起来的。

http://www.jsqmd.com/news/1072827/

相关文章:

  • ANR触发原理与监控机制:深入Android Framework的核心实战解析
  • AI Agent 面试题 769:如何实现Agent的评估结果可视化和报告生成?
  • 如何打造极致个性化音乐体验:开源播放器MusicFree完整指南
  • 【RHCA+】反义
  • 二叉搜索树【C++】
  • ChatGPT帮我搭CIM+AI融合系统,决策自动化率从15%到60%
  • TMC2240 芯片数据手册解读|第十五篇 诊断输出(Diagnostic Outputs)
  • 数据治理——解读112页德勤制造业企业数据治理平台规划方案【附全文阅读】
  • 012华夏之光永存:国家级痛点破局 高端ArF浸没式光刻胶核心原材料——面向28-7nm节点的国产化材料体系
  • Linux Pulseaudio深度解析之pa_mainloop_dispatch调用流程与实战(七十三)
  • 5个Grafika图形处理核心问题解析:Android高性能渲染的实战指南
  • Anthropic Agent最佳实践系列一: Agent 架构入门
  • linux笔记6(软链接)
  • 城市NOA深度复盘|全网实车测评 端到端分支架构迭代、车企智驾方案对标、第三方供应链拆解、全路况落地适配、全域闭环端到端量产代码、助力城区复杂人车混行路况降接管
  • PyTorch字符级RNN实战指南
  • 车联网蓝牙测试:经典蓝牙数据抓包.(SSP配对模式)
  • OpencvSharp 算子学习教案之 - Cv2.Circle 重载2
  • 数字化赋能传统离散制造:智能化技术在高端石材工程领域的落地与深度优化
  • 【LangChain核心组件】文档加载器
  • 2018Y408
  • Sqlserver数据库日志文件过大(收缩/裁剪处理)
  • CSDN 高质量 DHCP 实验博文
  • 花5万买串口屏,总结出的7条血泪教训做储能设备的千万别再踩坑
  • CircleCI自动化_circleci-automation
  • 程序员跨境收支必备:查外汇网实战指南
  • 《Effective Python》读书笔记14: 附录 - 90条建议完整列表
  • 鸿蒙PC中使用ohos-sdk完成Rust适配,自动签名编译安装第三方库walkdir是 Rust 递归遍历目录的专用库
  • 第34章:自动化代码评审Agent——自动审查PR并给出建议
  • AI调试助手EAP谱试,连接周期从2天到3小时
  • 一篇文章带你入门漏洞靶场:从 0 到 1 玩转 bWAPP(附完整安装教程)