1.发布者模板
//1.包含头文件
#include <memory> #include "rclcpp/rclcpp.hpp" #include "project_msg_data/msg/stu.hpp" using namespace std::chrono_literals; /* 需求:以某个固定频率发送文本“hello world!”,文本后缀编号,每发送一条消息,编号递增1。 步骤: 1.包含头文件; 2.初始化 ROS2 客户端; 3.定义节点类; 3-1.创建发布方; 3-2.创建定时器; 3-3.组织消息并发布。 4.调用spin函数,并传入节点对象指针; 5.释放资源。 */ // 3.定义节点类; class Publisher_Node:public rclcpp::Node { public: Publisher_Node():Node("publisher_node"),count_(0) { // 3-1.创建发布方; publisher_ = this->create_publisher<Data>("chatter", 10); // 3-2.创建定时器; timer_ = this->create_wall_timer(500ms, std::bind(&Publisher_Node::timer_callback, this)); } private: void timer_callback() { // 3-3.组织消息并发布。 auto message = Data();
//例子 message.name = "wangrui"; message.age = count_++; message.height = 178.5;
// RCLCPP_INFO(this->get_logger(), "'%s %d %f'", message.name.c_str(),message.age,message.height); publisher_->publish(message); } rclcpp::TimerBase::SharedPtr timer_; rclcpp::Publisher<Data>::SharedPtr publisher_; size_t count_; }; int main(int argc, char * argv[]) { //2.初始化 ROS2 客户端; rclcpp::init(argc, argv); // 4.调用spin函数,并传入节点对象指针; rclcpp::spin(std::make_shared<Publisher_Node>()); // 5.释放资源。 rclcpp::shutdown(); return 0; }
2.订阅者模板
#include <memory> #include "rclcpp/rclcpp.hpp" #include "Data" /* 需求:订阅发布方发布的消息,并输出到终端。 步骤: 1.包含头文件; 2.初始化 ROS2 客户端; 3.定义节点类; 3-1.创建订阅方; 3-2.处理订阅到的消息。 4.调用spin函数,并传入节点对象指针; 5.释放资源。 */ // 3.定义节点类; class Listener_Node : public rclcpp::Node { public: Listener_Node() : Node("listener_node") { // 3-1.创建订阅方; subscription_ = this->create_subscription<Data>("chatter", 10, std::bind(&Listener_Node::topic_callback, this, std::placeholders::_1)); } private: // 3-2.处理订阅到的消息。 void topic_callback(const Data::SharedPtr msg) const { RCLCPP_INFO(this->get_logger(), "the listener`s data is %s %d %f", msg->name.c_str(),msg->age, msg->height); } rclcpp::Subscription<Data>::SharedPtr subscription_; }; int main(int argc, char * argv[]) { // 2.初始化 ROS2 客户端; rclcpp::init(argc, argv); // 4.调用spin函数,并传入节点对象指针; rclcpp::spin(std::make_shared<Listener_Node>()); // 5.释放资源。 rclcpp::shutdown(); return 0; }
3.CMakeLists.txt (正常添加即可)
add_executable(demo src/demo.cpp) ament_target_dependencies( demo "rclcpp" "std_msgs" "Data" ) install(TARGETS demo DESTINATION lib/${PROJECT_NAME})
标签:Node,std,通讯,rclcpp,话题,message,节点,ROS2 From: https://www.cnblogs.com/ririking/p/17843987.html