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