SLAM+語音機器人DIY系列:(六)SLAM建圖與自主避障導航——4.多目標點導航及任務調度...

SLAM+語音機器人DIY系列:(六)SLAM建圖與自主避障導航——4.多目標點導航及任務調度

摘要                                            

通過前面的基礎學習,本章進入最爲激動的機器人自主導航的學習。在前面的學習鋪墊後,終於迎來了最大樂趣的時刻,就是賦予我們的miiboo機器人能自由行走的生命。本章將圍繞機器人SLAM建圖、導航避障、巡航、監控等內容展開。本章內容:

1.在機器人上使用傳感器

2.google-cartographer機器人SLAM建圖

3.ros-navigation機器人自主避障導航

4.多目標點導航及任務調度

5.機器人巡航與現場監控



4.多目標點導航及任務調度        

通過前面的學習,我們已經可以通過點擊地圖的方式來命令機器人運動到目標點。其實,ros-navigation導航框架就是爲我們提供了一個最基本的機器人自動導航接口,即單點導航。然而,在實際的機器人應用中,機器人往往要完成複雜的任務,這些複雜的任務都是由一個個基本的任務組合而成的。一般的,機器人通過狀態機的形式將一個個基本任務組合在一起來進行復雜任務的調度實現。

4.1.狀態機                 

這裏我們只討論有限狀態機,也稱爲FSM(Finite State Machine),其在任意時刻都處於有限狀態集合中的某一狀態。當其獲得一個輸入條件時,將從當前狀態轉換到另一個狀態,或者仍然保持在當前狀態。任何一個FSM都可以用狀態轉換圖來描述,圖中的節點表示FSM中的一個狀態,有向加權邊表示輸入條件時狀態的變化。如圖49,以一個上班族的生活場景來舉例說明狀態機的狀態轉換圖。矩形框表示FSM中的一個狀態,有向邊表示在輸入條件下的狀態轉換過程。

(圖49)有限狀態機FSM舉例

4.2.多目標點巡航            

機器人多目標點巡航,特別是按特定巡邏路徑進行巡航是很實用的功能。這裏將利用前面學到的ros-navigation單點導航、狀態機、狀態機任務調度的知識。我們來編寫一個應用功能包實現機器人多目標點巡航。

到這裏,我們慢慢清楚了miiboo機器人編程的框架思路,我們將傳感器相關的底層驅動包放在~/catkin_ws/工作空間統一管理,將基於google-cartographerSLAM建圖程序包放在~/catkin_ws_carto/工作空間統一管理,將基於ros-navigation的導航程序包放在~/catkin_ws_nav/工作空間統一管理,將高層應用功能包放在~/catkin_ws_apps/工作空間統一管理。miiboo機器人編程的框架思路,如圖50

(圖50miiboo機器人編程的框架思路

這裏將建立一個叫catkin_ws_appsROS工作空間,專門用於放置日後開發的各種應用層功能包。關於創建ROS工作空間的操作,請參考前面相應部分內容,這裏就不做講解。在~/catkin_ws_apps/src/中建立一個叫patrol的功能包,建好後的patrol功能包文件結構,如圖51

(圖51patrol功能包文件結構

關於功能包的文件結構,大家已經很熟悉了,就不囉嗦了。這裏重點講解一下patrol_fsm.py這個文件,文件內容如圖52

(圖52patrol_fsm.py文件內容

這裏採用python來編寫多目標點巡航的邏輯,python開發ROS節點的優點是簡潔高效。代碼中waypoints數組裏面存放的是要巡航的各個目標點,大家可以根據自己的需要進行相應的替換和增減;with patrol代碼塊裏面實現狀態機的構建;最後調用狀態機的執行函數,狀態機就開始工作了,也就是開始執行巡航了。

啓動多目標點巡航分爲3步:啓動機器人上所有傳感器、啓動導航所需各個節點、啓動多目標點巡航節點。

首先,啓動機器人上所有傳感器,打開終端,通過下面的命令直接啓動就行了。

source ~/catkin_ws/devel/setup.bash 
roslaunch miiboo_bringup miiboo_all_sensor.launch 

然後,啓動導航所需各個節點,打開終端,通過下面的命令直接啓動就行了。

source ~/catkin_ws_nav/devel/setup.bash 
roslaunch miiboo_nav miiboo_nav.launch

最後,啓動多目標點巡航節點,打開終端,通過下面的命令直接啓動就行了。

source ~/catkin_ws_apps/devel/setup.bash 
roslaunch patrol patrol.launch

4.3.複雜多任務機器人未來展望   

機器人可以進行自動導航、人機對話、用機械臂抓取物體、物體識別等。將這些任務結合起來,利用機器人強大的大腦推理機制能完成更爲複雜和智能化的任務。如果說基於狀態機的複雜任務調度是1.0版本的智能,那麼基於大腦推理機制的複雜任務調度將是2.0版本的智能。

我的設想是利用強化學習神經網絡作爲大腦推理機制的實現實體,如圖53。自動導航、人機對話、用機械臂抓取物體、物體識別等任務組合的整體作爲機器人與外界環境交互的動作空間,動作空間的的狀態分爲兩種形態:執行結果、執行策略。執行結果作爲強化學習神經網絡的輸入,而執行策略作爲強化學習神經網絡的輸出。我們不斷通過各種複雜的實際場景的粒子來訓練機器人,讓機器人能在複雜場景下能做正確的事情。比如說,當機器人收到主人“我渴了”的語音信息後,自動導航到桌子邊,然後識別桌上的可樂,並用機械臂抓取,最後遞給主人,並提醒主人“你的可樂來了”。

 (圖53)強化學習神經網絡作爲大腦推理機制

 哈哈!這樣的想法很炫酷,不過以目前的技術實現難度還比較大,所以作爲未來展望分享給大家。希望和大家一起努力,在不遠的將來能實現這個夢想。

後記                                                      

如果大家對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一起討論學習^_^

 

posted @ 2019-02-22 00:28 小虎哥哥愛學習 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章