<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 使用分層的方法設計機器人軟件

使用分層的方法設計機器人軟件

作者: 時(shí)間:2016-10-29 來(lái)源:網(wǎng)絡(luò ) 收藏

架構是典型的控制回路的層次集, 包含了高端計算平臺上的高級任務(wù)規劃、運動(dòng)控制回路以及最終的現場(chǎng)可編程門(mén)陣列(FPGA)。 在這中間,還有循環(huán)控制路徑規劃、機器人軌跡、障礙避讓和許多其他任務(wù)。 這些控制回路可在不同的計算節點(diǎn)(包括臺式機、實(shí)時(shí)操作系統以及沒(méi)有操作系統的自定制處理器)上以不同的速率運行。

本文引用地址:http://dyxdggzs.com/article/201610/306992.htm

在某些時(shí)候,系統中的各個(gè)部分必須一同運行。 通常情況下,這需要在軟件和平臺間預定義一個(gè)非常簡(jiǎn)單的界面—就如控制和監測方向與速度般簡(jiǎn)單。 共享軟件棧的不同層次的傳感器數據是一個(gè)不錯的想法,但會(huì )給集成帶來(lái)相當大的麻煩。 每個(gè)參與機器人設計的工程師或科學(xué)家的理念都有所不同,舉例來(lái)說(shuō),同一個(gè)架構對于計算機科學(xué)家來(lái)說(shuō)運作良好,而在機械工程師那里可能就無(wú)法正常工作。

如圖1所示,擬議的移動(dòng)架構由下列圖形所表示的三至四層系統構成。 軟件中的每一層只取決于特定的系統、硬件平臺或機器人的終極目標,與其上下層的內容完全不相關(guān)。 典型的包括驅動(dòng)程序、平臺和算法層組件,而具備用戶(hù)交互形式的應用包含了用戶(hù)界面層(該層可能不需要完全自主實(shí)現)。

圖1. 機器人參考架構

該范例中的架構為帶有機械手臂的自主移動(dòng)機器人,它能夠執行路徑規劃、障礙避讓和地圖繪制等任務(wù)。 這類(lèi)機器人的應用范圍在真實(shí)世界十分廣泛,包括農業(yè)、物流或搜索和救援。 板載傳感器包括編碼器、慣性測量單元(IMU)、攝像頭和多個(gè)聲納及紅外(IR)傳感器。 傳感器聚變可以用來(lái)整合針對本地化的編碼器和IMU數據 ,并定義機器人環(huán)境地圖。 攝像頭則用于識別載板機械手臂握住的物體,而機械手臂的位置由平臺層上執行的運動(dòng)學(xué)算法所控制,聲納和紅外傳感器可以避開(kāi)障礙物。 最后,轉向算法被用來(lái)控制機器人的移動(dòng),即車(chē)輪或履帶的移動(dòng)。 圖2就是基于移動(dòng)機器人架構的美國宇航局機器人。

開(kāi)發(fā)人員可以借助NI LabVIEW 系統設計軟件來(lái)實(shí)現這些移動(dòng)機器人的平臺層。 LabVIEW可用于設計復雜的機器人應用—從機械手臂延伸到自主車(chē)輛開(kāi)發(fā)。 該軟件提取I/O并可與多種硬件平臺集成,幫助工程師和科學(xué)家提高了他們的開(kāi)發(fā)效率。 NI CompactRIO 硬件平臺在機器人開(kāi)發(fā)中十分常用,它包括了集成的實(shí)時(shí)處理器與FPGA技術(shù)。 LabVIEW平臺的內置功能可實(shí)現每一層之間的數據通信,通過(guò)網(wǎng)絡(luò )傳輸數據并顯示在PC主機上。

1. 驅動(dòng)層

顧名思義,驅動(dòng)層主要處理機器人操控所需的底層驅動(dòng)函數。 在這一層的組件取決于系統中的傳感器和執行器,以及運行著(zhù)驅動(dòng)軟件的硬件。 一般情況下,這一層的模塊采集工程單位(位置,速度,力量等等)中激勵器的設定值,生成底層信號來(lái)創(chuàng )建相應的觸發(fā),其中可能包括關(guān)閉這些設定值循環(huán)的代碼。 同樣的,該層的模塊還能采集原始傳感器數據,將其轉換成有用的工程單位,并將傳感器值傳輸至其它架構層。 圖3中的驅動(dòng)層代碼就是使用LabVIEW FPGA模塊 開(kāi)發(fā)的,并在CompactRIO平臺的嵌入式FPGA模塊上執行。 聲納、紅外和電壓傳感器都連接在FPGA的數字I/O引腳上,信號在連續循環(huán)結構中進(jìn)行處理,這些結構在FPGA上真正的并行執行。 這些函數輸出的數據被發(fā)送到平臺層上進(jìn)行進(jìn)一步處理。

圖3. 傳感器和激勵器的驅動(dòng)層界面

驅動(dòng)層可以連接到實(shí)際的傳感器或激勵器,或連接環(huán)境仿真器中的I / O。 除了驅動(dòng)層以外,開(kāi)發(fā)人員無(wú)需修改系統中的任何層,就能在仿真和實(shí)際硬件之間進(jìn)行切換 。圖4為L(cháng)abVIEW機器人模塊 2011,它包含了基于物理學(xué)的環(huán)境仿真器,因此用戶(hù)可在硬件和仿真之間切換,除了硬件I / O模塊以外就無(wú)需修改任何代碼。 開(kāi)發(fā)人員可以使用例如LabVIEW機器人環(huán)境仿真器等工具來(lái)在軟件中快速驗證他們的算法。

2. 平臺層

平臺層中的代碼對應了機器人的物理硬件配置。該層中底層的信息和完整的高層軟件之間能夠進(jìn)行雙向轉換,頻繁地在驅動(dòng)層和高層算法層之間切換。如圖5所示,我們使用了LabVIEW FPGA讀/寫(xiě)結點(diǎn)從FPGA中接受原始紅外傳感器數據,并且在CompactRIO實(shí)時(shí)控制器上進(jìn)行數據處理。 我們使用LabVIEW函數將原始傳感器數據轉換成有用的數據—在本案例中為距離,并判斷我們是否在4米至31米的范圍之外。

圖5. 平臺層在驅動(dòng)層和算法層之間進(jìn)行轉換

3. 算法層

該層中的組件代表了機器人系統中高層的控制算法。圖6呈現了機器人需要完成任務(wù),可以看到算法層中的模塊采集系統信息,如位置、速度或處理后的視頻圖像,并基于所有反饋信息作出控制決定。該層中的組件能夠為機器人環(huán)境規劃地圖,并根據機器人周?chē)恼系K物規劃路徑。圖6中的代碼顯示的是使用矢量場(chǎng)直方圖(VFH)避障的范例。在該范例中,距離數據從平臺層發(fā)送至距離傳感器,再由VFH模塊接收。VFH模塊的輸出數據包含了路徑方向,該信息直接發(fā)送到平臺層上。在平臺層上,路徑方向輸入至轉向算法,并生成底層代碼,然后直接發(fā)送到驅動(dòng)層上的電機上。

圖6. 算法層根據反饋信息作出控制決定

算法層組件的另一個(gè)范例是搜索紅色的球狀物體,并使用機械手臂將它拾起的機器人。該機器人憑借其設定的方式,在避讓障礙的同時(shí)探索環(huán)境——這就需要搜索算法與避障算法相結合。在搜索時(shí),平臺層模塊會(huì )處理圖像,并且返回物體是否找到的信息。球被檢測到以后,算法會(huì )生成一條運動(dòng)軌跡,手臂端點(diǎn)根據它就能抓住并拾起球體。

范例中的每個(gè)任務(wù)都具有一個(gè)高層目標,與平臺或物理硬件無(wú)關(guān)。 如果機器人擁有多個(gè)高層目標,那么這一層還需包含仲裁來(lái)為目標排序。

4. 用戶(hù)接口層

用戶(hù)接口層中的應用程序并不需要完全獨立,它為機器人和操作員提供了物理互動(dòng),或在PC主機上顯示相關(guān)信息。 圖7顯示的是圖形用戶(hù)界面,上面包含板載相機上的實(shí)時(shí)圖像數據,以及地圖上周?chē)系K的XY軸坐標。 伺服角度控制讓用戶(hù)可以旋轉與相機連接的板載伺服電機。 在該層中還能讀取鼠標或游戲桿的輸入數據,或驅動(dòng)簡(jiǎn)單的文本顯示。 該層中的組件,例如GUI的優(yōu)先級非常低;而急停按鈕等類(lèi)似組件則需要以確定性的方式與代碼捆綁。

根據目標硬件不同,軟件層可能分布于多個(gè)不同目標。 在很多情況下,各個(gè)層都在一個(gè)計算平臺上運行。 對于不確定的應用程序,軟件目標為運行Windows或Linux系統的單臺PC。 對于需要更為嚴格定時(shí)限制的系統,軟件目標為單個(gè)處理節點(diǎn),且具備實(shí)時(shí)操作系統。

鑒于 CompactRIO與NI Single-Board RIO 的小體積、供電要求和硬件架構, 它們對于移動(dòng)應用程序來(lái)說(shuō)是理想的計算平臺。驅動(dòng)程序、平臺和算法層可在實(shí)時(shí)處理器和FPGA上分布,如圖8所示,如果需要,用戶(hù)界面層可在一臺主機PC上運行。電機驅動(dòng)器或傳感器過(guò)濾器等高速組件可在FPGA架構上確定地運行,無(wú)需占用處理器的時(shí)鐘周期。平臺和算法層上的中層控制代碼可以以?xún)?yōu)先循環(huán)的方式在實(shí)時(shí)處理器上確定地運行,而內置的以太網(wǎng)硬件可將信息傳輸到主機PC上生成用戶(hù)界面層。

圖8. 映射到CompactRIO或NI Single-Board RIO嵌入式系統的移動(dòng)機器人參考架構

文獻中有關(guān)移動(dòng)機器人的簡(jiǎn)要介紹表明了該主題還存在很多不同方法來(lái)創(chuàng )建機器人軟件。 本文就如何構建移動(dòng)機器人軟件給出了一種廣義的答案;然而任何設計都需要預先作出考慮與規劃,才能適應架構。作為回報,一個(gè)定義明確的架構有助于開(kāi)發(fā)人員輕松地并行處理項目,將軟件劃分成明確的界面層次。 此外,將代碼劃分成具有明確的輸入和輸出功能模塊有助于今后項目中的代碼組件復用。



關(guān)鍵詞: 分層 機器人軟件 軟件架構

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>