【導讀】機器人編程涉及控制系統(tǒng)的設(shè)計與實現(xiàn),包括環(huán)境感知、交互、移動及行為的控制。系統(tǒng)架構(gòu)也可稱其為如何實施解決方案的一個策略性設(shè)計(例如基于組件的工程標準、安全)和解決方案做什么的功能性設(shè)計(如算法、設(shè)計模式、底層實現(xiàn))。
一個理想的機器人編程過程包括(假定硬件已經(jīng)一切就緒):
1.系統(tǒng)架構(gòu)設(shè)計
2.具體功能的算法實現(xiàn)
3.編碼與集成
一、機器人系統(tǒng)架構(gòu)
“架構(gòu)可定義為組件的結(jié)構(gòu)及它們之間的關(guān)系,以及規(guī)范其設(shè)計和后續(xù)進化的原則和指南。簡言之,架構(gòu)是構(gòu)造與集成軟件密集型系統(tǒng)的深層次設(shè)計。”
系統(tǒng)架構(gòu)也可稱其為如何實施解決方案的一個策略性設(shè)計(例如基于組件的工程標準、安全)和解決方案做什么的功能性設(shè)計(如算法、設(shè)計模式、底層實現(xiàn))。
圖1.機器人功能分解
另外,軟件工程的基本要求包括模塊化、代碼可復用、功能可共享。使用通用的框架,有利于分解開發(fā)任務(wù)及代碼移植。機器人軟件同樣遵從軟件工程的一般規(guī)律。說白了,架構(gòu)就是你如何把機器人的功能打散,再如何把代碼組織起來。一個清晰的與項目相匹配的架構(gòu)直接決定了你的開發(fā)效率甚至最終功能的成敗。
從人類第一臺可編程的機器人開發(fā)伊始,架構(gòu)問題就與之相伴而生。早在1996年,Garlan和Shaw在《軟件架構(gòu):一門新興學科的展望》就總結(jié)了移動機器人的基本設(shè)計需求, 如:(1) 慎思規(guī)劃和反應(yīng)式行為;(2)容許不確定性;(3)考慮危險;(4)靈活性強。針對這些要求,他們評估了四種用于移動機器人的架構(gòu),包括控制回路(control loop)、分層(layers)、隱式調(diào)用(implicit invocation)、黑板(blackboard)。經(jīng)過了幾十年的實踐,一些架構(gòu)被逐漸淘汰,一些架構(gòu)逐漸被完善起來。
注意:現(xiàn)在很多機器人開發(fā)者一上手就是ROS,雖然ROS是一種比較不錯的系統(tǒng)架構(gòu),它的基于node的思想在當時是非常先進的,在今天已成為主流。但我們也要清楚,它只是其中一種架構(gòu),尤其是在小型嵌入式設(shè)備上定制機器人系統(tǒng)時,其他的架構(gòu)可能會更有效率。另外Master中央控制模式,也是單機時代的產(chǎn)物,在多機的情形就不是很適用。
1.S-P-A結(jié)構(gòu)
圖2.機器人的“see-think-act”工作模式
圖3.“傳感——計劃——行動”(SPA)結(jié)構(gòu)
機器人天然的工作模式是“see-think-act”,所以自然而然的就形成了“傳感——計劃——行動”(SPA)結(jié)構(gòu):從感知進行映射,經(jīng)由一個內(nèi)在的世界模型構(gòu)造,再由此模型規(guī)劃一系列的行動,最終在真實的環(huán)境中執(zhí)行這些規(guī)劃。與之對應(yīng)的軟件結(jié)構(gòu)稱為經(jīng)典模型,也稱為層次模型、功能模型、工程模型或三層模型,這是一種由上至下執(zhí)行的可預(yù)測的軟件結(jié)構(gòu)。
SPA機器人系統(tǒng)典型的結(jié)構(gòu)是中建立有三個抽象層,分別稱為行駛層(Pilot)(最低層)、導航層(Navigator)(中間層)、規(guī)劃層(Planner)(最高層)。傳感器獲取的載體數(shù)據(jù)由下兩層預(yù)處理后再到達最高“智能”層作出行駛決策,實際的行駛(如導航和低層的行駛功能)交由下面各層執(zhí)行,最低層再次成為與小車的接口,將駕駛指令發(fā)送給機器人的執(zhí)行器。
缺點:這種方法強調(diào)世界模型的構(gòu)造并以此模型規(guī)劃行動,而構(gòu)造符號模型需要大量的計算時間,這對機器人的性能會有顯著的影響。另外,規(guī)劃模型與真實環(huán)境的偏差將導致機器人的動作無法達到預(yù)期的效果。
2.基于行為的結(jié)構(gòu)
圖4.基于行為的結(jié)構(gòu)
由于SPA系統(tǒng)過于死板,出現(xiàn)了另一種實現(xiàn)方法:基于行為的方法?;谛袨榉椒ㄇ吧硎欠磻?yīng)式系統(tǒng),反應(yīng)式系統(tǒng)并不采用符號表示,卻能夠生成合理的復合行為?;谛袨闄C器人方案進一步擴展了簡單反應(yīng)式系統(tǒng)的概念,使得簡單的并發(fā)行為可以結(jié)合起來工作。
小歷史:Joe Jones和Daniel Roth于2003年出版的《Robot Programming:A Practical Guide to Behavior-Based Robotics》以及使用基于行為系統(tǒng)的iRobot掃地機器人的大獲成功(通過基于行為的系統(tǒng)可有效實現(xiàn)遍歷、避免在某處卡死等多個目標的達成),標志著當年基于行為系統(tǒng)結(jié)構(gòu)的統(tǒng)治地位。短短十年間,SLAM的迅速興起,基于地圖的規(guī)劃和導航再次興起,很多人似乎忘記了或壓根就沒聽說過Behavior-Based Robotics的存在。
圖5.《基于行為的機器人編程》
基于行為的軟件模型是一種由下至上的設(shè)計,因而其結(jié)果不易預(yù)測,每一個機器人功能性(functionality)被封裝成一個小的獨立的模塊,稱為一個“行為”,而不是編寫一整個大段的代碼。因為所有的行為并行執(zhí)行,所以不需要設(shè)置優(yōu)先級。此種設(shè)計的目的之一是為了易于擴展,例如便于增加一個新的傳感器或向機器人程序里增加一個新的行為特征。所有的行為可以讀取載體所有傳感器的數(shù)據(jù),但當歸集眾多的行為向執(zhí)行器產(chǎn)生單一的輸出信號時,則會出現(xiàn)問題。
最初的行為之間使用固定的優(yōu)先級,而在現(xiàn)代的應(yīng)用中則采用更加靈活的選擇方案。
“基于行為機器人學”主要特點包括(參見《嵌入式機器人學》):
1)感應(yīng)與動作的緊密耦合
在某種程度上,所有行為機器人的動作是對刺激的反應(yīng)而不是依賴于有意識的規(guī)則?;乇苁褂盟伎家?guī)劃,取而代之的是一些計算簡化的模塊來實現(xiàn)從輸入到執(zhí)行的映射,此舉有利于快速響應(yīng)?;谶@個觀察Brooks言簡意概的表達出來其中的原理——“規(guī)劃不過是一種回避計算下一步要做什么的方法”。
2)避開知識的符號表示
對環(huán)境的處理上不需要構(gòu)造一個內(nèi)部模型以用于執(zhí)行規(guī)劃任務(wù),而是采用真實世界“它自己最好的模型”。機器人直接從觀測中獲取到未來的行為,而非試圖去生成一個能夠內(nèi)部操作的世界的抽象表示并以此作為規(guī)劃未來行動的基礎(chǔ)。
3)分解成具有因果意義的單元
行為按照狀態(tài)——動作成對出現(xiàn),設(shè)計為對特定的狀態(tài)做出確定的動作響應(yīng)。
4)并發(fā)關(guān)聯(lián)行為的時變等級調(diào)整
為適應(yīng)所要達成任務(wù)目的,在運行期間采用一個控制方案來改變行為的激活等級。
5)行為選擇
在基于行為系統(tǒng)中運行著一定數(shù)目作為并行進程的行為,每一個行為可以讀取所有的傳感器(讀動作),但只有一個行為可獲得機器人執(zhí)行器或行駛機構(gòu)的控制權(quán)(寫動作)。因此需要一個全局控制器在恰當?shù)臅r機來協(xié)助行為選擇(或是行為激活、或是行為輸出融合)以達到預(yù)期的目的。這將系統(tǒng)的設(shè)計工作,就從描述系統(tǒng)本身轉(zhuǎn)移到定義一個正常工作的系統(tǒng)的輸出上。
說多了,感覺要跑題了。如果你有興趣,并想了解更多關(guān)于編程機器人來處理未知的東西,推薦Ronald Arkin的《Behavior-Based Robotics》和Thomas Braun的《嵌入式機器人學:基于嵌入式系統(tǒng)的移動機器人設(shè)計和應(yīng)用》。慎思式的機器人編程方法,從中級到高級的探討,推薦Christopher A. Rouff等人的《Agent Technology from a Formal Perspective》。
一張圖小結(jié)一下:
二、混合系統(tǒng):實踐的產(chǎn)物
沒有萬靈的結(jié)構(gòu),混合系統(tǒng)結(jié)合了SPA和反應(yīng)體系的原理,將多種混合系統(tǒng)應(yīng)用于在傳感器和電機輸出間進行協(xié)調(diào)來完成任務(wù)?;旌辖Y(jié)構(gòu)相結(jié)合最具吸引力的好處可能是:系統(tǒng)按照有利于完成任務(wù)的標準進行設(shè)計,而非刻板的遵循某一教條。但再復雜的機構(gòu),基本上也都是二者的組合。以ROS的導航包為例:
圖6.ROS導航包
導航包整體上是SPA結(jié)構(gòu),左右兩側(cè)是感知S,包括傳感器數(shù)據(jù)/里程計/地圖等,中間框圖是Global和Local兩級規(guī)劃P,最后發(fā)送cmd_vel給行動A。
如果世界是完美的,那按照規(guī)劃的地圖行進到目的地就完事了。然而基于行為方法就是為了處理各種意外而生的。當機器人遇到障礙物或是被卡住的時候,內(nèi)嵌的基于行為的系統(tǒng)就開始發(fā)揮作用。會根據(jù)情況,在“行為庫”recovery_behaviors中調(diào)用某一預(yù)先設(shè)定的“行為”來擺脫困境。
圖7.recovery_behaviors
默認的行為是:首先,清除機器人地圖指定區(qū)域以外的障礙。接下來,如果可能的話,機器人將執(zhí)行一個原地旋轉(zhuǎn)清理空間。如果這也失敗了,機器人將更激進地清理地圖,清除一切可以原地旋轉(zhuǎn)的矩形區(qū)域以外的障礙。這將是另一個就地旋轉(zhuǎn)緊隨其后。如果這些都失敗了,機器人將認為其目標不可行,停止運行并通知用戶。
當然,你還可以針對各種意外設(shè)計更為復雜的recovery_behaviors “行為庫”以備調(diào)用。
三、安全自主機器人應(yīng)用框架
現(xiàn)在還有一種基于場景和態(tài)勢的設(shè)計框架SARAA,我覺得很有趣。安全自主機器人應(yīng)用架構(gòu)(SARAA,Safe Autonomous Robot Application Architecture, SARAA)是一種強調(diào)安全性的自主機器人的開發(fā)方法。
圖8.SARAA
SARAA機器人總結(jié)
在《機器人編程實戰(zhàn)》(2017年出版)書中,詳細介紹了編程一個機器人自主執(zhí)行其任務(wù)、構(gòu)成了所謂SARAA的7項技術(shù):
軟件機器人框架
ROLL模型
REQUIRE
RSVP
SPACES
STORIES
PASS
我們稱具有這種體系結(jié)構(gòu)的機器人為SARAA機器人。當正確地實現(xiàn)時,這些編程技術(shù)產(chǎn)生一個基于知識的機器人控制器。因此,一個SARAA機器人是一個可以在預(yù)先設(shè)定的場景和態(tài)勢中自主行動的知識型機器人。其中一個設(shè)計思想是根據(jù)場景和態(tài)勢對前提/后置條件的判斷以提高安全性。
感興趣可訪問Ctest實驗室,SARAA已經(jīng)用于在開源機器人平臺內(nèi)工作,例如Arduino、Linux和ROS。如果對編程SARAA機器人的場景和態(tài)勢很好理解與恰當定義,則SARAA機器人的設(shè)計有助于提升機器人的安全性。