具有可擴展的編程環(huán)境的機器人任務指揮器的制造方法
【專利摘要】一種用于開發(fā)分布式機器人應用級軟件的系統(tǒng),包括具有相關控制模塊的機器人和機器人任務指揮器(RTC),控制模塊響應于命令的任務控制機器人的運動,機器人任務指揮器通過網(wǎng)絡傳輸層(NTL)與控制模塊網(wǎng)絡通信。RTC包括腳本引擎和GUI,處理器和庫塊的中央庫由解釋性的計算機編程代碼構成,并具有輸入和輸出連接。GUI提供訪問可視化程序設計語言(VPL)環(huán)境和文本編輯器的入口。在執(zhí)行方法中,打開VPL,用于機器人的任務從代碼庫塊中建立,數(shù)據(jù)被分配給識別每個塊的輸入和輸出數(shù)據(jù)的輸入和輸出連接。任務序列通過NTL被發(fā)送到控制模塊,以命令執(zhí)行任務。
【專利說明】具有可擴展的編程環(huán)境的機器人任務指揮器[0001 ] 關于聯(lián)邦政府資助的研究或開發(fā)的聲明
[0002]本發(fā)明在美國航空航天局太空行動協(xié)議第SAA-AT-07-003號下由政府支持進行。美國政府可能擁有本發(fā)明的某些權利。
【技術領域】
[0003]本公開涉及用于自動機器人的任務規(guī)劃的系統(tǒng)和方法,尤其涉及一種可用于這種任務規(guī)劃的具有可擴展的編程環(huán)境的機器人任務指揮器(commander )。
【背景技術】
[0004]機器人是能夠使用一系列機械鏈接來操縱物件的自動化裝置。這些鏈接經(jīng)由電機/致動器驅動的機器人關節(jié)而互相連接。典型機器人中的每個關節(jié)代表一種獨立的控制變量,即自由度。末端執(zhí)行器是位于機器人機械手末端的特殊裝置,機械手用于執(zhí)行手邊的任務,比如抓住工作工具或捕捉物件的3D圖像。因此,對機器人的精確控制可由任務規(guī)格的級別統(tǒng)籌:物件級控制(即控制由機器人的單個或協(xié)作抓握而保持的物件的行為的能力)、末端執(zhí)行器控制和關節(jié)級控制??偟膩碚f,各種控制級別協(xié)作以獲得機器人移動性、靈活性和與工作任務相關的功能性的所需水平。
[0005]機器人的復雜性從常規(guī)的3軸或6軸機器人手臂變化至高度復雜的仿人機器人,即具有類人結構或外形的機器人,不論是否作為完整本體、軀干和/或附屬物。仿人機器人的結構復雜性主要取決于所執(zhí)行的工作任務的性質。通常,每個機器人具有其自身專用的編程環(huán)境,其中,專家用戶根據(jù)特殊的任務序列對必須執(zhí)行的各種任務編程。然后編譯程序碼,每當新的外圍裝置和其它硬件元件添加到機器人時,重寫通信協(xié)議。結果,某些任務編程效率底下可能存在于本領域中,尤其存在于利用不同設計和/或相對復雜性差異懸殊的機器人的大網(wǎng)絡環(huán)境中。
【發(fā)明內容】
[0006]本文公開了一種系統(tǒng),其包括機器人任務指揮器(RTC)。RTC旨在用于開發(fā)分布式機器人應用級軟件,即并非實時關鍵的軟件,如在本領域中眾所周知的那樣。RTC可體現(xiàn)為在一個或多個計算機裝置上運行的一組程序,包括具有圖形用戶界面(⑶I)的集成開發(fā)環(huán)境(IDE)和構造成充當相應腳本引擎的一個或多個程序。GUI用作RTC的圖形“前端”,允許專家或非專家用戶以直觀的方式與腳本引擎配合。GUI還使用戶能夠觀察運行時間診斷信息,以構成可存儲在存儲器中并經(jīng)由圖形文件瀏覽器可訪問的新腳本,以及將作為“代碼庫塊”的這種存儲的腳本“拖放”進新序列中。任務序列同樣存儲在存儲器中,用于在附加序列中作為“任務序列塊”分等級地再次使用。
[0007] GUI允許用戶將作為“應用”的任務序列塊配置給腳本引擎。反過來,腳本引擎充當RTC的計算“后端”。應用內的子塊可分配給特定的腳本引擎,該特定的腳本引擎必須隨后以指定的順序解譯和執(zhí)行這些特定塊。因此,腳本引擎在系統(tǒng)內用于將程序序列數(shù)據(jù)傳輸給其它腳本引擎,以及用于將診斷反饋傳送給GUI。如本文中使用的診斷反饋可采取兩種形式:GUI中的文字窗口和“塊高亮”,使得當應用被配置給腳本引擎時,GUI中的相應塊可變成不同的顏色,例如,綠色指示正常執(zhí)行,紅色指示錯誤或故障等。
[0008]使用如本文所公開的RTC便于在網(wǎng)絡環(huán)境中進行自動化機器人任務規(guī)劃,其中,一個或多個機器人通過網(wǎng)絡傳輸層(NTL)由多個計算裝置控制。RTC設計成支持多個網(wǎng)絡協(xié)議,例如機器人操作系統(tǒng)(ROS)、ZeroMQ, TCP/IP、UDP等,以實施不同腳本引擎、RTC⑶I和一個或多個機器人/外圍裝置之間的網(wǎng)絡通信,而不會獨屬于任何特定協(xié)議。因為應用可包括通過使用這些協(xié)議而分布在多個腳本引擎的寬網(wǎng)絡上的多個塊的任務序列,所以可能存在網(wǎng)絡延遲。然而,這種延遲在RTC的預期應用級軟件開發(fā)作用的范圍內是完全可以接受的。
[0009]RTC所使用的腳本引擎可位于網(wǎng)絡上的不同計算機上。每個腳本引擎可發(fā)送“觸發(fā)命令”給其它腳本引擎,例如作為并行執(zhí)行的一組協(xié)調的狀態(tài)機器。在這種環(huán)境中,GUI允許用戶立刻精確地理解各分布式腳本引擎內正在發(fā)生什么。此外,例如在傳感器/圖像熔合或圖像處理算法的情況下,如果特定庫腳本或序列塊(下文中統(tǒng)稱為“代碼庫塊”)特別密集,則分布式方法允許在整個網(wǎng)絡上的計算負載平衡。
[0010]在可能的方法中,給定的腳本引擎可專用于網(wǎng)絡上相應的機器人。類似地,每個任務序列和代碼庫塊可在不同計算機上的不同腳本引擎上運行??偟膩碚f,每個塊的配置在配置之前可由用戶在GUI中設定,或者通過標準調度算法(比如“循環(huán)”等)自動地分配給網(wǎng)絡上的腳本引擎,如本領域中眾所周知的那樣。連接各個塊的特定觸發(fā)事件通過NTL發(fā)送,從而允許RTC恰當?shù)匕l(fā)揮作用,即使在寬廣分布式的網(wǎng)絡環(huán)境中也如此。任務序列本身不需要是線性的。即,單個觸發(fā)命令可同時觸發(fā)執(zhí)行代碼的多個塊,從而開始并發(fā)或并行處理管線等等。
[0011]本文中所述的RTC使用專門寫入的腳本塊來接受來自通過NTL發(fā)布的機器人和/或傳感器數(shù)據(jù)的“輸入”數(shù)據(jù),如本領域中眾所周知的那樣,以及將“輸出”數(shù)據(jù)發(fā)布到NTL本身。當在RTC的⑶I中構成時,腳本必須被“抽象地”寫入,即對任何特定輸入/輸出(I/O)數(shù)據(jù)綁定是不可知的。這樣,每個單獨腳本塊僅了解信息的類型,例如關節(jié)位置、關節(jié)速度、圖像坐標等,并不了解該信息的具體來源。留給用戶的是,當在任務序列和/或應用中構成代碼塊時,通過使用直觀圖形界面來“綁定”在VPL中的該I/O數(shù)據(jù)的來源和接收器。因此,本方法的中心是能夠在不同的應用中使用和再使用庫腳本形式的抽象功能,同時可連接到不同的硬件裝置。這些概念將在下面進一步詳細討論。
[0012]如本領域普通技術人員所要明白的是,本文所公開的RTC可提供相對于現(xiàn)有命令和控制方法的各種優(yōu)點。當創(chuàng)建新機器人任務應用時,這種方法可能會欠佳地適于與新添加的外圍硬件裝置(比如傳感器、操縱器和/或第三方軟件)以均勻一致的方式配合。在現(xiàn)有技術中可能還缺乏對程序狀態(tài)和機器人遙測數(shù)據(jù)(可用于運行時內省和進行中的任務診斷)兩者的在線反饋。集成支持用于通過NTL經(jīng)由通信支持外部軟件包,并且其是使這成為可能的多個網(wǎng)絡協(xié)議的集成支持??傊?,這些特征可使先進機器人編程技術的快速原型化和配置適于下一代柔性綜合組裝制造系統(tǒng)、空間探測系統(tǒng)等。作為額外的益處,通過使用RTC,無論何時將新硬件添加到網(wǎng)絡,均不需要重新寫入通信協(xié)議。
[0013]在本文所公開的特定實施例中,該系統(tǒng)具體包括具有相關控制模塊的機器人??刂颇K響應于命令的任務控制機器人的至少一個關節(jié)的運動。該系統(tǒng)還包括上述的RTC,該RTC通過NTL與控制模塊網(wǎng)絡通信。RTC包括處理器和具有其中可以存儲代碼庫塊的中央庫的存儲器,每個代碼庫塊通過使用解釋性語言計算機編程代碼經(jīng)由相關的文字編輯器而構成。每個庫代碼塊還可具有一個或多個I/O連接,該I/O連接在本文中定義為特定的I/O鏈接,其分別通過NTL作為輸入和輸出數(shù)據(jù)的指針通信。RTC還包括與存儲器通信的⑶I。⑶I提供訪問VPL環(huán)境和文本編輯器的入口。
[0014]RTC響應于用戶命令執(zhí)行來自存儲器的指令,從而打開VPL,并允許用戶選擇或開發(fā)代碼用于經(jīng)由機器人而要被執(zhí)行的任務,這包括選擇和/或開發(fā)一個或多個代碼庫塊。所選擇/開發(fā)的代碼塊通過NTL下載到各指定的腳本引擎,其中,所述塊根據(jù)由特定觸發(fā)命令指示的流動路徑而被執(zhí)行。在經(jīng)由腳本弓I擎處理代碼庫塊后,每個控制模塊隨后控制由任務指示的所需運動,定期地將其狀態(tài)經(jīng)由腳本引擎?zhèn)魉突乜刂频腞TC。前述系統(tǒng)的各實施例將在本文中進一步詳細闡述。
[0015]結合附圖,參考用于實施本發(fā)明的最佳模式的下列詳細說明,本發(fā)明的上述特征和優(yōu)點以及其它特征和優(yōu)點將會更加顯而易見。
【專利附圖】
【附圖說明】
[0016]圖1是分布式機器人系統(tǒng)的示意圖,該分布式機器人系統(tǒng)包括多個機器人、單獨的控制模塊和構造成如下所述的機器任務指揮器(RTC)。
[0017]圖2是描述使用圖1所示系統(tǒng)的RTC進行程序開發(fā)的示意流程圖。
[0018]圖3是描述使用RTC進行機器人任務規(guī)劃的示意流程圖。
[0019]圖4是描述用于圖1所示機器人的任務規(guī)劃的方法的流程圖。
【具體實施方式】
[0020]參見附圖,其中,在幾個視圖中,類似的標號代表相同或類似的部件,圖1示意性地示出分布式機器人控制網(wǎng)絡10。例如,控制網(wǎng)絡10可包括如所示的示例仿人機器人12和常規(guī)的多軸機器人14,和/或相對于機器人12、14具有較大或較小復雜性的更多或更少的機器人。如本文所闡述,在控制網(wǎng)絡10內經(jīng)由機器人任務指揮器(RTC)13實現(xiàn)用于一個或多個機器人的綜合機器人任務規(guī)劃。
[0021]通常,在分布式控制環(huán)境中的任務規(guī)劃在每個機器人12、14的級別下執(zhí)行,確切地說僅用于那些特殊的機器人12、14。當如本文所述的那樣進行構造和使用時,RTC13代替提供圖形集成開發(fā)環(huán)境(IDE),其允許使用可視化程序設計語言(VPL)來寫入新的程序碼。這發(fā)生在第一層中,即圖形用戶界面(⑶1)22,其因此充當RTC13的圖形“前端”,如上所述。
[0022]可托管在適當構造的計算機裝置上的⑶122,允許用戶創(chuàng)建新的程序腳本,作為圖形塊存儲腳本,然后根據(jù)需要在運行時開始、暫停和停止對這些塊的執(zhí)行,同時接收運行診斷反饋。這樣,GUI22可用于應用的開發(fā)和配置,其中術語“應用”用于表示任何“頂級”序列塊,其可被分派至一個或多個RTC腳本引擎20,腳本弓I擎又提供控制的第二層。GUI22可包括或提供訪問文本編輯器(TE) 41、上述VPL和庫瀏覽器(B)的入口,庫瀏覽器顯示已創(chuàng)建的腳本和塊。因此,經(jīng)由單個⑶122的圖形IDE的二分法以及潛在的許多分布式腳本引擎20便于在分布式環(huán)境中進行軟件原型化和高級別的任務規(guī)劃。控制模塊(CM) 21,31提供控制的第三層,下面將進一步詳細描述所有的三層。盡管為了簡化起見未示出,但是當塊在IDE中被點擊時,GUI22可為每個塊打開相關的窗口。這個概念將參照圖2在下面進一步詳細描述。
[0023]在特定實施例中,圖1的仿人機器人可具有超過42個自由度(D0F),并通過使用其它集成系統(tǒng)部件(比如夾具、2D或3D相機、光、繼電器等)以類人水平的靈活性執(zhí)行自動化的解釋性任務。為了獲得這種靈活性,機器人12可包括可獨立移動和可相互依賴移動的機器人關節(jié),比如但并不限于臂18的肩關節(jié)。肩關節(jié)的位置大致由箭頭A指示。
[0024]類似地,肘關節(jié)大致由箭頭B指示,機器人12還包括腕關節(jié)(箭頭C)、提供頭19的多軸移動的頸關節(jié)(箭頭D)和提供軀干16的移動的腰關節(jié)(箭頭E),以及定位在每個機器人手指的指骨之間的各個指關節(jié)(箭頭F)。每個機器人關節(jié)包含并由一個或多個致動器內部地驅動,比如關節(jié)電機、線性致動器、旋轉致動器等。盡管為了簡化說明起見在圖1中未示出,但是指關節(jié)(箭頭F)和/或其它關節(jié)可經(jīng)由使用滾珠絲桿裝置的腱而被驅動。
[0025]與機器人12相比,多軸機器人14可具有更低的相對復雜性。例如,機器人14可僅相對于三個軸G、H和I移動,和/或其可相對于固定的或移動的基底17旋轉。這種機器人通常用在工業(yè)中,以執(zhí)行反復作業(yè)。機器人14的示例用途可包括噴涂應用、焊接、物流/材料處理等。兩個示例機器人12和14旨在說明相對彼此具有十分不同自由度的機器人。實際用作圖1控制網(wǎng)絡10的一部分的機器人12、14的復雜性可隨應用而改變。為了說明的一致性,下文中將使用圖1的簡化的兩個機器人的示例實施例。
[0026]每個機器人12和1 4的任務執(zhí)行經(jīng)由各自的控制模塊21、31直接控制,每個控制模塊相對于RTC13形成較低級別的控制。在執(zhí)行任何命令的任務時,控制模塊21和31產(chǎn)生或接受用于各關節(jié)致動器(例如電機、線性致動器等)的命令輸入或控制基準。盡管每個控制模塊21、31在圖1中顯示為單個計算機裝置,但是控制模塊21、31的各個硬件和軟件元件可相對于受控制的機器人12、14被分配。
[0027]例如,每個關節(jié)可具有以與主電路板(未示出)連通的印刷電路板組件形式的嵌入關節(jié)控制器。不管控制模塊21、31的物理元件如何分配,每個控制模塊21、31包括一個或多個處理器23、33、一個或多個收發(fā)器27、37以及一個或多個有形的非短暫性存儲裝置29、39。同樣地,每個控制模塊21、31可具有如所示的相關用戶界面32、42,向用戶提供訪問機器人12或14的入口。
[0028]就功能性來說,在體現(xiàn)程序碼或腳本的任意塊經(jīng)由腳本引擎20處理之后,每個控制模塊21、31構造成響應于所接收的來自RTC13的任務指令控制機器人12、14的運動。即,每個控制模塊21、31被編程、裝備,和/或以其他方式物理上能夠執(zhí)行用于響應來自RTC13的任務規(guī)劃指令所需的所有必要的控制步驟,而沒有進一步的修改??刂颇K21、31提供對用于機器人12、14的任何動作所需的精細和粗糙移動的精確運動控制。RTC13有效地告知每個控制模塊21、31做什么,而不是精確地如何去做??刂颇K21和31被編程或以其他方式構造成確定如何執(zhí)行由RTC13所分派的頂級任務。
[0029]仍參見圖1,各個控制模塊21、31通過網(wǎng)絡傳輸層^1^)25與1^(:13通信,網(wǎng)絡傳輸層即是在計算機網(wǎng)絡中的特殊層,用于形成數(shù)據(jù)包并將數(shù)據(jù)包輸送到各處理和控制模塊,如本領域中眾所周知的那樣。RTC13支持多網(wǎng)絡數(shù)據(jù)傳輸協(xié)議(例如R0S、Zeix)MQ、TCP/IP、UDP等)以實施NTL25,并易于根據(jù)開發(fā)人員要求通過插件架構可擴展成包括其它協(xié)議,如本領域中所理解的那樣。該能力便于將RTC13與第三方軟件和傳感器(可具有它們本身的特定協(xié)議)集成。此外,本文所公開的RTC13的結構和功能便于快速集成外圍輸入傳感器裝置,比如但并不限于相機、激光測距儀、3D深度傳感器、力/扭矩傳感器、慣性測量單元或加速器等。I/O塊可通過NTL25而易于構造成“聽取”或“訂閱”由這種外圍裝置產(chǎn)生的任何限定類型的傳感器數(shù)據(jù)。
[0030]腳本引擎20的所需功能性包括協(xié)調程序的流(即各個塊如何沿著它們的各個連接件而發(fā)送觸發(fā)事件以開始新塊)、在控制網(wǎng)絡10中的所有計算節(jié)點之間的數(shù)據(jù)流和到達控制模塊21、31的參考命令序列。硬件可包括有形的非短暫性存儲器(M)、處理器P和收發(fā)器(T)以及用于執(zhí)行圖4所示和下述的方法100所必需的記錄指令。額外的硬件可包括上述的A/D、D/A和I/O電路,以及任何其它所需的硬件和軟件。
[0031]由于具有控制模塊21、31,RTC13的各腳本引擎20可經(jīng)由一個或多個計算機或數(shù)據(jù)處理裝置執(zhí)行,每個計算機或數(shù)據(jù)處理裝置均具有一個或多個處理器(P)、有形的非短暫性存儲器(M)以及隨機存儲器(RAM)和電可擦只讀存儲器(EEPR0M),有形的非短暫性存儲器比如是只讀存儲器(ROM)、光學存儲器、快閃存儲器等。腳本引擎20的各硬件可包括高速時鐘、模數(shù)(A/D)電路、數(shù)模(D/A)電路以及任何所需的輸入/輸出(I/O)電路和裝置,以及信號調節(jié)和緩沖電子裝置。
[0032]RTC13為在圖1的網(wǎng)絡10內開發(fā)、診斷和配置新機器人應用提供了可擴展的編程環(huán)境。這種應用可由通過NTL25連接到RTC13的任何機器人或傳感器使用,不管是高自由度的機器人12還是相對低自由度的機器人14,以及處于兩者之間的任意機器人。RTC13提供了解釋性編程環(huán)境,其是既不需要也不使用對計算機可執(zhí)行代碼編譯的環(huán)境。在該環(huán)境中,用戶可易于從中央庫(即,“代碼庫塊”)中將現(xiàn)有的任務規(guī)劃腳本塊“拖放”進新應用中,和/或創(chuàng)建新任務序列塊以解決不斷變化的需求和新硬件。下面參考圖2說明此概念。
[0033]參見圖2,圖1中示意性示出的RTC13便于在控制的任務規(guī)劃階段進行程序開發(fā)。盡管為了清楚起見線性地示出,但是單個事件也可同時觸發(fā)多個塊,從而開始并發(fā)/并行處理管線。然而,為了說明的一致性,本文中將描述線性序列。
[0034]RTC13的用戶可從任何計算機裝置中加載其上可用的⑶122,并使用文本編輯器41寫入源代碼141。在可能的實施例中,可使用Python編程語言(例如Python3.3.0或以后的版本)、Lua或其它腳本語言寫入源代碼141。Python和Lua是非常適合應用開發(fā)和任務原型化的解釋性編程語言的兩個非限制性示例,這些解釋性編程語言可在各種平臺上運行,包括 Windows、Linux/Unix、Mac OS X、OS/2 和 Amiga。
[0035]應由用在替代實施例中的任何其它腳本語言共享的Python和Lua的特征包括清楚、可讀的語法和程序代碼的自然表示。與非腳本語言(比如C++)不同的是,這種代碼不需要編譯和鏈接步驟。雖然在不脫離預期的發(fā)明范圍的情況下可經(jīng)由文本編輯器41使用其它解釋性編程語言,但是類似的能力將會便于RTC13的有效使用。圖2的示例流程圖包括一些基本的說明性塊,包括1/0連接和狀態(tài)識別符。每個塊代表用于機器人12或14的特定任務或功能的解釋性程序。剩下未定義的,即“抽象”,是捆綁在特定1/0連接中的特定硬件。僅定義了腳本必須輸入或輸出的數(shù)據(jù)類型,例如關節(jié)速度、關節(jié)位置、RGBD圖像等。
[0036]通過圖1的⑶122,用戶由此寫入和/或選擇代碼庫塊44,并將它們放到⑶122的編程屏幕中。點擊單獨塊可打開GUI22中的窗口,以顯示信息或菜單,例如顯示可選擇的各腳本引擎20的標簽(“設定”標簽)、用戶可設定用于當前任務序列中腳本特定情況的可修改參數(shù)(“參數(shù)”標簽)等。因此,當用戶在文本編輯器41中寫入新腳本時,存在代碼“鉤子”,其允許用戶創(chuàng)建具有這樣值的新代碼變量,也就是該值得以順應,直到用戶將這些變量的值限定在較高級別應用即任務序列塊52中。當腳本塊的新情況被拖放在新任務序列塊52中時,這些變量隨著可編輯的文本窗口一起顯示。然后,用戶可修改這些變量的值,使得用戶設定的值在執(zhí)行期間被解譯。
[0037]經(jīng)由文本編輯器41寫入的源代碼41的單獨腳本(每個描述某一頂級任務的一個或多個步驟)可存儲在GUI22內的存儲器的中央庫(作為代碼庫塊44)中,每個代碼庫塊44在圖1系統(tǒng)10內的給定計算節(jié)點下提供底層編程代碼的視覺表示。每個代碼庫塊44可具有隨機數(shù)量的輸入連接46和輸出連接48,這些輸入連接和輸出連接分別到達或來自其它庫塊以及第三方應用。這些連接在配置期間捕捉進入、離開和位于應用中的塊44之間的數(shù)據(jù)流路徑。相應輸入和輸出連接46和48的實際數(shù)量可改變,為了便于說明,每種顯示為一個。輸入連接46形成引入數(shù)據(jù)的指針,例如來自作為硬件元件連接至圖1機器人12或14之一的相機或閱讀關節(jié)位置的傳感器的彩色圖像。類似地,輸出連接48是處理輸出數(shù)據(jù)的指針,例如相同圖像的黑白處理版本,或者使用相同示例的相應關節(jié)命令。因此,圖1的RTC13限定了用于給定代碼庫塊44的各種輸入和輸出的類型,而不是源。
[0038]在由圖1RTC13提供的IDE中,如上面所提到,VPL環(huán)境可用于“拖放”現(xiàn)有的代碼庫塊44進入到期望的任務序列中。任務序列又可存儲在圖1存儲器(M)內的庫中。圖2示出了簡化的示例,如箭頭J所指示,代碼庫塊44被“拖放”在另一窗口中,以形成具有其它代碼庫塊144和244的任務序列。與代碼庫塊44類似,其它代碼庫塊144和244中的每個均可具有一組輸入和輸出連接。這些顯示為用于相應代碼庫塊144和244的輸入連接146、246和輸出連接148、248。
[0039]給定序列中的多個相應的輸入和/或輸出連接46和/或48可鏈接在一起,并暴露于“較高級別”的任務序列塊52中。為了簡化起見,類似于連接46和48的I/O連接在任務序列塊52上未示出,因為當發(fā)生這種暴露時,它們駐留在RTC GUI22中。例如,如果不同的輸出連接46、146都指向或連接到相同的圖像數(shù)據(jù),則輸出連接46和146會通過參數(shù)化任務序列塊52中具有相同名稱的這些連接而鏈接在一起。為了可由給定的腳本引擎20執(zhí)行,所有任務序列塊52必須具有開始和停止狀態(tài),以作為應用或者作為較高級別應用中的子任務運行時指示序列52的程序流的入口和出口點。任務序列具有開始狀態(tài)(O)和結束狀態(tài)(I)。在代碼庫塊44、144、244的一些或所有之間,傳感器數(shù)據(jù)50可接收和用于該序列中的下一代碼庫塊的執(zhí)行中,這再次可以是線性或非線性的,例如具有一個或多個步驟的可能并發(fā)或并行執(zhí)行。
[0040]如圖2的箭頭K所指示,整個任務序列可存儲在⑶122的存儲器內的中央庫中或者作為任務序列塊52的另一可訪問的位置中。結果,在創(chuàng)建其它任務序列時,任務序列塊52可通過將任務序列塊52拖放進VPL窗口(例如圖1所示的⑶122的)中并寫入額外的代碼庫塊和/或拖放現(xiàn)有的代碼庫塊而再次使用。VPL窗口內的一個工作可點擊任務序列塊52,以打開底層結構,其可包括額外的任務序列塊52和/或代碼庫塊44。因此,在配置期間,當用戶在給定序列塊上按⑶122的“播放”時,序列的所有塊通過NTL25下載至一個或多個指定的腳本引擎20,加載到腳本引擎的局部存儲器M中。
[0041]點擊任何類型的給定代碼庫塊會導致文本編輯器41打開,使得用戶可看見底層代碼141。人們可在程序開發(fā)期間使用圖2的文本編輯器41,以使給定代碼庫塊44或任務序列塊52的特定狀態(tài)與例如顏色(比如綠色、黃色或紅色)相關聯(lián)。經(jīng)由⑶122,人們可以再后來在運行時觀察每個塊44或52的狀態(tài),并可點擊給定的塊44、52,從而“深入”到任務序列的下一級別,并實時觀察應用層次的子塊的狀態(tài)。
[0042]最初,中央庫可駐留在⑶122的側面。即,任何預存在的代碼庫塊44可存儲在GUI22從其中運行的任何計算機上的目錄中,并經(jīng)由圖1所示的文件瀏覽器B觀察。任何新創(chuàng)建的代碼庫塊44還可保存到相同的目錄。因為人們可在不同于執(zhí)行底層腳本的各腳本引擎20的物理裝置上運行⑶122,所以按“播放”以經(jīng)由⑶122開始給定的任務序列導致通過NTL25將所有相關的代碼庫塊44下載到所需的腳本引擎20,其中塊44可存儲在構成每個腳本引擎20的物理計算機裝置的局部存儲器(M)中。
[0043]然后,具有最頂級塊或“開始”塊的任何腳本引擎20再次通過NTL25發(fā)出觸發(fā)命令到圖1控制網(wǎng)絡10中的所有腳本引擎20。如果任何通知的腳本引擎20已加載在序列中連接到“開始”塊的代碼庫塊44,則那些特定的腳本引擎20開始執(zhí)行那些塊44等。對于每個代碼庫塊44,在配置用于自定義其它抽象的任務程序(單獨代碼庫塊44的全部創(chuàng)建)之前,I/O連接有效地變成唯一需要的插件,以便由特定的機器人12或14使用(見圖1)。
[0044]為了再次訪問上述點,所有代碼庫塊44在RTC13的級別下保持抽象,同時任務序列塊52可以或者不用保持抽象。任何類型的“抽象”塊不易于可由第三方硬件和軟件使用。因此,RTC13和/或通過圖1的NTL25連接到RTC13的控制模塊21、31必須采取額外的步驟來渲染這些在控制模塊21、31的級別下可使用的抽象塊。下面參考圖3說明該方法。
[0045]參見圖3,示出了示例任務規(guī)劃圖70,使用其中僅采用一個機器人的簡化系統(tǒng)(在該示例中是機器人12)。添加額外的機器人和額外的腳本引擎20不會改變本方法,但是會添加額外的計算節(jié)點。為了簡化起見,僅示出了一個腳本引擎20,但是如下面參考圖4所說明的,可在各實施例中使用任何數(shù)量的腳本引擎20。GUI22可用于拖放必要的代碼庫塊,用于創(chuàng)建任務或任務序列,如上面參考圖2所說明。雙頭箭頭65表示到GUI22和腳本引擎20的信息以及來自GUI22和腳本引擎20的信息的雙向流動。
[0046]給定任務序列的創(chuàng)建,尤其是在VPL環(huán)境中,有效地創(chuàng)建了有限狀態(tài)機器。盡管為了簡化起見示出了單個狀態(tài)機器及因此一個計算節(jié)點,但是可使用更多節(jié)點,每個節(jié)點經(jīng)由NTL25連通。如本文中所使用的有限狀態(tài)機器是這樣的任何裝置,其存儲一狀態(tài),并可操作輸入以改變該狀態(tài),和/或針對任何給定的改變導致動作或輸出發(fā)生。
[0047]每個腳本引擎20在整個NTL25上與機器人12通信,而不管機器人所使用的特定操作系統(tǒng)或計算引擎。機器人12的不同硬件裝置用于執(zhí)行給定的任務。例如,機器人12可使用3D相機(未示出)來觀察如圖1所示的物體11,準備抓住物體11。接近度、力和/或其它傳感器可用作執(zhí)行抓住物體11或不同裝置的控制邏輯的一部分。來自機器人12的各硬件裝置的數(shù)據(jù)通過NTL25傳輸?shù)侥_本引擎20。在任何硬件元件輸出值之后,數(shù)據(jù)必須被“發(fā)布”到網(wǎng)絡,如在本領域中該術語是眾所周知的那樣,使得通過NTL25通信的任何網(wǎng)絡裝置或者其它腳本引擎20可訪問該數(shù)據(jù)。
[0048]因此,每個硬件模塊可包括相應的解譯器塊(IB)60、62,它們解譯原始數(shù)據(jù)并將其發(fā)布到網(wǎng)絡。解譯器塊60、62充當傳感處理節(jié)點。解譯器塊60、62可使用獨立的軟件包,比如但不限于由開源機器人技術基礎(OSRF)維持的開源機器人操作系統(tǒng)(ROS),即用于通過NTL25在各種硬件模塊和機器人12之間通信的開源協(xié)議,允許標準的信息傳遞協(xié)議和數(shù)據(jù)類型以及各種代碼庫或模塊(可處理傳感器數(shù)據(jù)或計算機器人行為規(guī)劃)。即,ROS提供標準的網(wǎng)絡協(xié)議以及操作系統(tǒng)服務,比如硬件抽象、裝置驅動器、庫、消息傳遞、打包管理、硬件抽象和低級別裝置控制,如本領域中眾所周知的那樣。在本文中,雖然ROS的消息傳遞協(xié)議可用于通過NTL25訪問I/O數(shù)據(jù),但是可使用其它第三方網(wǎng)絡庫,比如來自iMatix公司的 ZeroMQ。
[0049]參見圖4,示出了在分布式環(huán)境內用于任務規(guī)劃的方法100,比如在圖1的控制網(wǎng)絡10內。在步驟102開始,RTC13初始化,從而建立或驗證與被控制的機器人的網(wǎng)絡連接。然后,方法100進行到步驟104。
[0050]步驟104例如通過點擊在⑶122窗口內顯示的圖標使得訪問中央庫,該中央庫可存在于體現(xiàn)或托管GUI22的任何計算機裝置的存儲器內。然后,方法100進行到步驟106。
[0051]在步驟106,用戶確定代碼庫塊44是否存在于用于規(guī)劃的特定任務的中央庫中。如果沒有,則方法100進行到步驟108。然而,如果足夠的代碼庫塊44存在于中央庫中,則方法100代替進行到步驟112。
[0052]在步驟108,用戶可經(jīng)由⑶122打開編程窗口,并開始寫入適合于任務的給定步驟的編程代碼,例如Python或Lua代碼。在步驟110,任務的每一步驟可在中央庫中存儲為新的代碼庫塊44或任務序列塊52。一旦所有必要的代碼被寫入或拖放時,則方法100從步驟110進行到步驟112。
[0053]在步驟112,用戶經(jīng)由⑶122打開VPL窗口,并拖放開發(fā)的代碼庫塊44,以創(chuàng)建期望的任務序列。該寬度代碼庫塊44、144和244的簡化版本顯示在圖2中,并如上所述。在步驟114,一個或多個任務序列塊52可以該方式創(chuàng)建,并且通過使用與期望的任務所需的一樣多的鏈接代碼庫塊44而存儲在中央庫中。
[0054]步驟116包括經(jīng)由輸入塊46給代碼庫塊44分配I/O裝置,輸入塊如上所述形成引入數(shù)據(jù)的指針。還作為步驟116的一部分,可分配輸出塊48。因此,RTC13在步驟116中用于定義每個代碼庫塊44的輸入和輸出的類型。作為該步驟的一部分,在配置之前,用戶可選擇是否“重新綁定”1/0連接,以指向數(shù)據(jù)流中的不同源或目標。例如,人們可通過點擊輸入塊46或輸出塊48而重新綁定,輸入塊或輸出塊可顯示分別與特定塊的代碼中的變量相關的文本,同時會呈現(xiàn)具有文本區(qū)域的對話窗口,其允許用戶鍵入特定的目標或源,即數(shù)據(jù)的指針,如上所述,比如通過在一個運行控制范圍內鍵入“l(fā)eft_eye_camera_rgb_image”,或者在另一個運行控制范圍內鍵入“right_eye_camera_rgb_image”。
[0055]一旦這個完成,則在步驟118中執(zhí)行任務,該步驟包括下載代碼塊44或52到所需的圖1腳本引擎20。該步驟的一部分可包括使用戶選擇特定的腳本引擎20來分派,或者步驟118可簡單地默認為一個或多個腳本引擎20。在步驟118中,腳本引擎20解譯底層編程代碼,通過NTL25傳輸任何I/O數(shù)據(jù),并處理任務序列與相關代碼庫塊44之間的任何轉換。
[0056]此外,當圖1的腳本引擎20 “分布”在同一附圖的整個控制網(wǎng)絡10中時,希望分配整個應用給單個腳本引擎20的用戶可以這樣做。類似地,如果用戶希望在不同腳本引擎20上執(zhí)行每個單獨代碼庫塊44和/或任務序列塊52,則用戶也可這樣做,或者這些示例極限之間的范圍的任何事情。如上所述,圖1中所示的和上面詳細所述的RTC13的關鍵特征在于,RTC13將處理任何及所有任務序列的程序流,即使在每個塊44或52分布在圖1的整個控制網(wǎng)絡10中的情況下也是如此。不同腳本引擎20之間的程序流通過NTL25而得到處理。因此,作為圖1所示的流的一部分,用戶可分配特定的塊44或52給具體的腳本引擎20,以優(yōu)化處理效率并且平衡計算負載。
[0057]最后在步驟118中,任何所需的較低級別控制器,例如圖1的控制模塊21、31,根據(jù)腳本引擎20所解譯的任務代碼而被命令采取一些動作,比如移動一個或多個關節(jié)和/或末端效應器。一旦接收到任務,則控制模塊21、31隨后根據(jù)來自RTC13的任務視需要而定來控制各關節(jié)電機和/或其它關節(jié)致動器移動。
[0058]盡管詳細描述了實施本發(fā)明的最佳模式,但是熟悉與本發(fā)明相關的領域的人要認識到的是,實施本發(fā)明的各種替代設計和實施例應在所附權利要求的范圍內。
【權利要求】
1.一種系統(tǒng),包括: 機器人,具有控制模塊,其中,所述控制模塊構造成響應于所接收的任務序列控制所述機器人的運動;以及 機器人任務指揮器(RTC),通過網(wǎng)絡傳輸層(NTL)與所述控制模塊網(wǎng)絡通信,并具有: 至少一個腳本引擎; 處理器; 有形的非短暫性存儲器;以及 圖形用戶界面(GUI),具有文本編輯器和文件瀏覽器,其中,所述CTI構造成提供訪問所述文本編輯器的入口,并且經(jīng)由所述文件瀏覽器,到達所述存儲器中的代碼庫塊的中央庫,每個代碼庫塊使用所述文本編輯器由解釋性語言計算機編程代碼構成,且每個代碼庫塊具有給所需輸入和輸出數(shù)據(jù)形成指針的輸入和輸出塊,并提供可視化程序設計語言(VPL)工具和所述文本編輯器; 其中,所述系統(tǒng)構造成經(jīng)由所述至少一個腳本引擎和處理器執(zhí)行來自所述存儲器的指令,從而打開所述VPL工具,通過使用所存儲的代碼庫塊中的至少一些來創(chuàng)建并存儲用于所述機器人的任務序列,通過識別用于每個庫代碼塊的所需輸入和輸出數(shù)據(jù)將數(shù)據(jù)分配給輸入和輸出連接,并 通過NTL將任務序列傳輸?shù)剿隹刂颇K。
2.如權利要求1所述的系統(tǒng),其中,所述RTC在任務序列運行時經(jīng)由所述GUI而顯示機器人的狀態(tài)及遙測數(shù)據(jù)的在線反饋,從而能夠實時診斷任務序列的執(zhí)行。
3.如權利要求1所述的系統(tǒng),其中,所述輸入和輸出連接僅是用于自定義由所述機器人執(zhí)行的任務序列的插件。
4.如權利要求1所述的系統(tǒng),其中,所述機器人包括具有達6個自由度的第一機器人和具有至少42個自由度的第二機器人。
5.如權利要求1所述的系統(tǒng),其中,所述解釋性語言是Python和Lua編程語言之一。
6.如權利要求1所述的系統(tǒng),其中,所述機器人包括具有解譯器塊的硬件元件,所述解譯器塊解譯來自所述硬件元件的原始數(shù)據(jù),并將所解譯的原始數(shù)據(jù)通過NTL而發(fā)布到網(wǎng)絡,并且其中,所述RTC與解譯器塊通過NTL通信。
7.一種方法,包括: 通過網(wǎng)絡傳輸層(NTL)來將機器人任務指揮器(RTC)置于與機器人的控制模塊網(wǎng)絡通信,其中,所述RTC包括至少一個腳本引擎和圖形用戶界面(GUI),所述圖形用戶界面具有文本編輯器和文件瀏覽器; 經(jīng)由所述⑶I來開發(fā)任務序列,包括: 打開可視化程序設計語言(VPL)環(huán)境和所述文本編輯器; 通過使用解釋性語言計算機編程代碼經(jīng)由所述文本編輯器來構造一組代碼庫塊; 將來自多個所構造的代碼庫塊中的任務序列存儲在存儲器中,其中,每個代碼庫塊包括相應的輸入和輸出連接; 通過識別用于形成任務序列的每個庫代碼塊的所需輸入和輸出數(shù)據(jù)來將數(shù)據(jù)分配給所述輸入和輸出連接;以及 將所存儲的任務序列通過NTL傳輸給至少一個腳本引擎; 經(jīng)由所述至少一個腳本引擎來處理所存儲的任務序列;以及響應于所處理的任務序列經(jīng)由所述控制模塊來控制所述機器人的運動。
8.如權利要求7所述的方法,還包括:經(jīng)由所述GUI來顯示機器人在運行時的狀態(tài)和遙測數(shù)據(jù)。
9.如權利要求7所述的方法,還包括:1/0連接僅是用于自定義由機器人執(zhí)行的任務序列的插件。
10.如權利要求7所述的方法,其中,所述機器人包括具有達6個自由度和第一控制模塊的第一機器人以及具有至少42個自由度和第二控制模塊的第二機器人,并且其中,將所存儲的任務序列傳輸給所述控制模塊包括將不同的所存儲的任務序列傳輸給所述第一和第二控制模塊中的每個。
11.如權利要求7所述的方法,其中,所述機器人包括具有解譯器塊的硬件元件,還包括: 經(jīng)由所述解譯器塊解譯來自所述硬件元件的原始數(shù)據(jù);以及 將原始數(shù)據(jù)通過NTL發(fā)布 到網(wǎng)絡。
【文檔編號】G05B19/418GK104049573SQ201310613292
【公開日】2014年9月17日 申請日期:2013年11月27日 優(yōu)先權日:2013年3月14日
【發(fā)明者】S.W.哈特, J.D.亞莫科斯基, B.J.懷特曼, D.P.戴恩, D.R.古丁 申請人:通用汽車環(huán)球科技運作有限責任公司, 美國國家航空和宇宙航行局