ROS2 话题通讯
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})

浙公网安备 33010602011771号