rclcpp常用功能
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档rclcpp常用的类模板和函数前言一、rclcpp是什么二、rclcpp有哪些1.节点类Node2.发布器模板类Publisher3.订阅器模板类Subscription4.服务Service5.定时器Timer6.执行器Executor7.初始化init()8.事件循环spin()9.关闭ROS2shutdown()10.日志Logger11.时间Time12.参数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.节点类Noderclcpp::Node 创建节点的用法classMyNode:publicrclcpp::Node#先继承{public:MyNode():Node(my_node){//先初始化父类节点名字为my_node再执行My_node自己的构造函数}};// 等价于autonodestd::make_sharedrclcpp::Node(my_node);//现实中机器人系统中摄像头节点、激光雷达节点都是如此2.发布器模板类PublisherROS2要发很多种消息例如发送字符串、发速度、发图片等等相当于生活中的广播站广播站收集信息再发给所有收音机Publisher充当的就是这个角色。Publisher↓一个专门发送 Twist 消息的广播站对象SharedPtr↓指向广播站对象的智能指针create_publisher()↓创建广播站并绑定 Topicpublish(msg)↓把消息广播出去模板templatetypenameMessageTclassPublisher;使用rclcpp::Publishergeometry_msgs::msg::Twist::SharedPtr cmd_pub_;创建cmd_pub_create_publishergeometry_msgs::msg::Twist(/cmd_vel,10);发布geometry_msgs::msg::Twist msg;msg.linear.x0.5;cmd_pub_-publish(msg);3.订阅器模板类Subscription接收消息。rclcpp::Subscriptionstd_msgs::msg::String::SharedPtr sub_;创建sub_create_subscriptionstd_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同步请求响应。例如客户端帮我算 23服务器结果是5服务器rclcpp::Serviceexample_interfaces::srv::AddTwoInts::SharedPtr service_;客户端rclcpp::Clientexample_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.关闭ROS2shutdown()关闭 ROS2。rclcpp::shutdown();释放资源。10.日志Logger输出信息。RCLCPP_INFO(this-get_logger(),Hello);还有RCLCPP_WARN()RCLCPP_ERROR()RCLCPP_DEBUG()RCLCPP_FATAL()类比相当于printf();但是有颜色有时间戳有节点名可以过滤日志等级11.时间Timerclcpp::Time rclcpp::Clock获取时间this-get_clock()-now();类比像millis()12.参数Parameter声明declare_parameter(speed,0.5);读取doublespeedget_parameter(speed).as_double();类比像doublespeed0.5;总结提示这里对文章进行总结按照这个顺序后面学习 Nav2、MoveIt2、机器人控制框架时会感觉所有东西都是在这些 rclcpp 基础类上搭起来的。