ROS机器人程序设计(原书第2版)2.4.9 创建节点

简介:

2.4.9 创建节点

在本节中,我们要学习如何创建两个节点:一个发布数据,另一个接收这些数据。这是两个节点之间最基本的通信方式,也就是操作数据并使用这些数据来做些工作。

使用以下命令返回chapter2_tutorials/src/文件夹:

 

创建两个文件并分别命名为example1_a.cpp和example1_b.cpp。example1_a.cpp文件将会发送带有节点名称的数据,example1_b.cpp文件会把这些数据显示在命令行窗口中。将下面的代码复制到example1_a.cpp文件或者从库中下载它:

 

就以上代码做进一步解释。

 

要包含的头文件是ros/ros.h、std_msgs/String.h和sstream。其中,ros/ros.h包含了使用ROS节点所有必要的文件,而std_msgs/String.h包含了我们要使用的消息类型:

 

启动该节点并设置其名称,请记住该名称必须是唯一的:

 

下面是设置节点进程的句柄:

 

将节点设置成发布者,并将所发布主题和类型的名称告知节点管理器。第一个参数是缓冲区的大小,名为message。如果主题发布数据速度较快,那么将缓冲区设置为1000个消息,如下所示:

 

在本例中,设置发送数据的频率为10Hz:

 

当收到Ctrl + C的按键消息或ROS停止当前节点运行时,ros::ok()行会执行停止节点运行的命令:

 

在这里,我们创建一个消息变量,变量的类型必须符合发送数据的要求:

 

这样,消息被发布:

 

如果有一个订阅者出现,ROS就会更新并读取所有主题:

 

按照10Hz的频率将程序挂起。

现在我们创建另一个节点。将下面的代码复制到example1_b.cpp文件或者从库中下载它:

 

 

这里是一些对上面代码的解释。

 

首先要包含头文件和主题所使用的消息类型:

 

每次该节点收到一条消息时都将调用此函数,我们就可以使用或处理数据。在本示例中,我们将收到的数据在命令行窗口中输出:

 

创建一个订阅者,并从主题获取以message为名称的消息数据。设置缓冲区为1000个消息,处理消息的回调函数为messageCallback:

 

ros::spin()行是节点开始读取主题和在消息到达时,回调函数messageCallback被调用的循环。当用户按下Ctrl + C,节点会退出消息循环,于是循环结束。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
9月前
|
Python
ROS节点检测ArUco标签并记录空间坐标
利用Realsense D435i相机检测ArUco标签,使用Python程序订阅相机的ROS话题,记录Time和标签的XYZ值,储存在一个csv文件中;当出现识别不到标签或者反馈坐标为0,0,0的情况时,不进行记录。
176 0
|
9月前
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
190 0
|
2月前
|
网络协议 机器人 中间件
单片机和FreeRTOS上跑机器人ROS的应用
单片机和FreeRTOS上跑机器人ROS的应用
85 0
|
3月前
|
C++ Python
[ROS2] --- 手动编写一个节点
[ROS2] --- 手动编写一个节点
35 1
|
4月前
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
201 0
|
6月前
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
388 0
|
9月前
|
传感器 Ubuntu 机器人
【5. ROS机器人的运动控制】
【5. ROS机器人的运动控制】
333 0
【5. ROS机器人的运动控制】
|
9月前
|
算法 中间件 C语言
【ROS】如何让ROS中节点实现数据交换Ⅱ --服务通信
在ros中,一个节点想要获取某种服务(例如:一个节点想要获取此时的相机数据,节点就需要向相机发送一个请求,而相机接收到请求后可以根据消息类型将数据类型返回),这就是基本的服务通信使用场景。
102 0
|
算法 机器人 定位技术
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
888 0
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
|
9月前
|
机器学习/深度学习 传感器 Ubuntu
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
129 0

推荐镜像

更多