在C++的ROS 2(Robot Operating System 2)中,處理消息傳遞主要涉及到使用ROS 2的核心組件,如節點(Node)、話題(Topic)、發布者(Publisher)和訂閱者(Subscriber)。下面是一個簡單的示例,展示了如何使用C++和ROS 2進行消息傳遞:
message_example.cpp
。message_example.cpp
中,包含必要的頭文件,并聲明使用的命名空間和類。#include <iostream>
#include <memory>
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
using namespace rclcpp;
using std_msgs::msg::String;
rclcpp::Node
的類,并在其中實現消息發布和訂閱的功能。class MessageExample : public Node
{
public:
MessageExample() : Node("message_example")
{
// 創建一個發布者,訂閱名為"hello_world"的話題,消息類型為String
publisher_ = this->create_publisher<String>("hello_world", 10);
// 創建一個定時器,每隔1秒發布一條消息
timer_ = this->create_wall_timer(1s, std::bind(&MessageExample::publish_message, this));
}
private:
void publish_message()
{
auto message = String();
message.data = "Hello, ROS 2!";
// 發布消息
if (publisher_->is_ready())
{
publisher_->publish(message);
RCLCPP_INFO(this->get_logger(), "Published message: '%s'", message.data.c_str());
}
}
std::shared_ptr<Publisher<String>> publisher_;
std::shared_ptr<TimerBase> timer_;
};
MessageExample
類的實例,并啟動節點。int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
auto message_example = std::make_shared<MessageExample>();
rclcpp::spin(message_example);
rclcpp::shutdown();
return 0;
}
編譯命令可能類似于:
cd ~/ros2_ws/src
colcon build --packages-select message_example
source install/setup.bash
然后運行程序:
ros2 run message_example message_example
現在,你應該能夠看到每隔1秒發布一條消息到名為"hello_world"的話題上。你可以使用rostopic echo /hello_world
命令來查看接收到的消息。