經過前面的基礎學習,本章進入最爲激動的機器人自主導航的學習。在前面的學習鋪墊後,終於迎來了最大樂趣的時刻,就是賦予咱們的miiboo機器人能自由行走的生命。本章將圍繞機器人SLAM建圖、導航避障、巡航、監控等內容展開。本章內容:html
1.在機器人上使用傳感器python
2.google-cartographer機器人SLAM建圖nginx
3.ros-navigation機器人自主避障導航django
5.機器人巡航與現場監控ubuntu
經過前面的學習,咱們已經能夠經過點擊地圖的方式來命令機器人運動到目標點。其實,ros-navigation導航框架就是爲咱們提供了一個最基本的機器人自動導航接口,即單點導航。然而,在實際的機器人應用中,機器人每每要完成複雜的任務,這些複雜的任務都是由一個個基本的任務組合而成的。通常的,機器人經過狀態機的形式將一個個基本任務組合在一塊兒來進行復雜任務的調度實現。centos
這裏咱們只討論有限狀態機,也稱爲FSM(Finite State Machine),其在任意時刻都處於有限狀態集合中的某一狀態。當其得到一個輸入條件時,將從當前狀態轉換到另外一個狀態,或者仍然保持在當前狀態。任何一個FSM均可以用狀態轉換圖來描述,圖中的節點表示FSM中的一個狀態,有向加權邊表示輸入條件時狀態的變化。如圖49,以一個上班族的生活場景來舉例說明狀態機的狀態轉換圖。矩形框表示FSM中的一個狀態,有向邊表示在輸入條件下的狀態轉換過程。數組
(圖49)有限狀態機FSM舉例bash
機器人多目標點巡航,特別是按特定巡邏路徑進行巡航是很實用的功能。這裏將利用前面學到的ros-navigation單點導航、狀態機、狀態機任務調度的知識。咱們來編寫一個應用功能包實現機器人多目標點巡航。網絡
到這裏,咱們慢慢清楚了miiboo機器人編程的框架思路,咱們將傳感器相關的底層驅動包放在~/catkin_ws/工做空間統一管理,將基於google-cartographer的SLAM建圖程序包放在~/catkin_ws_carto/工做空間統一管理,將基於ros-navigation的導航程序包放在~/catkin_ws_nav/工做空間統一管理,將高層應用功能包放在~/catkin_ws_apps/工做空間統一管理。miiboo機器人編程的框架思路,如圖50。
(圖50)miiboo機器人編程的框架思路
這裏將創建一個叫catkin_ws_apps的ROS工做空間,專門用於放置往後開發的各類應用層功能包。關於建立ROS工做空間的操做,請參考前面相應部份內容,這裏就不作講解。在~/catkin_ws_apps/src/中創建一個叫patrol的功能包,建好後的patrol功能包文件結構,如圖51。
(圖51)patrol功能包文件結構
關於功能包的文件結構,你們已經很熟悉了,就不囉嗦了。這裏重點講解一下patrol_fsm.py這個文件,文件內容如圖52。
(圖52)patrol_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
機器人能夠進行自動導航、人機對話、用機械臂抓取物體、物體識別等。將這些任務結合起來,利用機器人強大的大腦推理機制能完成更爲複雜和智能化的任務。若是說基於狀態機的複雜任務調度是1.0版本的智能,那麼基於大腦推理機制的複雜任務調度將是2.0版本的智能。
個人設想是利用強化學習神經網絡做爲大腦推理機制的實現實體,如圖53。自動導航、人機對話、用機械臂抓取物體、物體識別等任務組合的總體做爲機器人與外界環境交互的動做空間,動做空間的的狀態分爲兩種形態:執行結果、執行策略。執行結果做爲強化學習神經網絡的輸入,而執行策略做爲強化學習神經網絡的輸出。咱們不斷經過各類複雜的實際場景的粒子來訓練機器人,讓機器人能在複雜場景下能作正確的事情。好比說,當機器人收到主人「我渴了」的語音信息後,自動導航到桌子邊,而後識別桌上的可樂,並用機械臂抓取,最後遞給主人,並提醒主人「你的可樂來了」。
(圖53)強化學習神經網絡做爲大腦推理機制
哈哈!這樣的想法很炫酷,不過以目前的技術實現難度還比較大,因此做爲將來展望分享給你們。但願和你們一塊兒努力,在不遠的未來能實現這個夢想。
------SLAM+語音機器人DIY系列【目錄】快速導覽------
第1章:Linux基礎
第2章:ROS入門
第3章:感知與大腦
第4章:差分底盤設計
第5章:樹莓派3開發環境搭建
第6章:SLAM建圖與自主避障導航
2.google-cartographer機器人SLAM建圖
第7章:語音交互與天然語言處理
第8章:高階拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章將持續更新,敬請關注-----------------
若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^
關於咱們:
視頻教程: