官术网_书友最值得收藏!

2.9 ROS-1和ROS-2的通信

如我們所知,ROS-2仍處于開(kāi)發(fā)之中,目前尚沒(méi)有一個(gè)穩(wěn)定的長(zhǎng)期支持的發(fā)行版。因此,直接在ROS-2中編寫(xiě)節(jié)點(diǎn)程序或?qū)OS-1下已有的節(jié)點(diǎn)程序移植到ROS-2下將是一項(xiàng)艱巨的任務(wù)。為了使得用戶能夠使用ROS-1和ROS-2的功能包進(jìn)行項(xiàng)目開(kāi)發(fā),可以通過(guò)一個(gè)名為ros1_bridge的功能包實(shí)現(xiàn)ROS-1和ROS-2的通信,從而實(shí)現(xiàn)兩個(gè)版本的連接與共用。

ros1_bridge實(shí)際上是一個(gè)ROS-2功能包,用于自動(dòng)或手動(dòng)建立消息、話題和服務(wù)的映射,并在ROS-1和ROS-2節(jié)點(diǎn)之間進(jìn)行通信。ros1_bridge可以在某個(gè)ROS版本中訂閱消息,然后在其他ROS版本中發(fā)布它們。當(dāng)讀者想使用一個(gè)模擬器(比如帶有ROS-2的Gazebo)來(lái)測(cè)試自己的項(xiàng)目時(shí),這個(gè)軟件包就派上了用場(chǎng)。在撰寫(xiě)本書(shū)時(shí),ros1_bridge功能包僅支持一定數(shù)量的消息。我們期待其他功能包能很快移植到ROS-2中,或者其消息能夠得到ros1_bridge功能包的支持,這樣我們就可以在ROS-1和ROS-2中并行運(yùn)行它們。

測(cè)試ros1_bridge功能包

ros1_bridge功能包默認(rèn)安裝在我們使用的發(fā)行版crystal中。下面讓我們?cè)赗OS-1中運(yùn)行一個(gè)節(jié)點(diǎn),然后打開(kāi)ros1_bridge,測(cè)試ROS-2中發(fā)布的話題。此試驗(yàn)需要打開(kāi)四個(gè)獨(dú)立的終端,具體如下:

1)在第一個(gè)終端窗口中,同時(shí)初始化ROS-1和ROS-2的工作空間,然后啟動(dòng)ros1_bridge功能包:

讀者將會(huì)看到Trying to connect to the ROS master的錯(cuò)誤提示。

2)在第二個(gè)終端窗口中,初始化ROS-1工作空間,并運(yùn)行roscore命令:

讀者將會(huì)看到連接到ROS master的信息。

3)在第三個(gè)終端窗口中,啟動(dòng)ROS-1的發(fā)布者節(jié)點(diǎn):

讀者將會(huì)在終端1和3中看到發(fā)布的信息。

4)在第四個(gè)終端窗口中,初始化ROS-2的工作空間,并啟動(dòng)訂閱者節(jié)點(diǎn):

讀者將會(huì)在終端1、3、4中看到發(fā)布的信息。

四個(gè)終端窗口的輸出信息應(yīng)如圖2.16所示。

圖2.16 ROS-1與ROS-2的通信示意圖,從左到右、從上到下分別為終端1~4

基于上述操作,讀者將方便地建立起ROS-1與ROS-2之間的連接,實(shí)現(xiàn)兩個(gè)版本ROS功能包的通信。此外,還可以采用同樣的方法,通過(guò)使用simple_bridge_2_to_1節(jié)點(diǎn)實(shí)現(xiàn)ROS-1與ROS-2的通信。

建議讀者嘗試dynamic_bridge節(jié)點(diǎn),該節(jié)點(diǎn)能夠自動(dòng)建立ROS-1和/或ROS-2節(jié)點(diǎn)間的通信連接。

主站蜘蛛池模板: 共和县| 郧西县| 黎城县| 绥阳县| 黑山县| 汤阴县| 五华县| 灵武市| 娄烦县| 高安市| 重庆市| 凤城市| 巴林左旗| 正阳县| 凤翔县| 横山县| 子洲县| 凤山县| 信丰县| 林周县| 泸定县| 固始县| 珲春市| 沙田区| 太康县| 金昌市| 仙桃市| 辽中县| 萨嘎县| 寿宁县| 即墨市| 会宁县| 蚌埠市| 会东县| 那曲县| 台南县| 栖霞市| 台前县| 重庆市| 乃东县| 美姑县|