ROS学习笔记(二):话题通信、服务通信的了解和对应节点的搭建(C++)

本文详细介绍了ROS中C++和Python环境下,如何实现话题通信(发布者-订阅者模型)以及服务通信(客户端-服务端模型)。涉及自定义消息类型msg和srv的创建、配置,以及节点的搭建和交互过程。
摘要由CSDN通过智能技术生成

前言

在ros这种分布式框架中,各个节点可以独立的运行,但是在实际运用的多数情况下各个节点之间都需要有一定的联系或者说是信息的共享,因此在程序的设计上,各节点之间的通信尤为重要。
官方wiki教程链接:ROS Tutorials
如下所示可让我们对ros通信机制有初步的了解,其中也包括了对应通信节点的搭建。
在这里插入图片描述

关于工作空间的搭建参考第一篇文章 ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间 ,这里主要记录在程序上如何实现节点通信。

一、Topics话题通信(C++)

话题通信是指节点间以发布订阅的方式进行通信,大体流程为发布者以一定的频率不断地在某个话题上发送消息出去,然后订阅者在ros masters这个平台上通过话题名称发现发布者发送了消息,然后接收其消息进行处理。可同时存在多个订阅者关注同一个话题,也可同时存在多个发布者在同一个话题上发布消息,当然一个订阅者也可以关注多个话题,一个发布者也可以发布多个话题。
关于话题通信,官方的C++案例链接:Writing a Simple Publisher and Subscriber (C++)

0、自定义msg消息类型文件

首先在该功能包下创建msg文件夹,然后在创建一个.msg文件。即:

mkdir msg
touch msg/xx.msg

该文件的编写格式为:

	类型    名称
如:	int32   num_hi

然后需要进入package.xml更改配置,分别添加下面两行:

<build_depend>message_generation</build_depend>

<exec_depend>message_runtime</exec_depend>

即下图所示:
在这里插入图片描述
然后进入CmakeLists.txt,添加如下配置,此处代表该功能包的依赖包:
在这里插入图片描述
这里的add_message_files打开注释后,还要将文件改成自己的msg文件,如下所示:
在这里插入图片描述
如下所示打开generate_messages的注释为srv文件添加std_msgs依赖。
加粗样式
再打开如下的注释并加入message_runtime,此处代表了find_package中的包的依赖包。
在这里插入图片描述
完成配置后回到工作空间主目录再次编译,然后就会生成如下所示的C++和python的msg头文件。
在这里插入图片描述
在这里插入图片描述
需要使用自定义的msg时,以上述的num.msg为例,如下所示操作即可。

#include "topics/num.h"  // 调用自定义消息类型的头文件

topics::num num;  // 用于引用自定义的类型
num.num_hi = xx;  // 赋值

之后把num.num_hi当成正常的变量用就行了。

1、发布者(Publisher)

pub.cpp程序:

#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char **argv)
{
   
	setlocale (LC_ALL, "");  // 防止中文乱码
	std_msgs::String msg;  // 定义发送数据类型
	int count = 1;
	
	ros::init(argc, argv, "talker");  // 初始化ros节点
	ros::NodeHandle n;  // 定义节点句柄
	
	// 定义发布者
	ros::Publisher pub 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级大魔王li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值