C++与ROS2节点通信之间的实现
时间: 2023-11-28 08:51:17 浏览: 131
在ROS2中,C++节点通信主要通过ROS2提供的rclcpp库实现。rclcpp库是一个ROS2的C++客户端库,它提供了创建ROS2节点、发布和订阅话题、服务调用等功能。
下面是一个简单的例子,演示如何使用rclcpp库在C++节点之间进行通信:
1. 首先,我们需要包含必要的头文件:
```cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
```
2. 创建一个发布者:
```cpp
auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", 10);
```
其中,`node`是一个`rclcpp::Node`对象,`std_msgs::msg::String`是消息类型,`my_topic`是话题名称,`10`是话题队列长度。
3. 创建一个消息:
```cpp
auto message = std_msgs::msg::String();
message.data = "Hello, world!";
```
4. 发布消息:
```cpp
publisher->publish(message);
```
5. 创建一个订阅者:
```cpp
auto subscription = node->create_subscription<std_msgs::msg::String>("my_topic", 10, [](const std_msgs::msg::String::SharedPtr msg) {
RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "I heard: '%s'", msg->data.c_str());
});
```
其中,`std_msgs::msg::String`是消息类型,`my_topic`是话题名称,`10`是话题队列长度,`[](const std_msgs::msg::String::SharedPtr msg) {...}`是消息回调函数,用于处理接收到的消息。
6. 运行节点:
```cpp
rclcpp::spin(node);
```
以上是一个简单的例子,演示了如何在C++节点之间使用ROS2进行通信。在实际应用中,我们可以根据需要创建多个发布者和订阅者,以实现节点之间的复杂通信。
阅读全文