摘要
通過前面的基礎學習,本章進入最為激動的機器人自主導航的學習。在前面的學習鋪墊后,終於迎來了最大樂趣的時刻,就是賦予我們的miiboo機器人能自由行走的生命。本章將圍繞機器人SLAM建圖、導航避障、巡航、監控等內容展開。本章內容:
2.google-cartographer機器人SLAM建圖
4.多目標點導航及任務調度
通過前面的學習,我們已經可以通過點擊地圖的方式來命令機器人運動到目標點。其實,ros-navigation導航框架就是為我們提供了一個最基本的機器人自動導航接口,即單點導航。然而,在實際的機器人應用中,機器人往往要完成復雜的任務,這些復雜的任務都是由一個個基本的任務組合而成的。一般的,機器人通過狀態機的形式將一個個基本任務組合在一起來進行復雜任務的調度實現。
4.1.狀態機
這里我們只討論有限狀態機,也稱為FSM(Finite State Machine),其在任意時刻都處於有限狀態集合中的某一狀態。當其獲得一個輸入條件時,將從當前狀態轉換到另一個狀態,或者仍然保持在當前狀態。任何一個FSM都可以用狀態轉換圖來描述,圖中的節點表示FSM中的一個狀態,有向加權邊表示輸入條件時狀態的變化。如圖49,以一個上班族的生活場景來舉例說明狀態機的狀態轉換圖。矩形框表示FSM中的一個狀態,有向邊表示在輸入條件下的狀態轉換過程。
(圖49)有限狀態機FSM舉例
4.2.多目標點巡航
機器人多目標點巡航,特別是按特定巡邏路徑進行巡航是很實用的功能。這里將利用前面學到的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
4.3.復雜多任務機器人未來展望
機器人可以進行自動導航、人機對話、用機械臂抓取物體、物體識別等。將這些任務結合起來,利用機器人強大的大腦推理機制能完成更為復雜和智能化的任務。如果說基於狀態機的復雜任務調度是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技術交流群,一起討論學習^_^
關於我們:
視頻教程:
https://www.bilibili.com/video/av61448040