機器人系統架構:(一)概覽
作者:Top Liu
1.易科機器人實驗室(http://exbot.net)系統設計師
2.星火計劃ROS機器人編程公開課講師,課程體系的設計者。
3.機器人技術傳播者,譯介有《機器人編程實戰》、《ROS機器人程序設計(第二版)》、《嵌入式機器人學》、《機器人與未來》
轉載請聯繫作者:email liu_jintao@126.com
機器人編程涉及控制系統的設計與實現,包括環境感知、交互、移動及行為的控制。
一個理想的機器人編程過程包括(假定硬體已經一切就緒):
1.系統架構設計
2.具體功能的演算法實現
3.編碼與集成
「它不是關於機器人的硬體,而是關於機器人是「誰」的內涵問題。」
由於筆者所從事工作性質,主要集中在1.系統設計和2.演算法的研究上,3.coding的機會並不是很多。第二個原因是:如果1,2工作完成後,3的工作其實和機器人本身並不大,計算機專業恐怕會做的更好。因此本文主要就1給出一些總結和建議。另外,由於所研究的演算法過(wu)於(fa)先(ying)進(yong),通常會在專業的學術期刊上發表,在此也不做過多討論。
1. n機器人系統架構
「架構可定義為組件的結構及它們之間的關係,以及規範其設計和後續進化的原則和指南。簡言之,架構是構造與集成軟體密集型系統的深層次設計。」
系統架構也可稱其為如何實施解決方案的一個策略性設計(例如基於組件的工程標準、安全)和解決方案做什麼的功能性設計(如演算法、設計模式、底層實現)。
圖n1 機器人功能分解
另外,軟體工程的基本要求包括模塊化、代碼可復用、功能可共享。使用通用的框架,有利於分解開發任務及代碼移植。機器人軟體同樣遵從軟體工程的一般規律。說白了,架構就是你如何把機器人的功能打散,再如何把代碼組織起來。一個清晰的與項目相匹配的架構直接決定了你的開發效率甚至最終功能的成敗。
從人類第一台可編程的機器人開發伊始,架構問題就與之相伴而生。早在1996年,Garlann和 Shaw在《軟體架構:一門新興學科的展望》就總結了移動機器人的基本設計需求, 如:(1) 慎思規劃和反應式行為;(2)容許不確定性;(3)考慮危險;(4)靈活性強。針對這些要求,他們評估了四種用於移動機器人的架構,包括控制迴路(control loop)、分層(layers)、隱式調用(implicit invocation)、黑板(blackboard)。經過了幾十年的實踐,一些架構被逐漸淘汰,一些架構逐漸被完善起來。
------------------------------------------------------------------------------------------
注意:現在很多機器人開發者一上手就是ROS,雖然ROS是一種比較不錯的系統架構,它的基於node的思想在當時是非常先進的,在今天已成為主流。但我們也要清楚,它只是其中一種架構,尤其是在小型嵌入式設備上定製機器人系統時,其他的架構可能會更有效率。另外Master中央控制模式,也是單機時代的產物,在多機的情形就不是很適用。
------------------------------------------------------------------------------------------
1.1 S-P-A結構
圖 2 機器人的「see-think-act」工作模式
圖 3 「感測——計劃——行動」(SPA)結構
機器人天然的工作模式是「see-think-act」,所以自然而然的就形成了「感測——計劃——行動」(SPA)結構:從感知進行映射,經由一個內在的世界模型構造,再由此模型規劃一系列的行動,最終在真實的環境中執行這些規劃。與之對應的軟體結構稱為經典模型,也稱為層次模型、功能模型、工程模型或三層模型,這是一種由上至下執行的可預測的軟體結構,
SPA機器人系統典型的結構是中建立有三個抽象層,分別稱為行駛層(Pilot)(最低層)、導航層(Navigator)(中間層)、規劃層(Planner)(最高層)。感測器獲取的載體數據由下兩層預處理後再到達最高「智能」層作出行駛決策,實際的行駛(如導航和低層的行駛功能)交由下面各層執行,最低層再次成為與小車的介面,將駕駛指令發送給機器人的執行器。
缺點:這種方法強調世界模型的構造並以此模型規划行動,而構造符號模型需要大量的計算時間,這對機器人的性能會有顯著的影響。另外,規劃模型與真實環境的偏差將導致機器人的動作無法達到預期的效果。
1.2 基於行為的結構
圖 4 基於行為的結構
由於SPA系統過於死板,出現了另一種實現方法:基於行為的方法。基於行為方法前身是反應式系統,反應式系統並不採用符號表示,卻能夠生成合理的複合行為。基於行為機器人方案進一步擴展了簡單反應式系統的概念,使得簡單的並發行為可以結合起來工作。
------------------------------------------------------------------------------------------
小歷史:Joe Jones和Daniel Roth於2003年出版的《Robot Programming:A Practical Guide to Behavior-Based Robotics》以及使用基於行為系統的iRobot掃地機器人的大獲成功(通過基於行為的系統可有效實現遍歷、避免在某處卡死等多個目標的達成),標誌著當年基於行為系統結構的統治地位。第一作者Joe Jones是iRobot掃地機器人Roomba的設計師。短短十年間,SLAM的迅速興起,基於地圖的規劃和導航再次興起,很多人似乎忘記了或壓根就沒聽說過Behavior-BasednRobotics的存在。
------------------------------------------------------------------------------------------
圖n5 圖書:基於行為的機器人編程
基於行為的軟體模型是一種由下至上的設計,因而其結果不易預測,每一個機器人功能性(functionality)被封裝成一個小的獨立的模塊,稱為一個「行為」,而不是編寫一整個大段的代碼。因為所有的行為並行執行,所以不需要設置優先順序。此種設計的目的之一是為了易於擴展,例如便於增加一個新的感測器或向機器人程序里增加一個新的行為特徵。所有的行為可以讀取載體所有感測器的數據,但當歸集眾多的行為向執行器產生單一的輸出信號時,則會出現問題。
最初的行為之間使用固定的優先順序,而在現代的應用中則採用更加靈活的選擇方案。
「基於行為機器人學」主要特點包括(參見《嵌入式機器人學》):
感應與動作的緊密耦合
在某種程度上,所有行為機器人的動作是對刺激的反應而不是依賴於有意識的規則。迴避使用思考規劃,取而代之的是一些計算簡化的模塊來實現從輸入到執行的映射,此舉有利於快速響應。基於這個觀察Brooks言簡意概的表達出來其中的原理「規劃不過是一種迴避計算下一步要做什麼的方法」。
避開知識的符號表示
對環境的處理上不需要構造一個內部模型以用於執行規劃任務,而是採用真實世界「它自己最好的模型」。機器人直接從觀測中獲取到未來的行為,而非試圖去生成一個能夠內部操作的世界的抽象表示並以此作為規劃未來行動的基礎。
分解成具有因果意義的單元
行為按照狀態——動作成對出現,設計為對特定的狀態做出確定的動作響應。
並發關聯行為的時變等級調整
為適應所要達成任務目的,在運行期間採用一個控制方案來改變行為的激活等級。
行為選擇
在基於行為系統中運行著一定數目作為並行進程的行為,每一個行為可以讀取所有的感測器(讀動作),但只有一個行為可獲得機器人執行器或行駛機構的控制權(寫動作)。因此需要一個全局控制器在恰當的時機來協助行為選擇(或是行為激活、或是行為輸出融合)以達到預期的目的。這將系統的設計工作,就從描述系統本身轉移到定義一個正常工作的系統的輸出上。
------------------------------------------------------------------------------------------
說多了,感覺要跑題了。如果你有興趣,並想了解更多關於編程機器人來處理未知的東西,推薦Ronald Arkin的《Behavior-Based Robotics》和Thomas Braun的《嵌入式機器人學:基於嵌入式系統的移動機器人設計和應用》。慎思式的機器人編程方法,從中級到高級的探討,推薦Christopher A. Rouff等人的《Agent Technologynfrom a Formal Perspective》。
------------------------------------------------------------------------------------------
一張圖小結一下:
2. n混合系統:實踐的產物
沒有萬靈的結構,混合系統結合了SPA和反應體系的原理,將多種混合系統應用於在感測器和電機輸出間進行協調來完成任務。混合結構相結合最具吸引力的好處可能是:系統按照按有利於完成任務的標準進行設計,而非刻板的遵循某一教條。但再複雜的結構,基本上也都是二者的組合。以ROS的導航包為例:
圖n6 ROS導航包
導航包整體上是SPA結構,左右兩側是感知S,包括感測器數據/里程計/地圖等,中間框圖是Global和Local兩級規劃P,最後發送cmd_vel給行動A。
如果世界是完美的,那按照規劃的地圖行進到目的地就完事了。然而基於行為方法就是為了處理各種意外而生的。當機器人遇到障礙物或是被卡住的時候,內嵌的基於行為的系統就開始發揮作用。會根據情況,在「行為庫」recovery_behaviors中調用某一預先設定的「行為」來擺脫困境。
圖n7 recovery_behaviors
默認的行為是:首先,清除機器人地圖指定區域以外的障礙。接下來,如果可能的話,機器人將執行一個原地旋轉清理空間。如果這也失敗了,機器人將更激進地清理地圖,清除一切可以原地旋轉的矩形區域以外的障礙。這將是另一個就地旋轉緊隨其後。如果這些都失敗了,機器人將認為其目標不可行,停止運行並通知用戶。
當然,你還可以針對各種意外設計更為複雜的recovery_behaviors 「行為庫」以備調用。
3. n安全自主機器人應用框架
現在還有一種基於場景和態勢的設計框架SARAA,我覺得很有趣。安全自主機器人應用架構(SARAA,Safe Autonomous Robot ApplicationnArchitecture, SARAA)是一種強調安全性的自主機器人的開發方法。
圖n8 SARAA
SARAA機器人總結
在《機器人編程實戰》(2017年出版)書中,詳細介紹了編程一個機器人自主執行其任務、構成了所謂SARAA的7項技術:
軟體機器人框架
ROLL模型
REQUIRE
RSVP
SPACES
STORIES
PASS
我們稱具有這種體系結構的機器人為SARAA機器人。當正確地實現時,這些編程技術產生一個基於知識的機器人控制器。因此,一個SARAA機器人是一個可以在預先設定的場景和態勢中自主行動的知識型機器人。其中一個設計思想是根據場景和態勢對前提/後置條件的判斷以提高安全性。
感興趣可訪問Ctest實驗室(www.ctestlabs.org),SARAA已經用於在開源機器人平台內工作,例如Arduino、Linux和ROS。如果對編程SARAA機器人的場景和態勢很好理解與恰當定義,則SARAA機器人的設計有助於提升機器人的安全性。
推薦閱讀: