返回

用 ROS 编写第一个发布者节点

见解分享

编写你的第一个 ROS 发布者:深入了解基本概念

基本概念:节点、话题、消息和服务

在机器人的世界中,机器人操作系统(ROS)是一个必不可少的工具。它提供了一个框架,使机器人工程师能够构建复杂的机器人系统,而无需担心底层通信和数据管理的复杂性。要开始使用 ROS,了解其基本概念至关重要。

节点 :ROS 中的节点是执行特定任务的独立实体。它们可以发布数据、订阅数据、执行计算或提供服务。每个节点都有一个唯一的名称,允许它们相互通信。

话题 :话题是节点之间通信的管道。它们具有名称和数据类型,发布者可以向其中发布数据,而订阅者可以从中读取数据。

消息 :消息是通过话题传输的数据单元。它们具有特定的数据结构,其中包含要传输的数据。

服务 :服务是远程过程调用机制,允许节点向其他节点请求服务。请求节点将数据发送到服务节点,服务节点处理请求并返回响应。

编写你的第一个发布者

现在我们已经了解了 ROS 的基本概念,让我们编写一个发布者节点。发布者节点将通过一个名为“chatter”的话题发布消息。

  1. 创建 ROS 工作空间: 创建一个新的目录并初始化一个 ROS 工作空间。
  2. 创建新包: 在工作空间的 src 目录中,创建一个名为 my_publisher 的新包。
  3. 创建 CMakeLists.txt 文件: 该文件指定了包的依赖关系和编译指令。
  4. 创建 publisher.cpp 源文件: 这是发布者节点的源代码。
  5. 编译代码: 使用 catkin_make 编译代码。
  6. 运行发布者: 使用 rosrun 命令运行发布者节点。
  7. 查看发布的消息: 在另一个终端中,使用 rostopic echo 命令查看发布的消息。

代码示例

#include <ros/ros.h>
#include <std_msgs/String.h>

int main(int argc, char **argv) {
  ros::init(argc, argv, "my_publisher");
  ros::NodeHandle nh;

  ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 10);

  ros::Rate loop_rate(1);

  int count = 0;
  while (ros::ok()) {
    std_msgs::String msg;
    msg.data = "Hello ROS! " + std::to_string(count);

    ROS_INFO_STREAM(msg.data);
    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }

  return 0;
}

常见问题解答

  1. 什么是 ROS?
    ROS 是一个用于构建机器人系统的框架,提供了通信、数据管理和工具。
  2. 什么是节点?
    节点是 ROS 系统中的独立实体,执行特定任务,例如发布或订阅数据。
  3. 如何发布消息?
    要发布消息,请使用 ros::Publisher 对象并将消息发布到话题中。
  4. 如何订阅消息?
    要订阅消息,请使用 ros::Subscriber 对象并将其注册为回调函数。
  5. 什么是服务?
    服务是一种远程过程调用机制,允许节点请求其他节点的服务。