当前位置:实例文章 » 其他实例» [文章]ROS节点通信Demo

ROS节点通信Demo

发布人:shili8 发布时间:2025-01-25 01:32 阅读次数:0

**ROS 节点通信 Demo**

ROS(Robot Operating System)是一个用于构建机器人应用程序的开源框架。它提供了一个高级别的API,允许开发者快速构建复杂的机器人系统。ROS 的核心是节点(Node),这些节点通过主题(Topic)、服务(Service)和参数(Param)进行通信。

在这个 Demo 中,我们将展示如何使用 ROS 来实现两个节点之间的通信。我们将创建一个名为 `publisher` 的节点,它会发布一些消息到一个主题上,而另一个名为 `subscriber` 的节点则会订阅该主题并接收这些消息。

**环境准备**

首先,我们需要安装 ROS 和相关依赖包。如果你已经有 ROS 环境,那么可以跳过这一步。否则,请按照以下步骤进行安装:

1. 安装 ROS:在 Ubuntu 或其他 Linux 发行版上,使用以下命令安装 ROS:

bashsudo apt-get update && sudo apt-get install ros-kinetic-desktop-full

2. 安装依赖包:运行以下命令安装依赖包:
bashsudo apt-get install libros-msg-cpp-dev libboost-all-dev libopencv-dev

3. 配置 ROS 环境变量:在你的 shell 中,添加以下行来配置 ROS 环境变量:
bashexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/path/to/your/ros/packages


**publisher 节点**

现在,我们创建一个名为 `publisher` 的节点,它会发布一些消息到一个主题上。我们使用 C++ 来编写这个节点。

首先,新建一个文件 `publisher.cpp`:
cpp#include <ros/ros.h>
#include <std_msgs/String.h>

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

 // 创建一个发布者对象 ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);

 // 循环发布消息 while (ros::ok()) {
 std_msgs::String msg;
 msg.data = "Hello, ROS!";
 pub.publish(msg);
 ros::spinOnce();
 ros::Duration(1.0).sleep(); // 等待1 秒 }

 return0;
}

这个代码创建了一个 `publisher` 节点,它会发布一个 `std_msgs::String` 消息到一个名为 "chatter" 的主题上。每隔一秒,节点就会发布一次消息。

**subscriber 节点**

现在,我们创建一个名为 `subscriber` 的节点,它会订阅 "chatter" 主题并接收这些消息。我们使用 C++ 来编写这个节点。

首先,新建一个文件 `subscriber.cpp`:
cpp#include <ros/ros.h>
#include <std_msgs/String.h>

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

 // 创建一个订阅者对象 ros::Subscriber sub = nh.subscribe("chatter",10, &callback);

 // 循环接收消息 while (ros::ok()) {
 ros::spinOnce();
 ros::Duration(1.0).sleep(); // 等待1 秒 }

 return0;
}

void callback(const std_msgs::String& msg) {
 ROS_INFO("Received message: %s", msg.data.c_str());
}

这个代码创建了一个 `subscriber` 节点,它会订阅 "chatter" 主题并接收这些消息。每当节点接收到一条消息时,会调用 `callback` 函数来处理该消息。

**编译和运行**

现在,我们需要编译两个节点,然后运行它们。

首先,切换到 ROS 包目录:
bashcd /path/to/your/ros/packages

然后,编译两个节点:
bashcatkin_make publisher subscriber

最后,启动 ROS 节点:
bashroscore &
rosrun publisher publisherrosrun subscriber subscriber

这将启动两个节点,并开始通信。

**结果**

现在,我们可以看到 `subscriber` 节点正在接收到 `publisher` 节点发布的消息。每当 `publisher` 节点发布一条消息时,`subscriber` 节点就会接收到该消息并打印出来。

这是 ROS 节点通信的一个基本示例。通过使用主题、服务和参数,你可以构建更加复杂的机器人系统。

**总结**

在这个 Demo 中,我们展示了如何使用 ROS 来实现两个节点之间的通信。我们创建了一个 `publisher` 节点,它会发布一些消息到一个主题上,而另一个名为 `subscriber` 的节点则会订阅该主题并接收这些消息。通过编译和运行这两个节点,我们可以看到它们正在通信,并且 `subscriber` 节点正在接收到 `publisher` 节点发布的消息。

这是 ROS 的基本特性之一,即允许开发者快速构建复杂的机器人系统。通过使用主题、服务和参数,你可以构建更加复杂的机器人系统。

**参考**

* ROS 官方文档: />* ROS C++ API 文档: ROS Python API 文档:

其他信息

其他资源

Top