ROS2話題入門
寫在前面
- 當(dāng)前平臺文章匯總地址:ROS2機(jī)器人從入門到實(shí)戰(zhàn)
- 獲取完整教程及配套資料代碼,請關(guān)注公眾號<魚香ROS>獲取
- 教程配套機(jī)器人開發(fā)平臺:兩驅(qū)版| 四驅(qū)版
- 為方便交流,搭建了機(jī)器人技術(shù)問答社區(qū):地址 fishros.org.cn
話題是ROS2中最常用的通信方式之一,話題通信采取的是訂閱發(fā)布模型。
1.訂閱發(fā)布模型
一個節(jié)點(diǎn)發(fā)布數(shù)據(jù)到某個話題上,另外一個節(jié)點(diǎn)就可以通過訂閱話題拿到數(shù)據(jù)。
除了上述這種一個節(jié)點(diǎn)發(fā)布,一個節(jié)點(diǎn)接受的形式外,ROS2話題通信其實(shí)還可以是1對n
,n對1
,n對n
的。
1對n
n對1(同一個話題可以有多個發(fā)布者)
n對n
還有一種就是ROS2節(jié)點(diǎn)可以訂閱本身發(fā)布的話題
2. 消息接口
為了方便發(fā)送者和接收者進(jìn)行數(shù)據(jù)的交換,ROS2幫我們在數(shù)據(jù)傳遞時做好了消息的序列化和反序列化(有關(guān)消息序列化相關(guān)內(nèi)容請參考本章基礎(chǔ)篇),而且ROS2的消息序列化與反序列化通信是可以做到跨編程語言、跨平臺和跨設(shè)備之間的。
ROS2如何做到跨編程語言、跨平臺和跨設(shè)備之間的數(shù)據(jù)收發(fā)呢?這就得益于通過定義消息接口文件了。
因?yàn)榭缙脚_和設(shè)備實(shí)現(xiàn)較為復(fù)雜,小魚這里簡單說一下如何實(shí)現(xiàn)跨語言的。當(dāng)我們定義好消息接口后,ROS2會根據(jù)消息接口內(nèi)容生成不同語言的接口類,在不同編程語言中調(diào)用相同的類即可實(shí)現(xiàn)無感的消息序列化和反序列化。
通過對消息接口介紹,相信你肯定能猜到這樣一條規(guī)則:同一個話題,所有的發(fā)布者和接收者必須使用相同消息接口。
3. ROS2話題工具
3.1 GUI工具
3.1.1 RQT工具之rqt_graph
ROS2作為一個強(qiáng)大的工具,在運(yùn)行過程中,我們是可以通過命令來看到節(jié)點(diǎn)和節(jié)點(diǎn)之間的數(shù)據(jù)關(guān)系的。
運(yùn)行我們第二章中的你說我聽小demo。依次打開三個終端,分別輸入下面三個命令。
ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph
你將看到下面這張圖
你可以嘗試改變菜單欄的Hide或者Group選項,看一看下面圖的變化,感受一下rqt_graph工具的強(qiáng)大。
這是一個很重要的工具,小魚在學(xué)習(xí)和使用ROS2的過程中經(jīng)常會用到它,來看一看數(shù)據(jù)到底是怎么走的,它可以幫我們搞清楚一個節(jié)點(diǎn)的輸入和輸出是什么。
3.2 CLI工具
還記得上一章的ros2 node指令嗎?ros2也支持很多強(qiáng)大的topic指令??梢允褂孟旅娴闹噶畈榭?。
ros2 topic -h
本著學(xué)以致用的目的,小魚先對比較常用的幾個命令進(jìn)行介紹,其他的我們用到的時候小魚再介紹(現(xiàn)在介紹反而不好理解)。
3.2.1 ros2 topic list 返回系統(tǒng)中當(dāng)前活動的所有主題的列表
命令
ros2 topic list
結(jié)果
3.2.2 ros2 topic list -t 增加消息類型
命令
ros2 topic list -t
結(jié)果
3.2.3 ros2 topic echo <topic_name> 打印實(shí)時話題內(nèi)容
命令
ros2 topic echo /chatter
結(jié)果
3.2,4 ros2 topic info <topic_name> 查看主題信息
命令
ros2 topic info /chatter
結(jié)果
3.2.5 ros2 interface show 查看消息類型
上面一個指令告訴大家這個消息是std_msgs/msg/String,那String里面有什么呢?不妨來試一試。
命令
ros2 interface show std_msgs/msg/String
結(jié)果
3.2.6 ros2 topic pub <topic_name> <msg_type> arg 手動發(fā)布命令
關(guān)閉發(fā)布者,我們受到來發(fā)布
命令
ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'
結(jié)果
4.最后
了解完話題,下一節(jié)小魚就會帶大家來動手寫一寫話題通信代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-761176.html
參考鏈接:Understanding ROS 2 topics — ROS 2 Documentation: Humble documentation文章來源地址http://www.zghlxwxcb.cn/news/detail-761176.html
到了這里,關(guān)于【ROS2機(jī)器人入門到實(shí)戰(zhàn)】ROS2話題入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!