背景
节点是通过 ROS 2进行通信的可执行进程。在本教程中,节点将通过主题以字符串消息的形式相互传递信息。这里使用的例子是一个简单的“说话者”和“倾听者”系统;一个节点发布数据,另一个节点订阅该主题,以便它可以接收该数据。
任务
1 创建包
打开一个新终端并获取 ROS 2 安装的源代码,以便ros2
命令可以运行。
导航到上一教程ros2_ws
中创建的目录。
回想一下,包应该在src
目录中创建,而不是在工作区的根目录中。因此,导航到ros2_ws/src
并运行包创建命令:
ros2 pkg create --build-type ament_cmake cpp_pubsub
cpp_pubsub
您的终端将返回一条消息,验证您的包及其所有必需文件和文件夹的创建。
导航到ros2_ws/src/cpp_pubsub/src
. 回想一下,这是任何 CMake 包中包含可执行文件的源文件所属的目录。
2 编写发布者节点
输入以下命令来下载示例 talker 代码:
Linux苹果系统视窗
wget -O publisher_member_function.cpp https://raw.githubusercontent.com/ros2/examples/galactic/rclcpp/topics/minimal_publisher/member_function.cpp
现在将有一个名为 的新文件publisher_member_function.cpp
。使用您喜欢的文本编辑器打开文件。
#include <chrono>
#include <functional>
#include <memory>
#include <string>
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
/* This example creates a subclass of Node and uses std::bind() to register a
* member function as a callback from the timer. */
class MinimalPublisher : public rclcpp::Node
{
public:
MinimalPublisher()
: Node("minimal_publisher"), count_(0)
{
publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
timer_ = this->create_wall_timer(
500ms, std::bind(&MinimalPublisher::timer_callback, this</