使用分層的方法設計機器人軟件
機器人軟件架構是典型的控制回路的層次集, 包含了計算平臺上的任務規劃、運動控制回路以及zui終的現場可編程門陣列(FPGA)。 在這中間,還有循環控制路徑規劃、機器人軌跡、障礙避讓和許多其他任務。 這些控制回路可在不同的計算節點(包括臺式機、實時操作系統以及沒有操作系統的自定制處理器)上以不同的速率運行。
在某些時候,系統中的各個部分必須一同運行。 通常情況下,這需要在軟件和平臺間預定義一個非常簡單的界面—就如控制和監測方向與速度般簡單。 共享軟件棧的不同層次的傳感器數據是一個不錯的想法,但會給集成帶來相當大的麻煩。 每個參與機器人設計的工程師或科學家的理念都有所不同,舉例來說,同一個架構對于計算機科學家來說運作良好,而在機械工程師那里可能就無法正常工作。
所示,擬議的移動機器人軟件架構由下列圖形所表示的三至四層系統構成。 軟件中的每一層只取決于特定的系統、硬件平臺或機器人的*目標,與其上下層的內容*不相關。 典型的機器人軟件包括驅動程序、平臺和算法層組件,而具備用戶交互形式的應用包含了用戶界面層(該層可能不需要*自主實現)。
該范例中的架構為帶有機械手臂的自主移動機器人,它能夠執行路徑規劃、障礙避讓和地圖繪制等任務。 這類機器人的應用范圍在真實世界十分廣泛,包括農業、物流或搜索和救援。 板載傳感器包括編碼器、慣性測量單元(IMU)、攝像頭和多個聲納及紅外(IR)傳感器。 傳感器聚變可以用來整合針對本地化的編碼器和IMU數據 ,并定義機器人環境地圖。 攝像頭則用于識別載板機械手臂握住的物體,而機械手臂的位置由平臺層上執行的運動學算法所控制,聲納和紅外傳感器可以避開障礙物。 zui后,轉向算法被用來控制機器人的移動,即車輪或履帶的移動。 圖2就是基于移動機器人架構的美國宇航局機器人。
SuperDroid Robots設計的移動機器人
開發人員可以借助NI LabVIEW 系統設計軟件來實現這些移動機器人的平臺層。 LabVIEW可用于設計復雜的機器人應用—從機械手臂延伸到自主車輛開發。 該軟件提取I/O并可與多種硬件平臺集成,幫助工程師和科學家提高了他們的開發效率。 NI CompactRIO 硬件平臺在機器人開發中十分常用,它包括了集成的實時處理器與FPGA技術。 LabVIEW平臺的內置功能可實現每一層之間的數據通信,通過網絡傳輸數據并顯示在PC主機上。
1. 驅動層
顧名思義,驅動層主要處理機器人操控所需的底層驅動函數。 在這一層的組件取決于系統中的傳感器和執行器,以及運行著驅動軟件的硬件。 一般情況下,這一層的模塊采集工程單位(位置,速度,力量等等)中激勵器的設定值,生成底層信號來創建相應的觸發,其中可能包括關閉這些設定值循環的代碼。 同樣的,該層的模塊還能采集原始傳感器數據,將其轉換成有用的工程單位,并將傳感器值傳輸至其它架構層。 圖3中的驅動層代碼就是使用LabVIEW FPGA模塊 開發的,并在CompactRIO平臺的嵌入式FPGA模塊上執行。 聲納、紅外和電壓傳感器都連接在FPGA的數字I/O引腳上,信號在連續循環結構中進行處理,這些結構在FPGA上真正的并行執行。 這些函數輸出的數據被發送到平臺層上進行進一步處理。
傳感器和激勵器的驅動層界面
驅動層可以連接到實際的傳感器或激勵器,或連接環境仿真器中的I / O。 除了驅動層以外,開發人員無需修改系統中的任何層,就能在仿真和實際硬件之間進行切換 。圖4為LabVIEW機器人模塊 2011,它包含了基于物理學的環境仿真器,因此用戶可在硬件和仿真之間切換,除了硬件I / O模塊以外就無需修改任何代碼。 開發人員可以使用例如LabVIEW機器人環境仿真器等工具來在軟件中快速驗證他們的算法。
如果需要進行仿真,必須要在驅動層中使用環境仿真器
2. 平臺層
平臺層中的代碼對應了機器人的物理硬件配置。該層中底層的信息和完整的高層軟件之間能夠進行雙向轉換,頻繁地在驅動層和高層算法層之間切換。如圖5所示,我們使用了LabVIEW FPGA讀/寫結點從FPGA中接受原始紅外傳感器數據,并且在CompactRIO實時控制器上進行數據處理。 我們使用LabVIEW函數將原始傳感器數據轉換成有用的數據—在本案例中為距離,并判斷我們是否在4米至31米的范圍之外。
平臺層在驅動層和算法層之間進行轉換
3. 算法層
該層中的組件代表了機器人系統中高層的控制算法。圖6呈現了機器人需要完成任務,可以看到算法層中的模塊采集系統信息,如位置、速度或處理后的視頻圖像,并基于所有反饋信息作出控制決定。該層中的組件能夠為機器人環境規劃地圖,并根據機器人周圍的障礙物規劃路徑。圖6中的代碼顯示的是使用矢量場直方圖(VFH)避障的范例。在該范例中,距離數據從平臺層發送至距離傳感器,再由VFH模塊接收。VFH模塊的輸出數據包含了路徑方向,該信息直接發送到平臺層上。在平臺層上,路徑方向輸入至轉向算法,并生成底層代碼,然后直接發送到驅動層上的電機上。