1.1小海龜仿真
ROS的核心概念不少,有節(jié)點(diǎn)、話題、消息、服務(wù)等,在實(shí)際機(jī)器人運(yùn)行過程中,這些概念是如何體現(xiàn)的呢?
我們先來運(yùn)行ROS系統(tǒng)一個經(jīng)典的例程——小海龜。
請大家按照以下步驟進(jìn)行操作。
1.首先,打開終端;
2.輸入以下命令行,啟動ROS Master:
$ roscore
3.啟動成功后,打開一個新終端,輸入以下命令行,啟動小海龜仿真器,啟動成功后,就會出現(xiàn)如圖1-1所示的小海龜仿真器界面:
$ rosrun turtlesim turtlesim_node
4.再打開一個新的終端,輸入以下命令行,啟動海龜控制節(jié)點(diǎn),大家可以通過鍵盤上上下左右鍵來控制小海龜運(yùn)動:
$ rosrun turtlesim turtle_teleop_key
注意:在控制海龜運(yùn)動的過程中一定要保證turtle_teleop_key節(jié)點(diǎn)終端在界面最前端的,如果其他終端在最前面就沒有辦法被終端讀取到數(shù)據(jù)的。
小海龜功能是跑起來了,那這個例程是如何基于ROS的核心概念實(shí)現(xiàn)的呢?
接下來我們就分析一下例程背后的節(jié)點(diǎn)關(guān)系。
圖1-1 小海龜仿真器界面
圖1-2 啟動海龜仿真器節(jié)點(diǎn)
圖1-3 啟動海龜控制節(jié)點(diǎn)
這里我們將用到ROS中一個重要的可視化調(diào)試工具——rosgraph,用來顯示ROS運(yùn)行中計算圖,我們可以從上帝視角看到所有節(jié)點(diǎn)的運(yùn)行關(guān)系。
圖1-4 使用rqt_graph可視化工具查看系統(tǒng)中運(yùn)行的計算圖
接著上一個小海龜?shù)睦蹋覀冊賮泶蜷_一個終端,輸入以下命令行,啟動rosgraph:
$ rqt_graph
啟動完成后,即可看到如圖1-4所示的計算圖,這個界面會自動的監(jiān)控當(dāng)前運(yùn)行的整個ROS系統(tǒng),并且把里面的節(jié)點(diǎn)和節(jié)點(diǎn)間的關(guān)系動態(tài)的顯示出來,其中橢圓表示節(jié)點(diǎn),中間的箭頭表示節(jié)點(diǎn)間的關(guān)系,箭頭上的內(nèi)容表示話題。
在這個例程中,我們分別啟動了兩個節(jié)點(diǎn),一個是海龜仿真器,我們可以把它當(dāng)成是一個虛擬的機(jī)器人,另外一個是鍵盤控制,用來控制機(jī)器人前后左右運(yùn)動,兩個節(jié)點(diǎn)在節(jié)點(diǎn)管理器的幫助下建立了數(shù)據(jù)通信,完成速度控制指令的傳輸。
1.2移動機(jī)器人運(yùn)動控制
通過這個例程,我們需要理解節(jié)點(diǎn)在ROS中用來實(shí)現(xiàn)某些具體的功能,比如機(jī)器人的驅(qū)動、運(yùn)動指令的發(fā)送等,節(jié)點(diǎn)之間可以通過話題將數(shù)據(jù)發(fā)送或接收。
小海龜畢竟是一個仿真的機(jī)器人,在實(shí)物機(jī)器人中是不是也類似呢,我們再來試一試。
接下來,我們來使用以下兩句命令行啟動LIMO機(jī)器人,并啟動鍵盤控制節(jié)點(diǎn),類似控制小海龜前后左右運(yùn)動一樣,我們也可以控制機(jī)器人運(yùn)動。
$ roslaunch limo_base limo_base.launch $ roslaunch limo_bringup limo_teletop_keyboard.launch
再打開rosgraph工具看一下節(jié)點(diǎn)關(guān)系,我們可以直觀的發(fā)現(xiàn),此時系統(tǒng)中運(yùn)行了三個節(jié)點(diǎn),如圖1-5所示。
圖1-5 使用rqt_graph可視化工具查看節(jié)點(diǎn)關(guān)系
第一個是和控制海龜運(yùn)動相同的鍵盤控制節(jié)點(diǎn)teleop_keybord,用來讀取鍵盤的輸入鍵值,并封裝成cmd_vel這個速度話題發(fā)布出去。
第二個節(jié)點(diǎn)是類似小海龜仿真器一樣,用來驅(qū)動LIMO機(jī)器人的底盤控制節(jié)點(diǎn)limo_base_node,它會訂閱速度指令,當(dāng)收到數(shù)據(jù)后,就會驅(qū)動機(jī)器人發(fā)生運(yùn)動了。
從這張圖中,我們可以清晰的看到這兩個節(jié)點(diǎn)和他們之間的關(guān)系,更多節(jié)點(diǎn)也是類似,如果未來使用過程中某一環(huán)的數(shù)據(jù)沒收到,我們就可以快速定位原因了。
teleop_keybord:讀取鍵盤動作,發(fā)布速度控制指令
limo_base_node:機(jī)器人底盤控制節(jié)點(diǎn),包含PID算法控制電機(jī)運(yùn)動、訂閱/cmd_vel話題
以上案例實(shí)現(xiàn)的功能相對簡單,在一個實(shí)現(xiàn)眾多應(yīng)用功能的復(fù)雜機(jī)器人系統(tǒng)中,節(jié)點(diǎn)和話題的數(shù)量都會很多,類似如圖1-6所示這樣,除了底層嵌入式運(yùn)動控制器中需要實(shí)現(xiàn)的功能外,ROS環(huán)境下會通過一系列節(jié)點(diǎn)分別完成雷達(dá)、相機(jī)這些傳感器的驅(qū)動,發(fā)布數(shù)據(jù)話題后,上層的導(dǎo)航、建圖、圖像處理節(jié)點(diǎn)來訂閱并進(jìn)行相應(yīng)的算法處理,再傳輸?shù)奖O(jiān)控的計算機(jī),給可視化節(jié)點(diǎn)做顯示。每個節(jié)點(diǎn)各司其職,在ROS Master這個節(jié)點(diǎn)管理器的統(tǒng)一協(xié)調(diào)下,有條不紊的完成各項任務(wù)。
整個ROS運(yùn)行中的節(jié)點(diǎn)就像一個企業(yè)中不同部門的員工,每個人都有自己明確的工作,大家共同在CEO的組織下積少成多,合作完成一項非常復(fù)雜的任務(wù)。當(dāng)然,每個人都不能掉隊,一旦掉隊就可能會影響最終任務(wù)的完成。
圖1-6 移動機(jī)器人運(yùn)行結(jié)構(gòu)分析
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1019瀏覽量
83940 -
移動機(jī)器人
+關(guān)注
關(guān)注
2文章
765瀏覽量
33651 -
ROS
+關(guān)注
關(guān)注
1文章
280瀏覽量
17102
原文標(biāo)題:【移動機(jī)器人原理與應(yīng)用】3-移動機(jī)器人的運(yùn)行架構(gòu)
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論