当前位置: 移动技术网 > 科技>人工智能>嵌入式 > 9.ROS的通信方式 & topic通信

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

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

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

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

 

Topic 通信方式:

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

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

什么是异步?

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

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

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

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

一个topic可以对应多个node:

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

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

 

总结:

异步:publish()方法

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

 

Message(严格格式要求):

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

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

基本msg:

具体message组织方法:

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

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

 

Message相关命令:

和之前的rosnode很像。

 

举例:练习topic/message:

Roslaunch 模拟环境并查看roslist topic

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

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

Rostopic info topic

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

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

可以看到它的Type是sensor_msgs/Image

它的publisher是gazebo

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

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

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

这里我们运行image_view

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

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

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

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

Ros info /camera/depth/image_raw

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

查看一个topic

运行这个topic的接收者

查看message

Rosnode list查看所有node:

Rosnode info node(查看node属性)

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

/cmd_velocity(topic)

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

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

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

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

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

 

rosmsg show type

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

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

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

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

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

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

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

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网