欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

9.ROS的通信方式 & topic通信

程序员文章站 2022-03-11 15:27:55
》》点赞,收藏+关注,理财&技术不迷路《《总共有四种通信方式。Topic是最常用的通信方式。Topic 通信方式:ROS中最常用的通信方式:Topic(topic是以/开头的)Topic类似于一个频道,A在里面发消息,B订阅这个频道,然后从topic中获取A发送的信息。(采用的是发布和订阅这种消息传递形式,是单向的!!!!!!)什么是异步?比如我的node1,是一个摄像头程序,它可以发送一些topic,比如它可以发送RGB图像信息,有些有深度传感器的可以....

》》点赞,收藏+关注,理财&技术不迷路《《

总共有四种通信方式。Topic是最常用的通信方式。

9.ROS的通信方式 & topic通信

 

Topic 通信方式:

ROS中最常用的通信方式:Topic(topic是以/开头的)

9.ROS的通信方式 & topic通信

Topic类似于一个频道,A在里面发消息,B订阅这个频道,然后从topic中获取A发送的信息。(采用的是发布和订阅这种消息传递形式,是单向的!!!!!!)

9.ROS的通信方式 & topic通信

什么是异步?

9.ROS的通信方式 & topic通信

比如我的node1,是一个摄像头程序,它可以发送一些topic,比如它可以发送RGB图像信息,有些有深度传感器的可以发送深度图。

异步:我这个程序我反正只管发送,我只用publish这些topic就行了,我按我自己方法不断地发送topic就行了,至于谁会获取不管。(在发送的时候调用publish()这个函数,调用完后它就立即返回,不用等待发送完后处理结果)

然后有一个node2,作用是图像处理,它订阅了RGB图像处理,反正只要RGB有消息到了,它就获取,他不管谁发送的。

对于发送者publisher来说,当他发布了这个消息,他不用去等待这个消息的返回状态。对于接收者reciever来说,有消息来了,我就去处理,没有的话我就去干别的事。

一个topic可以对应多个node:

9.ROS的通信方式 & topic通信

比如这里有一个node3,用户用来监控画面,用来在计算机上显示图像的node。

对应demo演示中:node1发送图片信息的这个程序其实是封装在gezibo这个模拟器中。模拟器中摄像头不断在项RGB和depth两个topic发送数据,这个node3就是之前的image_view,他订阅了RGB这个topic,所以它可以不断获得图像

9.ROS的通信方式 & topic通信

 

总结:

9.ROS的通信方式 & topic通信

异步:publish()方法

一个topic可对应多个subcribers,也可以多对一,多对多。

 

Message(严格格式要求):

RGB这个topic是传输RGB图像,那么它必须遵循ROS中定义的RGB图像信息的格式,这种数据格式叫做——Message。

9.ROS的通信方式 & topic通信

Publish的每一条message是一个对象。这个类,类型,定义在package中的*.msg文件中。

9.ROS的通信方式 & topic通信

基本msg:

9.ROS的通信方式 & topic通信

具体message组织方法:

Node1 发送一个topic(“/camera-RGB“)给node2

9.ROS的通信方式 & topic通信

这个topic必须遵循sensor_msgs/Image这个message。这个是ROS自己定义好了的数据类型。Message的定义很像C语言中的结构体或者是是一个类,有高度,宽度,每次发布的内容是一个对象。

 

Message相关命令:

9.ROS的通信方式 & topic通信

和之前的rosnode很像。

 

举例:练习topic/message:

Roslaunch 模拟环境并查看roslist topic

xiangliu@xiangliu-virtual-machine:~$ roslaunch robot_sim_demo robot_spawn.launch

Rostopic可以看出camera发送很多个topic,topic都已是/开头的。

9.ROS的通信方式 & topic通信

Rostopic info topic

9.ROS的通信方式 & topic通信

9.ROS的通信方式 & topic通信

RGB颜色信息是:/camera/rgb/image_raw

这里我们来查看一下这个topic的信息:

9.ROS的通信方式 & topic通信

可以看到它的Type是sensor_msgs/Image

它的publisher是gazebo

他的Subsribes是None(说明还没有接收摄像头信息)

9.ROS的通信方式 & topic通信

添加接收者rosrun image_view image_view image:=topic

上面讲到 image_view 是用来接收图像信息的

这里我们运行image_view

发现rosrun image_view这个node的时候出错了

9.ROS的通信方式 & topic通信

按他的格式修改: 还要指定image topic,如下。

9.ROS的通信方式 & topic通信

一旦成功运行image_view就会出来图像

9.ROS的通信方式 & topic通信

这个图像的格式不是什么jpg之类的,而是我们之前查看过的topic info中讲到的*msg类型。

Ros info /camera/depth/image_raw

是一个深度图,它和RGB图像融合后可以形成点云,pointcloud。这些运用在建图,运动上面很有用。

查看一个topic

9.ROS的通信方式 & topic通信

运行这个topic的接收者

9.ROS的通信方式 & topic通信

查看message

9.ROS的通信方式 & topic通信

Rosnode list查看所有node:

9.ROS的通信方式 & topic通信

Rosnode info node(查看node属性)

9.ROS的通信方式 & topic通信

9.ROS的通信方式 & topic通信

/cmd_velocity     这个topic其实就是command velocity   控制速度的一个topic

/cmd_velocity(topic)

这个的publisher是  teleop_twist_keyboard  就是我们的键盘控制

它的subscribers 是gazebo  就是模拟器里面的模拟运动

9.ROS的通信方式 & topic通信

我想详细查看这个topic(速度控制)具体是什么内容:

可以看出控制速度的message是:geometry_msgs/Twist

9.ROS的通信方式 & topic通信

Rostopic info /  后会出来下面框,我按前后左右他就会动。Linear和angular,所以这个command_velocity就是接收的linear和angular这两个格式。

9.ROS的通信方式 & topic通信

 

rosmsg show type

我要查看它的具体定义:就是:rosmsg show type

所以我们这里是: $ rosmsg show geometry_msgs/Twist

可以看出,线速度可以分为x,y,z三轴的线速度

9.ROS的通信方式 & topic通信

角速度可以分为x,y,z三轴的角速度。

9.ROS的通信方式 & topic通信

Rosmsg list(查看系统当前所有message):

这个会把系统当前装上的所有message显示出来。

任务/作业(自学rostopic pub):

使用rostopic pub /cmd_vel  使用这个指令向cmd_vel这个topic发送我们自己定义的东西。

本文地址:https://blog.csdn.net/weixin_48619768/article/details/108178730

相关标签: ROS入门学习