ROS提供的通信方式
- Topic 主题
- Service 服务
- Parameter Service 参数服务器
- Actionlib 动作库
Topic
Topic是一种点对点(Node对Node)的单向异步通信方式。
通信机制: publish-subscribe
异步通信
publisher:它每发布一次消息之后,就会继续执行下一个动作,至于消息是什么状态、被怎样处理,它不需要了解。
subscriber: 它只管接收和处理topic上的消息,至于是谁发来的,它不会关心。
一个topic可以被多个subscriber,也可以有多个publisher。
Topic相关命令
可以执行命令rostopic help
来查看topic的相关命令,执行rostopic command -h
来查看具体用法。
列出当前所有topic(可以看到topic都是/
开头的)
rostopic list
显示某个topic的信息
rostopic info topic_name
显示某个topic的内容
rostopic echo topic_name
向某个topic发布内容
rostopic pub topic_name ...
查看某个topic的带宽
rostopic bw topic_name
查看某个topic的频率
rostopic hz topic_name
查找某个类型的topic
rostopic find topic_type
查看某个topic的类型(msg)
rostopic type topic_name
Message: Topic的数据格式
Message是topic内容的数据类型,定义在“*.msg"文件中,该文件放在”pkg/msg"里。
基本的msg
- bool
- int8、int16、int32、int64(以及uint)
- float、float64
- string
- time
- duration
- header
- 可变长数组array[](可以理解成vector<…>)
- 固定长度数组array[C]
例子
以topicsensor_msg/image
为例,它的msg存放在sensor_msgs/msg/image.msg
,它的结构如下:
std_msg/Header header
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
string encoding
uint8 is_bigendian
uint32 step
uint8[] data
msg相关命令
列出系统上所以msg
rosmsg list
显示某个msg内容
rosmsg show msg_name