二 ROS通信机制-话题通信(发布订阅模式)

ROS中的基本通信机制主要包括话题通信、服务通信和参数服务器。话题通信是基于发布订阅模式,广泛应用于传感器数据如激光雷达、摄像头等信息的实时传输。这种通信模式涉及ROSMaster、发布者和订阅者,且不依赖ROSMaster维持连接。在实际应用中,需要关注话题设置、发布者和订阅者实现以及消息类型。通过创建ROS工作空间、编写发布者和订阅者节点,可以实现简单的话题通信功能。
摘要由CSDN通过智能技术生成

ROS 中的基本通信机制

  • 话题通信(发布订阅模式):

  • 服务通信(请求响应模式)

  • 参数服务器(参数共享模式)

2.1话题通信(发布订阅模式)

话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,比如下面一个常见场景:
在上述场景中,就不止一次使用到了话题通信。
以激光雷达信息的采集处理为例,在 ROS 中有一个节点需要时时的发布当前雷达采集到的数据,导航模块中也有节点会订阅并解析雷达数据。

以运动消息的发布为例,导航模块会根据传感器采集的数据时时的计算出运动控制信息并发布给底盘,底盘也可以有一个节点订阅运动信息并最终转换成控制电机的脉冲信号。

在这里插入图片描述
以此类推,像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信,换言之,话题通信适用于不断更新的数据传输相关的应用场景

2.1.1概念

以发布订阅的方式实现不同节点之间数据交互的通信模式。

2.1.2作用

用于不断更新的、少逻辑处理的数据传输场景。

2.1.3 理论模型

该模型中涉及到三个角色:1.ROS Master (管理者) 2.Talker (发布者) 3.Listener (订阅者)
在这里插入图片描述
该模型大致意思是这样的:
在这里插入图片描述
注意1:上述实现流程中,前五步使用的 RPC协议(联系方式),最后两步使用的是 TCP 协议

注意2: Talker 与 Listener 的启动无先后顺序要求(第0步和第1步无先后顺序)

注意3: Talker 与 Listener 都可以有多个

注意4: Talker 与 Listener 连接建立后,不再需要 ROS Master。也即,即便关闭ROS Master,Talker 与 Listern 照常通信。
注意5: 该模型的实现流程已经封装好了,基本使用的时候都是调用。但也需要明白基本原理

2.1.4 话题通信应用时需要关注的地方:

  1. 关注话题设置
  2. 关注发布者和订阅者的实现
  3. 关注消息的载体

3 简单实现

3.1ROS工作空间建立:

//建立工作空间
mkdir -p demo_ws/src
//进入demo_ws编译
cd demo_ws -> caktin_make
//进入src目录创建功能包
cd src -> catkin_create_pkg 包名 roscpp rospy std_msgs

3.2 服务端实现

在 包名的路径下面还会有src目录,在里面创建一个cpp文件

/*
发布者实现流程:
1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.编写发布者逻辑并发布数据
*/
#include"ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char *argv[])
{
	//2.初始化ROS节点 定义节点名称”hzh“
    ros::init(argc, argv, "hzh" );
    //3.创建节点句柄
    ros::NodeHandle nh;
    //4.创建发布者对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("fang",10);
    //5.编写发布者逻辑并发布数据
    //创建被发布的消息
    std_msgs::String msg;
    //编写循环,循环发布数据
    while (ros::ok())
    {
        msg.data = "hello";
        pub.publish(msg);

    }
    
    return 0;
}

2.写完后修改功能包里面的CMakeList.txt文件
在这里插入图片描述
第二个红括号是src下面你写的cpp文件名称,前一个是映射名称,自己定义。尽量和后面cpp文件一样
在这里插入图片描述
改成你写的映射名称

3.编译
如果是用VS code写的快捷键 ctrl+shift+b直接编译,否则在命令行里进入工作空间catkin_make

4.执行
启动roscore

cd demo_ws
source ./devel/setup.bash
rosrun 功能包 cpp文件
//回车后没反应就是对的

5.接受

cd demo_ws
//fang是话题名称
rostopic echo fang

运行结果应该就是下面这样
在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值