專利名稱:在多機(jī)器人系統(tǒng)中自動(dòng)防止死鎖的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及用于控制多個(gè)機(jī)器人的系統(tǒng),以及用于控制針對(duì)多個(gè)機(jī)器人的運(yùn)動(dòng)干擾避免的方法。
背景技術(shù):
物體在空間中的移動(dòng)為典型制造環(huán)境中的必要任務(wù)。越來(lái)越多地使用機(jī)器人來(lái)實(shí)現(xiàn)必要的移動(dòng)。但是,當(dāng)多個(gè)物體正在移動(dòng)時(shí),在這些物體之間會(huì)存在潛在的干擾。如果至少兩個(gè)物體同時(shí)共享同一空間,例如當(dāng)這些物體關(guān)于公用參照系具有相同坐標(biāo)時(shí),就會(huì)存在干擾。隨著現(xiàn)代工業(yè)機(jī)器人以相當(dāng)高的速率移動(dòng),機(jī)器人之間的干擾可導(dǎo)致碰撞,并對(duì)機(jī)器人和由機(jī)器人操作的工作件產(chǎn)生不希望的損壞。碰撞可導(dǎo)致制造過(guò)程中的昂貴的停機(jī)時(shí)間。因此,期望避免這樣的碰撞。現(xiàn)有技術(shù)的系統(tǒng)和方法已被用于試圖最小化干擾和碰撞。但是,現(xiàn)有技術(shù)的系統(tǒng)和方法存在一些不足。典型地,僅僅關(guān)于預(yù)定的干擾區(qū)域或“靜態(tài)空間”對(duì)工具中心點(diǎn)(TCP)進(jìn)行檢查。針對(duì)多個(gè)機(jī)器人,難以直接或有效地防止其干擾或碰撞。并且,難以關(guān)于多個(gè)移動(dòng)機(jī)器人的靜態(tài)坐標(biāo)系來(lái)指定干擾空間。任何干擾空間都不僅是機(jī)器人運(yùn)動(dòng)路徑的函數(shù),而且還是運(yùn)動(dòng)速度的函數(shù)。在試圖處理當(dāng)兩個(gè)或更多個(gè)機(jī)器人請(qǐng)求同時(shí)移動(dòng)到公用空間時(shí)的死鎖情況時(shí),也存在困難?,F(xiàn)有技術(shù)系統(tǒng)還試圖防止機(jī)器人的TCP在關(guān)于其世界坐標(biāo)系的固定空間中發(fā)生碰撞。當(dāng)(具有多個(gè)控制器的)多個(gè)機(jī)器人在任務(wù)執(zhí)行期間共享公用或“干擾”空間時(shí),每個(gè)控制器必須等待直到?jīng)]有機(jī)器人在公用空間中為止。然后控制器可以接下來(lái)發(fā)出運(yùn)動(dòng)控制指令,以允許機(jī)器人移動(dòng)。該過(guò)程也被稱為“等待和移動(dòng)”過(guò)程,其通常會(huì)增加工作循環(huán)時(shí)間。但是,難以有效地根據(jù)固定坐標(biāo)系指定干擾空間,因?yàn)楦蓴_空間不僅是機(jī)器人運(yùn)動(dòng)路徑的函數(shù)而且還是運(yùn)動(dòng)速度的函數(shù)。當(dāng)多于一個(gè)機(jī)器人請(qǐng)求同時(shí)移動(dòng)到公用空間時(shí),它會(huì)產(chǎn)生死鎖情況,在這種情況下沒(méi)有一個(gè)機(jī)器人可以移動(dòng),因?yàn)樗鼈兌荚诒舜说却,F(xiàn)有技術(shù)系統(tǒng)還試圖用球體和圓柱體來(lái)對(duì)機(jī)器人建模。這些系統(tǒng)在移動(dòng)過(guò)程中實(shí)時(shí)地預(yù)測(cè)機(jī)器人的未來(lái)位置。因?yàn)檫@些系統(tǒng)并不確定機(jī)器人在一段時(shí)間所占用的累計(jì)空間,因此這些系統(tǒng)必須在機(jī)器人運(yùn)動(dòng)期間經(jīng)常性地執(zhí)行比較。這些系統(tǒng)對(duì)工作間內(nèi)的所有機(jī)器人的模型進(jìn)行逐個(gè)元件地比較。這種比較在計(jì)算上非常昂貴,并且隨著機(jī)器人以及用于建模機(jī)器人和加工的元件的數(shù)量增加花費(fèi)將以指數(shù)方式增長(zhǎng)。因?yàn)楸容^是實(shí)時(shí)進(jìn)行的,所以當(dāng)檢測(cè)到即將發(fā)生碰撞時(shí),這些系統(tǒng)通常必須停止涉及即將發(fā)生碰撞的所有機(jī)器人,且自動(dòng)編程操作必須終止。當(dāng)機(jī)器人屬于不同的控制器時(shí),這些系統(tǒng)變得更加困難,因?yàn)樗鼈冃枰诳刂破髦g進(jìn)行實(shí)時(shí)傳送的大量的信息?,F(xiàn)有技術(shù)系統(tǒng)還試圖利用I/o握手機(jī)制以避免干擾。在本發(fā)明中,無(wú)需使用I/o PLC0一個(gè)已知系統(tǒng)和方法公開(kāi)在受讓人的共同未決國(guó)際申請(qǐng)?zhí)朠CT/US2007/066638中,通過(guò)引用將其整體結(jié)合在此。該系統(tǒng)和方法包括“動(dòng)態(tài)空間檢查”系統(tǒng),其中對(duì)機(jī)器人操作的效率最大化,并使得多個(gè)機(jī)器人的干擾或碰撞的可能性被最小化。由每個(gè)控制器控制的機(jī)器人僅在用戶定義的動(dòng)態(tài)空間中工作,由此避免碰撞。但是,動(dòng)態(tài)空間檢查系統(tǒng)通常僅保護(hù)TCP不進(jìn)入用戶定義的用直線圍著的空間。另一用于避免機(jī)器人碰撞的已知方法報(bào)告在Pollack等人的美國(guó)專利號(hào)5,150,452中。該方法包括創(chuàng)建包含期望機(jī)器人移動(dòng)的碰撞地圖。通過(guò)以逐個(gè)字節(jié)地方式將機(jī)器人地圖和世界地圖以邏輯異或操作結(jié)合起來(lái),以及其后將碰撞地圖和世界地圖以邏輯異或操作結(jié)合,后面是將碰撞地圖和世界地圖以邏輯或操作結(jié)合起來(lái),將期望機(jī)器人的初始位置從“世界”地圖移除。碰撞由或和異或結(jié)合的任何比特位置上的差異來(lái)指示。該 方法提供了二維x_y投影和一維高度上的碰撞檢測(cè),但是不允許三維、實(shí)時(shí)的碰撞檢測(cè)。用于在機(jī)器人和一個(gè)或多個(gè)障礙物之間的碰撞發(fā)生之前檢測(cè)該碰撞的另一已知方法在Greenspan等的美國(guó)專利號(hào)5,347,459中描述。該機(jī)器人由體素化工作空間中的球體建模。工作空間中的每個(gè)體素被指定一個(gè)值,該值對(duì)應(yīng)于其與最近障礙物的距離。如果球體中心的體素值在體素上小于其它球體的半徑,那么確定即將發(fā)生碰撞。但是該方法僅僅保護(hù)了單個(gè)機(jī)器人臂。該機(jī)器人也僅由球體建模,因此致使對(duì)機(jī)器人的關(guān)鍵過(guò)程路徑的保護(hù)不充分。存在對(duì)一種控制針對(duì)多個(gè)機(jī)器人的運(yùn)動(dòng)干擾避免的方法和系統(tǒng)的持續(xù)需要。期望該系統(tǒng)和方法提供三維和實(shí)時(shí)的碰撞檢測(cè)、事先與機(jī)器人系統(tǒng)進(jìn)行機(jī)器人運(yùn)動(dòng)通信、預(yù)定無(wú)碰撞的編程軌跡、并保護(hù)關(guān)鍵過(guò)程路徑。當(dāng)程序或任務(wù)處于下述這樣一種狀態(tài)時(shí)將發(fā)生死鎖的情形任何程序或任務(wù)的連續(xù)順序執(zhí)行都將導(dǎo)致在與該程序或任務(wù)有關(guān)的一個(gè)或多個(gè)機(jī)器人之間產(chǎn)生干擾并且沒(méi)有程序或任務(wù)可以在沒(méi)有干擾的情況下以順序方式被處理。Chaffee等人的美國(guó)專利號(hào)7,114,157描述了一種通過(guò)以設(shè)定順序獲取資源的避免死鎖方法。雖然該方法可以避免死鎖,但是如果所設(shè)定的無(wú)死鎖順序還未被確定,則其無(wú)法提供允許操作的能力。另外,如果所請(qǐng)求的順序在規(guī)定的無(wú)死鎖順序之外,則它不允許可能是無(wú)死鎖的操作。Chang等人的美國(guó)專利申請(qǐng)公開(kāi)號(hào)2009/0326711描述了一種自動(dòng)或手動(dòng)地利用自動(dòng)區(qū)(zone)避免死鎖的方法。Chang提議使用優(yōu)先級(jí)值來(lái)防止死鎖的方法。Chang不提議在不使用優(yōu)先級(jí)值的情況下防止死鎖的方法。
發(fā)明內(nèi)容
與該即時(shí)公開(kāi)一致地,驚人地公開(kāi)了一種控制針對(duì)多個(gè)機(jī)器人的運(yùn)動(dòng)干擾避免的系統(tǒng)和方法,其中該系統(tǒng)和方法在不使用I/o握手機(jī)制的情況下,提供了三維和實(shí)時(shí)的碰撞檢測(cè)、事先與機(jī)器人系統(tǒng)的機(jī)器人運(yùn)動(dòng)通信、無(wú)碰撞編程軌跡的預(yù)定、以及關(guān)鍵過(guò)程路徑的保護(hù)。在一個(gè)實(shí)施例中,提供防止具有公用工作空間的機(jī)器人對(duì)死鎖的方法,每個(gè)機(jī)器人由相關(guān)程序控制,其中當(dāng)程序并發(fā)地執(zhí)行時(shí),每個(gè)機(jī)器人在該相關(guān)程序的執(zhí)行的一部分期間,占用該公用工作空間的至少一部分,所述方法包括以下步驟在程序并發(fā)執(zhí)行期間,識(shí)別出被機(jī)器人所占用的公用空間的部分;識(shí)別出至少一個(gè)干擾區(qū)域,在該干擾區(qū)域中公用工作空間的部分重疊;分析所述至少一個(gè)干擾區(qū)域并識(shí)別出會(huì)在哪里出現(xiàn)兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況;以及通過(guò)在執(zhí)行導(dǎo)致至少一個(gè)死鎖狀況的任何機(jī)器人運(yùn)動(dòng)之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,而在程序執(zhí)行期間避免所述至少一個(gè)死鎖狀況。在進(jìn)一步的實(shí)施例中,提供一種計(jì)算機(jī)可讀介質(zhì),其包含可由計(jì)算機(jī)執(zhí)行以施行防止具有公用工作空間的機(jī)器人對(duì)死鎖的方法的指令,每個(gè)機(jī)器人由相關(guān)程序控制,其中,當(dāng)程序被并發(fā)執(zhí)行時(shí),每個(gè)機(jī)器人在所述相關(guān)程序的執(zhí)行的一部分期間占用公用工作空間的至少一部分,所述方法包括在程序并發(fā)執(zhí)行期間,識(shí)別出被機(jī)器人占用的公用空間的部分的指令;識(shí)別出至少一個(gè)干擾區(qū)域的指令,在該干擾區(qū)域中所述公用工作空間的部分重 疊;分析至少一個(gè)干擾區(qū)域并識(shí)別出兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況會(huì)出現(xiàn)在哪里的指令;以及通過(guò)在導(dǎo)致至少一個(gè)死鎖狀況的任何機(jī)器人運(yùn)動(dòng)的執(zhí)行之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,而在程序執(zhí)行期間避免所述至少一個(gè)死鎖狀況的指令。在另一實(shí)施例中,一種防止具有公用工作空間的多個(gè)機(jī)器人死鎖的方法,每個(gè)機(jī)器人由相關(guān)程序所控制,其中,當(dāng)所述程序并發(fā)執(zhí)行時(shí),每個(gè)機(jī)器人在所述相關(guān)程序的的執(zhí)行一部分期間占用公用工作空間的至少一部分,所述方法包括以下步驟在程序并發(fā)執(zhí)行期間,識(shí)別出被機(jī)器人所占用的公用空間的部分;識(shí)別出至少一個(gè)干擾區(qū)域,在該干擾區(qū)域中針對(duì)至少兩個(gè)機(jī)器人的公用工作空間的部分重疊;分析至少一個(gè)干擾區(qū)域并識(shí)別出至少兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況會(huì)出現(xiàn)在哪里;以及通過(guò)在導(dǎo)致至少一個(gè)死鎖狀況的至少兩個(gè)機(jī)器人的任何運(yùn)動(dòng)的執(zhí)行之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,而在程序執(zhí)行期間避免所述至少一個(gè)死鎖狀況。根據(jù)本發(fā)明的系統(tǒng)和方法無(wú)需事前知曉無(wú)死鎖序列。該系統(tǒng)和方法將自動(dòng)地確定潛在的死鎖狀況,并識(shí)別出避免這些狀況的方法。該系統(tǒng)和方法不需要優(yōu)先級(jí)值來(lái)防止死鎖。該系統(tǒng)和方法防止了干擾狀況,并同時(shí)防止了死鎖狀況存在的可能性。
當(dāng)根據(jù)附圖考慮時(shí),從下面優(yōu)選實(shí)施例的詳細(xì)描繪中,以上所述的以及本發(fā)明的其它優(yōu)點(diǎn)對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)將變得容易顯而易見(jiàn),其中圖I示意了根據(jù)本公開(kāi)的示例性機(jī)器人系統(tǒng),其具有在工作間中操作的第一機(jī)器人和第二機(jī)器人;圖2是描繪根據(jù)本公開(kāi)的干擾檢查自動(dòng)區(qū)方法的過(guò)程流程圖;圖3示意了在圖I中描繪的第一機(jī)器人和第二機(jī)器人的其中一個(gè)的體素化模型;圖4是在圖3中描繪的體素化模型的等距視圖;圖5示意了在圖I中描繪的第一機(jī)器人和第二機(jī)器人的其中一個(gè)的放大視圖,其具有由重疊在第一機(jī)器人和第二機(jī)器人的其中一個(gè)之上的體素化球體和圓柱體形成的體素化模型;
圖6示意了在圖5中描繪的由多個(gè)體素形成的體素化球體和體素化圓柱體;圖7示意了根據(jù)本發(fā)明的無(wú)死鎖矩陣和相關(guān)的程序列表;圖8示意了根據(jù)本發(fā)明的干擾矩陣和相關(guān)的程序列表;圖9示意了將多個(gè)死鎖區(qū)域結(jié)合為單個(gè)無(wú)死鎖區(qū)域的路徑和相關(guān)表格;圖10示意了根據(jù)本發(fā)明的不具有和具有死鎖預(yù)防的幾個(gè)機(jī)器人程序執(zhí)行序列;圖11是根據(jù)本發(fā)明的死鎖避免序列的流程圖;以及圖12是根據(jù)本發(fā)明用于確定潛在死鎖區(qū)域的流程圖。
具體實(shí)施方式
以下描繪本質(zhì)上僅為示例性,并不意圖限制本公開(kāi)、應(yīng)用或使用。應(yīng)當(dāng)理解的是,貫穿附圖,相應(yīng)的參考數(shù)字同樣指代相似的或相應(yīng)的部件和特征。關(guān)于所公開(kāi)的方法,所提出的步驟本質(zhì)上僅為示例性,并且因此,并非必要或關(guān)鍵。圖I是示意控制多個(gè)機(jī)器人之間的碰撞避免的機(jī)器人系統(tǒng)2的示意圖。作為非限制性的示例,機(jī)器人系統(tǒng)2可以是具有至少兩個(gè)機(jī)器人的車(chē)身修理廠機(jī)器人系統(tǒng)、噴水切割機(jī)器人系統(tǒng)、激光焊接機(jī)器人系統(tǒng)、電弧焊接機(jī)器人系統(tǒng)、以及涂漆機(jī)器人系統(tǒng)中的一個(gè)。也可根據(jù)需要,采用其他的具有多個(gè)機(jī)器人的機(jī)器人系統(tǒng)2。 機(jī)器人系統(tǒng)2包括工作間4,其限定了第一機(jī)器人6和第二機(jī)器人8被配置為在其中進(jìn)行操作的包封。第一機(jī)器人6和第二機(jī)器人8被配置為選擇性地占用設(shè)置在工作間4中的至少一個(gè)公用空間10。雖然只示例了第一機(jī)器人6和第二機(jī)器人8,但應(yīng)當(dāng)認(rèn)識(shí)到,機(jī)器人系統(tǒng)2可具有多于兩個(gè)機(jī)器人,而不會(huì)背離本公開(kāi)的范圍和精神。第一機(jī)器人6可在第一機(jī)器人6沿著第一編程路徑移動(dòng)期間占用公用空間10的第一部分12。第二機(jī)器人8可在第二機(jī)器人8沿著第二編程路徑移動(dòng)期間占用公用空間10的第二部分14。第一和第二部分12、14同樣被稱為“自動(dòng)區(qū)”或“自動(dòng)區(qū)域”。每個(gè)編程路徑包括一個(gè)或多個(gè)自動(dòng)區(qū),并且每個(gè)自動(dòng)區(qū)被預(yù)處理并且從一個(gè)或多個(gè)運(yùn)動(dòng)語(yǔ)句中得至IJ。例如,第一和第二編程路徑可由在具有多個(gè)運(yùn)動(dòng)語(yǔ)句的指令序列中的一個(gè)或多個(gè)運(yùn)動(dòng)語(yǔ)句控制。技術(shù)人員應(yīng)當(dāng)理解的是,第一和第二部分12、14可能重疊,因此產(chǎn)生在不使用控制第一和第二機(jī)器人6、8運(yùn)動(dòng)的干擾避免方法的情況下發(fā)生機(jī)器人碰撞的可能性。第一和第二機(jī)器人6、8由至少一個(gè)控制器16、18控制。在圖I所示的實(shí)施例中,第一機(jī)器人6被第一控制器16控制,并且第二機(jī)器人8被第二控制器18控制。該至少一個(gè)控制器16、18適用于與電功率的源(未示出)進(jìn)行電通信。控制器16、18可以執(zhí)行駐留在控制器16、18內(nèi)的指令序列,例如計(jì)算機(jī)程序。在其他的實(shí)施例中,指令序列可以駐留在與控制器16、18通信的計(jì)算機(jī)可讀介質(zhì)或存儲(chǔ)器上。機(jī)器人系統(tǒng)2可進(jìn)一步包括本領(lǐng)域已知的其他組件,例如被配置為連接各種系統(tǒng)組件的網(wǎng)絡(luò)媒體(未示出)、可編程邏輯設(shè)備(未示出)、以及與至少一個(gè)控制器16、18進(jìn)行電通信的教示設(shè)備20中的至少一個(gè)。在一個(gè)特定實(shí)施例中,教示設(shè)備20可包括監(jiān)視器,并被配置為圖形化地表示第一機(jī)器人6、第二機(jī)器人8、公用空間10的第一部分12、以及公用空間10的第二部分14,以便機(jī)器人系統(tǒng)2的操作者根據(jù)需要進(jìn)行觀看。教示設(shè)備20可包括用于發(fā)起指令序列以輕推機(jī)器人的裝置。根據(jù)本公開(kāi)的示例性指令序列在圖2中示出。該指令序列包括干擾檢查自動(dòng)區(qū)方法200。干擾檢查自動(dòng)區(qū)方法200首先包括初始步驟202,其在工作間4中提供至少一個(gè)公用空間10。初始步驟202之后是第一確定步驟204以及第二確定步驟206。第一確定步驟204包括確定在第一機(jī)器人6沿著第一編程路徑移動(dòng)的期間占用的公用空間10的第一部分12。第二確定步驟206包括確定在第二機(jī)器人8沿著第二編程路徑移動(dòng)的期間占用的公用空間10的第二部分14。應(yīng)當(dāng)認(rèn)識(shí)到,第一和第二部分12、14可自動(dòng)地確定,即,沒(méi)有必要如本領(lǐng)域所已知的那樣,使用戶指定每個(gè)機(jī)器人的操作區(qū)。第一部分12和第二部分14然后在比較步驟208中進(jìn)行比較,以確定在它們之間是否存在重疊210。作為非限制性的示例,第一和第二確定步驟204、206可以在具有第一和第二機(jī)器人6、8的機(jī)器人系統(tǒng)2的初始操作期間基本上實(shí)時(shí)地實(shí)施。該初始操作可在禁閉(lockdown)模式下對(duì)第一和第二機(jī)器人6、8實(shí)施,以避免其任何潛在的碰撞。在另一不例中,第一和第二確定步驟204、206可通過(guò)執(zhí)行第一和第二編程路徑的離線運(yùn)行來(lái)實(shí)施,例如,以識(shí)別出可能由機(jī)器人6、8在實(shí)時(shí)操作期間所占用的公用空間10的第一和第二部分12、14。例如在第一和第二確定步驟204、206期間識(shí)別的第一和第二部分12、14可進(jìn)一步保留在存儲(chǔ)器上,并且第一和第二機(jī)器人6、8在后續(xù)操作期間重新使用。應(yīng)當(dāng)理解的是,機(jī) 器人運(yùn)動(dòng)的編程路徑或軌跡從而被預(yù)處理并且被保留,以防止其碰撞的發(fā)生。響應(yīng)于重疊210的存在,選擇第一和第二機(jī)器人6、8的第一和第二移動(dòng)步驟212、214。如果在第一部分12和第二部分14之間存在重疊210,則相信機(jī)器人6、8很可能發(fā)生碰撞,并選擇第一移動(dòng)步驟212。第一移動(dòng)步驟212包括第一機(jī)器人6沿著第一編程路徑和第二機(jī)器人8沿著第二編程路徑中的僅一個(gè)移動(dòng)。如果在第一部分12和第二部分14之間不存在重疊210,那么相信機(jī)器人6、8不可能發(fā)生碰撞,并選擇第二移動(dòng)步驟214。第二移動(dòng)步驟214包括使第一機(jī)器人6沿著第一編程路徑移動(dòng)并且使得第二機(jī)器人8沿著第二編程路徑移動(dòng)。第一和第二確定步驟204、206可由本領(lǐng)域已知的任何措施實(shí)施。在根據(jù)本公開(kāi)的一個(gè)特定實(shí)施例中,第一和第二確定步驟204、206可包括用具有至少一個(gè)體素302的至少一個(gè)體素模型300表示公用空間10、第一部分12和第二部分14中的至少一個(gè)的步驟,例如在圖3至6中示例示出的那樣。體素302為表示三維空間中的規(guī)則網(wǎng)格上的值的體積元素。例如,比較步驟208可包括確定在表示第一部分12的第一體素模型300和表示第二部分14的第二體素模型300之間是否存在重疊210。體素模型300通常由多個(gè)體素302表示,其逼近各種組件的形狀,例如,第一和第二機(jī)器人6、8的基底、臂、以及工具。參考圖3和4,示例性的體素模型300可包括在沿X軸、Y軸和Z軸的坐標(biāo)處設(shè)置的多個(gè)體素。體素模型300被配置為描繪由第一機(jī)器人6和第二機(jī)器人8的至少一個(gè)所占用的公用空間10的三維體積。體素模型300可以例如是控制器16、18或別的計(jì)算機(jī)可讀介質(zhì)或存儲(chǔ)器產(chǎn)生和保存到控制器16、18或別的計(jì)算機(jī)可讀介質(zhì)或存儲(chǔ)器的數(shù)據(jù)文件的形式。在某些實(shí)施例中,體素模型300是動(dòng)態(tài)的,并包括與機(jī)器人移動(dòng)序列相關(guān)的多個(gè)體素模型300。動(dòng)態(tài)體素模型300可用于描繪在第一機(jī)器人6和第二機(jī)器人8中的至少一個(gè)的移動(dòng)期間所占用的公用空間10的三維體積。每個(gè)自動(dòng)區(qū)從體素模型300的多個(gè)快照的累積/疊印得到,以一個(gè)或多個(gè)ITP間隔來(lái)獲得每個(gè)快照?,F(xiàn)在參考圖5至6,第一和第二機(jī)器人6、8的體素模型300可包括至少一個(gè)體素化球體500和體素化圓柱體502,以表不由第一和第二機(jī)器人6、8所占用的三維體積。如此處進(jìn)一步描述的那樣,體素化球體500和體素化圓柱體502可表示各種組件,例如第一和第二機(jī)器人6、8的基底和臂。體素化球體和圓柱體500、502通常包括相對(duì)彼此設(shè)置為逼近第一和第二機(jī)器人6、8的常規(guī)形狀和邊界的多個(gè)體素302。本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解的是,體素化球體500和圓柱體502可由任何適當(dāng)?shù)拇胧┊a(chǎn)生。例如,體素化球體500可通過(guò)首先將表示機(jī)器人6、8組件的示例性球體投影在X-Y平面上來(lái)逼近。然后識(shí)別出包圍該球體的最小的圓柱體“A”。然后相同的球體被投影至Y-Z平面上,并識(shí)別出包圍該球體的最小的圓柱體“B”。相同的球體然后被投影至Z-X平面上,并且識(shí)別出包圍該球體的最小圓柱體C”。然后,通過(guò)識(shí)別出圓柱體和“C”的交集來(lái)逼近體素化球體500。在另一實(shí)施例中,通過(guò)首先找到包圍表示機(jī)器人6、8組件的球體的最小立方體(box)來(lái)逼近體素化球體500。該立方體具有體積占用“A”。然后識(shí)別出在立方體“A”內(nèi)并在球體之外的體素體積占用“B”。然后通過(guò)從體積“A”中減去體積“B”來(lái)逼近體素化球體500。
備選地,可以通過(guò)識(shí)別出示例性球體和X-Y平面的交集來(lái)逼近體素化球體500。該交集包括沿著Z軸的球體中心,并形成相交的圓形板“Al”。該圓形板“Al”被指定任意高度,并且隨后識(shí)別該交叉的圓形板“Al”的體素占用。進(jìn)一步,通過(guò)將示例性球體和X-Y平面的交集沿著Z軸移位來(lái)定位圓形板“A2”、“A3”. . . “A (η) ”,并且類似地識(shí)別出其體積占用。然后通過(guò)將針對(duì)示例性球體的圓形板所識(shí)別的每個(gè)體素占用進(jìn)行合并來(lái)逼近該體素化球體500。通過(guò)識(shí)別出左半球/整個(gè)球體的體素占用“Α”,識(shí)別出右半球/整個(gè)球體的體素占用“B”,以及識(shí)別出在左半球和右半球之間的多個(gè)圓形板的體素占用“C”,來(lái)逼近體素化圓柱體502。然后創(chuàng)建垂直于基底線的基底圓形板。該基底線連接在圓柱體的端部的兩個(gè)半球。隨后的圓形板可以通過(guò)沿著Z軸移位基底圓形板來(lái)得到。備選地,可以計(jì)算基底線的體素占用,并且隨后移位基底線,以填充兩個(gè)半球之間的整個(gè)區(qū)域。隨后,通過(guò)合并每個(gè)體素占用“Α”、“B”和“C”來(lái)逼近體素化圓柱體502?!N用于逼近體素化圓柱體502的備選方法包括,首先識(shí)別出能夠包圍表不機(jī)器人組件的示例性圓柱體的最小立方體。該立方體具有體積占用“Α”。然后識(shí)別出位于立方體之內(nèi)并在該圓柱體之外的體素體積占用“B”。隨后,通過(guò)用體素體積占用“Α”減去體素占用“B”來(lái)逼近體素化圓柱體502。本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解,可以根據(jù)需要采用適用于逼近表示機(jī)器人6、8組件的體素化球體500和圓柱體502的其他措施。體素化還可以從可表示機(jī)器人、臂裝飾物、以及加工的任何任意CAD表面或體積類似地確定。體素化是一種非常有效的用于表示由機(jī)器人運(yùn)動(dòng)部分占用的空間的方法。體素化過(guò)程具有一些計(jì)算開(kāi)銷(xiāo)來(lái)創(chuàng)建體素化空間,但是運(yùn)行時(shí)間組件是非常有效的。一旦空間被體素化,不論運(yùn)動(dòng)路徑期間由機(jī)器人所占用的公用空間多復(fù)雜或多大,體素化空間的最大存儲(chǔ)需求是固定的。對(duì)體素化空間之間干擾的運(yùn)行時(shí)間檢查是非常有效的。雖然優(yōu)選實(shí)施例提供了由體素化區(qū)域表示的干擾檢查自動(dòng)區(qū),但是可以使用任何一種對(duì)機(jī)器人在運(yùn)動(dòng)路徑期間所占用的空間的體積或表面表示的方法。進(jìn)一步的實(shí)施例在編程運(yùn)動(dòng)、由輕推發(fā)起的運(yùn)動(dòng),或者由其它裝置發(fā)起的運(yùn)動(dòng)期間避免碰撞。它們還可保護(hù)移動(dòng)機(jī)器人免受與工作間中的固定機(jī)器人或其他固定物體或其他指定區(qū)域進(jìn)行碰撞。針對(duì)編程運(yùn)動(dòng),該體素化過(guò)程、或其它干擾檢查自動(dòng)區(qū)建模過(guò)程可以在離線期間或在測(cè)試運(yùn)行期間發(fā)生,并且體素化數(shù)據(jù)被有效地存儲(chǔ)以便于后續(xù)的檢索。當(dāng)如從新程序、機(jī)器人輕推或從由其它裝置發(fā)起的運(yùn)動(dòng)確定一個(gè)新的運(yùn)動(dòng)路徑時(shí),該過(guò)程還可實(shí)時(shí)地發(fā)生。在這些情況下,指令序列可通過(guò)使用教示設(shè)備或發(fā)起運(yùn)動(dòng)的其他裝置來(lái)確定。不允許開(kāi)始實(shí)際運(yùn)動(dòng)直到該過(guò)程完成為止,并且與該干擾檢查自動(dòng)區(qū)和其它占用的干擾檢查自動(dòng)區(qū)沒(méi)有干擾。在進(jìn)一步的實(shí)施例中,公用空間10的第一部分12和第二部分14中的至少一個(gè)可包括加工空間和由附接在第一機(jī)器人6和第二機(jī)器人8中的至少一個(gè)的工具所占用的裝飾物組件(例如ArcTool送絲器)。確定重疊210的步驟還可包括,將第一部分12和第二部分14的至少一個(gè)與由非機(jī)器人障礙物(未示出)所占用的公用空間10的第三部分進(jìn)行比較。該障礙物可以根據(jù)需要由用于定義公用空間10的尺寸、形狀和位置的參數(shù)集合來(lái)手動(dòng)指定。在另一示例中,方法200可進(jìn)一步包括確定由障礙物占用的公用空間10的第三部分的步驟。應(yīng)當(dāng)理解的是,由非機(jī)器人障礙物占用的公用空間的第三部分也可以根據(jù)需要由類似的體素模型300中的體素302表示。 本公開(kāi)的方法200可進(jìn)一步包括第一機(jī)器人6已經(jīng)沿著第一編程路徑移動(dòng)和第二機(jī)器人8已經(jīng)沿著第二編程路徑移動(dòng)的至少一種情況之后確定公用空間10的非占用部分的步驟。公用空間10的非占用部分然后可以根據(jù)需要被釋放給順著另外編程路徑或軌跡的另一機(jī)器人使用。在進(jìn)一步的實(shí)施例中,方法200可包括將公用空間10的第一部分12和第二部分14的坐標(biāo)傳送給至少一個(gè)控制器16、18以進(jìn)一步根據(jù)本公開(kāi)的方法200來(lái)使用的步驟??刂破?6、18然后可以如此處所述被采用來(lái)實(shí)施第一和第二確定步驟204、206中的至少一個(gè),并將該坐標(biāo)轉(zhuǎn)換為表示第一和第二部分12、14的體素模型300。技術(shù)人員應(yīng)當(dāng)意識(shí)到,一旦確定在公用空間10的第一和第二部分12、14之間是否存在重疊,第一機(jī)器人6和第二機(jī)器人8的各自移動(dòng)可由優(yōu)先級(jí)值來(lái)確定。作為非限制性的不例,第一和第二機(jī)器人6、8的優(yōu)先級(jí)值可基于先進(jìn)先出系統(tǒng)。在另一不例中,第一和第二機(jī)器人6、8中的一個(gè)可以總是具有比第一和第二機(jī)器人6、8中的另一個(gè)更高的優(yōu)先級(jí)值。該更高的優(yōu)先級(jí)值可以基于針對(duì)機(jī)器人系統(tǒng)2中機(jī)器人6、8的優(yōu)先級(jí)的預(yù)定用戶設(shè)置。在進(jìn)一步的示例中,優(yōu)先級(jí)值可基于公用空間10中非占用部分的可用性來(lái)選擇。技術(shù)人員可以根據(jù)需要向第一和第二機(jī)器人6、8指定期望的優(yōu)先級(jí)值。在進(jìn)一步的實(shí)施例中,方法200進(jìn)一步包括針對(duì)可能導(dǎo)致死鎖狀況的重疊210的存在而分析多個(gè)編程路徑的步驟。隨后可根據(jù)需要調(diào)整多個(gè)編程路徑的操作序列,以防止死鎖狀況的發(fā)生。操作序列可以手動(dòng)或自動(dòng)地調(diào)整,例如,根據(jù)需要,基于優(yōu)先級(jí)值進(jìn)行。應(yīng)當(dāng)意識(shí)到的是,本公開(kāi)的干擾檢查自動(dòng)區(qū)系統(tǒng)2和方法200有利地提供了優(yōu)于傳統(tǒng)多臂機(jī)器人系統(tǒng)的競(jìng)爭(zhēng)性優(yōu)勢(shì)。系統(tǒng)2和方法200提供了三維且實(shí)時(shí)的碰撞避免。系統(tǒng)2對(duì)編程的需求最小,因?yàn)橄到y(tǒng)2避免對(duì)指定或教示干擾區(qū)的需要。產(chǎn)品的停機(jī)時(shí)間也因此被減少。本領(lǐng)域普通技術(shù)人員還應(yīng)當(dāng)意識(shí)到,體素化球體500和圓柱體502的使用最小化了通常與產(chǎn)生機(jī)器人模型典型相關(guān)的處理需求。第一和第二機(jī)器人6、8的移動(dòng)事先與系統(tǒng)2進(jìn)行通信,例如,通過(guò)離線產(chǎn)生體素模型300。同樣地,保留無(wú)碰撞的第一和第二機(jī)器人6、8的編程路徑或軌跡。處理路徑為在應(yīng)用過(guò)程(例如切割、焊接、碾磨、布線、噴漆、分發(fā)、或別的類似過(guò)程)發(fā)生期間的運(yùn)動(dòng)序列。一旦過(guò)程路徑啟動(dòng),就在沒(méi)有中斷的情況下完成整個(gè)過(guò)程路徑,這通常是重要的。還應(yīng)當(dāng)意識(shí)到第一和第二機(jī)器人6、8的關(guān)鍵過(guò)程路徑也根據(jù)本方法200被同樣地保護(hù)。根據(jù)需要,系統(tǒng)2支持在相同控制器16、18內(nèi)和越過(guò)多個(gè)控制器16、18的多機(jī)器人臂碰撞避免。系統(tǒng)2和方法200進(jìn)一步提供了簡(jiǎn)化的機(jī)器人配置和防止對(duì)如使用如某些現(xiàn)有技術(shù)系統(tǒng)和方法所實(shí)施的I/O握手協(xié)議的需要。干擾檢查自動(dòng)區(qū)系統(tǒng)2和方法200簡(jiǎn)化了多臂干擾檢查的配置,并防止多機(jī)器人臂死鎖。干擾預(yù)防和死鎖預(yù)防緊密相關(guān)。干擾發(fā)生在當(dāng)兩個(gè)機(jī)器人試圖占用相同的物理空間時(shí)。干擾防止的一個(gè)方法包括檢查正在或?qū)⒈凰袡C(jī)器人在當(dāng)前運(yùn)動(dòng)指令中占用的空間,并在干擾發(fā)生之前使一個(gè)或多個(gè)機(jī)器人停止。這種類型的干擾防止具有一個(gè)主要缺陷,即在一個(gè)或多個(gè)已停止的機(jī)器人當(dāng)前占用另一機(jī)器人所需要或?qū)⑿枰目臻g時(shí),非常容易發(fā)生死鎖,并且該已停止的機(jī)器人不能繼續(xù),因?yàn)槠淅^續(xù)被另一機(jī)器人阻擋。 另一干擾防止方法是通過(guò)在機(jī)器人程序中程序化地插入進(jìn)入和退出區(qū)命令而手動(dòng)建立干擾區(qū)。這些命令可以提供與PLC或其他機(jī)器人的通信,以便促使每次只允許一個(gè)機(jī)器人臂占用指定區(qū)。對(duì)于單個(gè)區(qū),存在較少關(guān)注。主要問(wèn)題可能是優(yōu)先級(jí);如果區(qū)在變成可用時(shí)被多個(gè)機(jī)器人等待則誰(shuí)可首先得到該區(qū)中的一個(gè)。但是,針對(duì)多個(gè)區(qū),很容易發(fā)生死鎖。例如,如果每個(gè)機(jī)器人當(dāng)前占用一個(gè)區(qū)并且下一個(gè)運(yùn)動(dòng)處于由其它機(jī)器人占用的區(qū)中,則容易尋求鄰近區(qū)。在此情況下,每個(gè)機(jī)器人將永久等待其它機(jī)器人放棄期望的區(qū)。死鎖狀況將發(fā)生。根據(jù)本發(fā)明的系統(tǒng)和方法通過(guò)在執(zhí)行具有潛在死鎖狀況的運(yùn)動(dòng)之前確定無(wú)死鎖運(yùn)動(dòng)語(yǔ)句來(lái)消除以上情形中的死鎖狀況。無(wú)死鎖運(yùn)動(dòng)語(yǔ)句的該確定可以離線進(jìn)行、在正常執(zhí)行之外進(jìn)行,或它在正常產(chǎn)生執(zhí)行期間進(jìn)行。如果有充足的CPU處理時(shí)間可用,那么在正常產(chǎn)生執(zhí)行期間的確定提供了響應(yīng)于動(dòng)態(tài)狀況的最大靈活度,例如I/o時(shí)序或外部事件或序列的時(shí)序上的變化。為使得CPU影響最小,該確定可以離線地進(jìn)行,其中能夠分析編程序列的多個(gè)排列并找到最優(yōu)執(zhí)行序列。根據(jù)本發(fā)明的系統(tǒng)和方法無(wú)需事先知曉無(wú)死鎖序列。該系統(tǒng)和方法將自動(dòng)地確定潛在的死鎖狀況并識(shí)別出避免這些狀況的方式。該系統(tǒng)和方法不需要優(yōu)先級(jí)值來(lái)防止死鎖。該系統(tǒng)和方法防止干擾狀況并同時(shí)防止存在死鎖狀況的可能性。在圖7中所示的是針對(duì)將由第一機(jī)器人運(yùn)行的“原始程序A”列表401和將由第二機(jī)器人運(yùn)行的“原始程序B”列表403的行號(hào)(line numbers)的“無(wú)死鎖矩陣”400。矩陣400中的陰影單元表示了定義無(wú)死鎖區(qū)域的上升(ascending)凸殼。大部分陰影單元表示了從一個(gè)程序的行“i-Ι”至行“i”和在另一程序中從行“j-Ι”至行“j”的路徑上的行進(jìn)期間具有干擾的程序行對(duì)。需要剩下的單元來(lái)完成該上升凸殼。在矩陣400中的單元可被指定為(i,j)的格式,其中“i”為程序“A”行號(hào)并且“j”為程序“B”行號(hào)。因此,干擾單元為(3,6 ;3,7 ;4,5 ;4,6 ;4,7 ;5,4 ;5,5 ;5,6 ;5,7)并且剩下的單元為(3,4 ;3,5 ;4,4)。例如,如果程序“A”在行3上并且程序“B”在行5上,則存在死鎖狀況,因?yàn)槿绻癆”試圖移動(dòng)到行4,則將與行5上的“B”產(chǎn)生干擾,并且如果“B”試圖移動(dòng)到行6,那么將與行3上的“A”產(chǎn)生干擾。因此,沒(méi)有機(jī)器人可以繼續(xù)。通過(guò)完成從“A”的行3至5和“B”的行4至7的死鎖區(qū),每次只有一個(gè)程序“A”或“B”能夠占用該區(qū)。這在示為“新程序A”列表402和“新程序B”列表404的示例程序中識(shí)別為區(qū)[I]。圖8示出了一個(gè)示例,其中“干擾矩陣”405可被再分為三個(gè)無(wú)死鎖區(qū)區(qū)[I];區(qū);和區(qū)[3]。該干擾單元為(3,3 ;3,4 ;3,5 ;3,6 ;3,7 ;4,5 ;4,6 ;4,7 ;5,4 ;5,5 ;5,6 ;5,7 ;6,6 ;6,7)。區(qū)[I]包括單元(3,3 ;3,4 ;3,5 ;3,6 ;3,7),區(qū)[2]包括單元(4,5 ;4,6,4,7 ;5,4 ;5,5 ;5,6 ;5,7),并且區(qū)[3]包括單元(6,6 ;6,7)。上升凸殼通過(guò)作為虛擬干擾的單元(4,4)而創(chuàng)建,以使得可以產(chǎn)生三個(gè)上升凸殼,并且總區(qū)域以上升方式凸出。這三個(gè)區(qū)然后被合并至“新程序A”列表406和“新程序B”列表407中。不會(huì)存在下面這種情況,即在任何無(wú)干擾行對(duì)組合中,至少一個(gè)程序可在不產(chǎn)生干擾的情況下前進(jìn)到下一行。
圖9示出了具有多個(gè)干擾區(qū)域以及可能存在死鎖的兩個(gè)死鎖區(qū)域的程序?qū)Φ氖纠??!俺绦駻”描繪從行3至行15的路徑409?!俺绦駼”410描繪從行9至行21的路徑。程序具有第一死鎖區(qū)域412和第二死鎖區(qū)域411,如在路徑和表413中所示出的那樣。制作單個(gè)死鎖區(qū)域的簡(jiǎn)單方法是將所有的干擾區(qū)域和中間無(wú)干擾區(qū)域結(jié)合至如表414所示的單個(gè)區(qū)域中,該區(qū)域本質(zhì)上將是無(wú)死鎖的。圖10示出了分別運(yùn)行“程序A”和“程序B”的機(jī)器人6、8的五個(gè)序列。在最左側(cè)的第一序列中,機(jī)器人6運(yùn)行“程序A”,機(jī)器人8不移動(dòng)。在其右側(cè)的下一序列中,機(jī)器人8運(yùn)行“程序B”,機(jī)器人6不移動(dòng)。在中間序列中,機(jī)器人6、8并發(fā)地運(yùn)行各自的程序并且發(fā)生了碰撞。其右側(cè)的下一序列中,示出機(jī)器人6、8利用引起死鎖的現(xiàn)有技術(shù)的干擾避免特征并發(fā)地運(yùn)行各自程序。在最右側(cè)的序列示出了機(jī)器人6、8利用根據(jù)本發(fā)明的死鎖防止并發(fā)地運(yùn)行各自程序,使得在不發(fā)生干擾的情況下完成了兩個(gè)程序。以上描述的系統(tǒng)和方法將自動(dòng)地添加和/或修改程序語(yǔ)句,以防止碰撞和管理潛在的死鎖二者。在某些情況中,所發(fā)出的自動(dòng)等待命令可能會(huì)使得針對(duì)給定任務(wù)的整個(gè)循環(huán)時(shí)間增加。在不能接受增加的循環(huán)時(shí)間的情況下,根據(jù)本發(fā)明的系統(tǒng)和方法可以推薦或自動(dòng)創(chuàng)建重新排序的路徑,這將使得機(jī)器人可以運(yùn)行整個(gè)程序而不停止。換句話說(shuō),如果存在兩個(gè)機(jī)器人將同時(shí)占用相同空間的路徑部分,則該系統(tǒng)和方法將自動(dòng)地推薦一條新的路徑序列(設(shè)想以不同的順序焊接點(diǎn)),從而可以消除這種情況。程序指令的重新排序的該特征具有用于油漆店應(yīng)用的潛力。如果在程序中發(fā)生條件化執(zhí)行語(yǔ)句,那么分析可包括序列執(zhí)行的所有組合。或者,為簡(jiǎn)單起見(jiàn),包含在條件化分支區(qū)域中的程序片段可獨(dú)立處理。典型地,機(jī)器人程序員將教示這樣的條件化區(qū)域,以使得該區(qū)域的進(jìn)入和退出路徑與其它機(jī)器人沒(méi)有干擾,并且以使得所述獨(dú)立處理是可行的。但是,如果條件化區(qū)域的進(jìn)入或退出路徑與其他機(jī)器人有干擾,則應(yīng)當(dāng)分析條件化區(qū)域和非條件化區(qū)域的多個(gè)組合以保證無(wú)干擾并且無(wú)死鎖。該方法的一個(gè)優(yōu)勢(shì)在于,可消除死鎖狀況的相同機(jī)制也可消除在正常程序運(yùn)動(dòng)期間的干擾。因此,在正常程序運(yùn)動(dòng)期間可以不對(duì)機(jī)器人-機(jī)器人干擾進(jìn)行實(shí)時(shí)檢查。這可以節(jié)約大量的CPU利用率,從而允許處理時(shí)間能用于其它目的,諸如更快的內(nèi)插率或更短的內(nèi)插時(shí)間。在誤差狀況期間或當(dāng)程序未運(yùn)行時(shí),一種減少使用CPU的干擾檢查(諸如在序列號(hào) 12/124,430、題為 “Multi-Arm Robot System Interference Check via ThreeDimensional Automatic Zones”的共同未決美國(guó)專利申請(qǐng)中提出的)可用于防止干擾。由程序所占用的空間可以為物理空間、時(shí)間、程序序列、行號(hào)、程序或行的完成率、或與機(jī)器人、程序或系統(tǒng)有關(guān)的狀態(tài)變化的函數(shù)。該干擾區(qū)域和死鎖區(qū)域通過(guò)定義占用空間的相同函數(shù)關(guān)聯(lián)起來(lái)。避免死鎖的方法可以以多種方式處理。最簡(jiǎn)單的方式是擴(kuò)大干擾區(qū)域,以使得它們可以防止如圖9中所示的死鎖和干擾。擴(kuò)大干擾區(qū)域以使得對(duì)于整個(gè)程序僅存在一個(gè)干擾區(qū)域?qū)⒈WC系統(tǒng)不會(huì)死鎖,但是如果循環(huán)時(shí)間是重要的,那么可使用某些類別的序列控制和/或多個(gè)干擾區(qū)域。另一種方式是提供干擾區(qū)域之外的執(zhí)行序列,以使得死鎖被防止。這可以通過(guò)使得第一機(jī)器人在該第一機(jī)器人繼續(xù)之前等待第二機(jī)器人完成可能存在死鎖狀況的程序執(zhí)行的某些部分來(lái)簡(jiǎn)單地進(jìn)行。存在確定占用空間幾種方式。最簡(jiǎn)單的方式是占用空間純粹是機(jī)器人貫穿程序執(zhí)行的過(guò)程中所占用的累積空間。當(dāng)多個(gè)機(jī)器人具有以此方式來(lái)確定的其占用空間時(shí),則干擾區(qū)域可以簡(jiǎn)單地是作為每個(gè)機(jī)器人的累積占用空間的交集的空間。每次只允許一個(gè)機(jī)器人進(jìn)入該空間將防止干擾和死鎖二者。
另一種方式是確定作為時(shí)間的函數(shù)的占用空間。在時(shí)間上的每個(gè)點(diǎn)處,存在由每個(gè)機(jī)器人占用的空間。通過(guò)將占用空間表示為特定間隔上的時(shí)間整合,占用空間可被表示為與時(shí)間有關(guān)的一系列離散空間。該干擾區(qū)域是在相同時(shí)間或時(shí)間間隔的機(jī)器人相交??赏ㄟ^(guò)每次只允許一個(gè)機(jī)器人在干擾區(qū)域中來(lái)避免干擾。因?yàn)橄嚓P(guān)的時(shí)間由于序列控制而變化,所以時(shí)間基礎(chǔ)必須被調(diào)整為在已應(yīng)用序列控制之后與新時(shí)間相關(guān)聯(lián)。針對(duì)以上的基于時(shí)間的方法,所述時(shí)間可以被表示為時(shí)間間隔數(shù)(number)。在此方式中總的經(jīng)過(guò)時(shí)間變得不重要,并且干擾區(qū)域可被表示為間隔數(shù)的矩陣。如果在特定的間隔狀態(tài)存在干擾,那么必須不允許該狀態(tài)出現(xiàn),因?yàn)榭赡軙?huì)在該間隔狀態(tài)中發(fā)生碰撞。類似地,程序序列可被表示為行號(hào)、完成百分比、程序狀態(tài)等等。針對(duì)任何這種序列化表示,可存在作為所選參數(shù)的函數(shù)的所定義的對(duì)干擾的表示。避免干擾的目標(biāo)是避免其中存在干擾的函數(shù)集合的狀態(tài)。對(duì)于可以被表示為序列化的離散間隔或序列化的狀態(tài)的函數(shù),這可被表示為如圖8中示出的干擾矩陣。干擾矩陣包含干擾區(qū)域。當(dāng)然,矩陣僅是表示數(shù)據(jù)的一種方式,但是矩陣可以為更加視覺(jué)化的表示。通常矩陣為稀疏的,因此任何稀疏矩陣技術(shù)也可用于該表示。狀態(tài)定義(例如I/O狀態(tài)或過(guò)程或其它狀態(tài))可被用來(lái)定義區(qū)域。只要該狀態(tài)具有序列化含義或可被定義為表示與機(jī)器人位置和占用空間相關(guān)的序列化活動(dòng),則它們可以被用于干擾和死鎖區(qū)域的參數(shù)表示。一旦干擾矩陣已經(jīng)確定,一種死鎖防止方法就會(huì)避免序列號(hào)單調(diào)增加的任何“陷阱”,其中干擾將阻擋向前序列。通過(guò)使得干擾矩陣上升凸出,避免了死鎖和干擾二者。這種上升凸出干擾矩陣可被稱為死鎖矩陣。該死鎖矩陣包含圖7中所示的死鎖區(qū)域。與干擾相似,該死鎖矩陣僅是表示數(shù)據(jù)的一種方式。一旦死鎖矩陣已被確定,就存在多種避免死鎖和干擾的措施。最簡(jiǎn)單的措施是在程序中插入指令來(lái)調(diào)整執(zhí)行時(shí)序,由此避開(kāi)死鎖矩陣的死鎖區(qū)域。向程序添加指令具有這樣的優(yōu)點(diǎn),即可通過(guò)簡(jiǎn)單地檢查程序來(lái)確定執(zhí)行時(shí)序的確切性質(zhì)。另一種措施允許在實(shí)際程序修改之外確定時(shí)序。干擾和死鎖區(qū)域的參數(shù)定義提供了避免干擾和死鎖的通用方法。對(duì)區(qū)域的該表示允許通過(guò)各種因素來(lái)控制各種程序。
同樣,為了減少CPU使用率,可更新實(shí)際程序以包含區(qū)和序列信息,因此在程序中包含所有用來(lái)避免死鎖狀況的必要信息。這消除了對(duì)程序序列、干擾和潛在的死鎖狀況進(jìn)行實(shí)時(shí)檢查的需要。圖11是根據(jù)本發(fā)明系統(tǒng)和方法的死鎖避免序列的流程圖。在步驟420中,程序被教示給機(jī)器人控制器16、18。在步驟421中,確定占用空間。然后,在步驟422中確定干擾區(qū)域。潛在的死鎖區(qū)域在步驟423中被確定。在步驟424中,確定避免死鎖的程序執(zhí)行需求。最后,在步驟425中提供如以上所述的避免死鎖的機(jī)制。步驟423在圖12中更加詳細(xì)地示出。在步驟426中,存在識(shí)別出的占用空間和所有干擾區(qū)域。在步驟427中,檢查每個(gè)干擾區(qū)域組合。在決策步驟428中進(jìn)行對(duì)“存在死鎖狀況嗎? ”的檢查。如果輸出為“否”,則該步驟423在步驟429中結(jié)束。如果輸出為“是”,則步驟430提供防止死鎖發(fā)生的措施并且該方法返回至步驟427。當(dāng)為了示例該發(fā)明的目的而已經(jīng)示出某些代表性實(shí)施例和細(xì)節(jié)時(shí),進(jìn)行各種變化而不背離該公開(kāi)的范圍,對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)是顯而易見(jiàn)的,這將進(jìn)一步在后面的所 附權(quán)利要求中進(jìn)行描述。
權(quán)利要求
1.一種用于防止具有公用工作空間的機(jī)器人對(duì)死鎖的方法,所述機(jī)器人中的每一個(gè)都被相關(guān)程序控制,其中當(dāng)程序被并發(fā)執(zhí)行時(shí),在相關(guān)程序的執(zhí)行的一部分期間,所述機(jī)器人中的每一個(gè)占用公用工作空間的至少一部分,所述方法包括以下步驟 在程序的并發(fā)執(zhí)行期間,識(shí)別出由機(jī)器人占用的公用工作空間的部分; 識(shí)別出在其中所述公用工作空間的部分重疊的至少一個(gè)干擾區(qū)域; 分析該至少一個(gè)干擾區(qū)域并識(shí)別出會(huì)在何處發(fā)生兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況;以及 通過(guò)在執(zhí)行導(dǎo)致至少一個(gè)死鎖狀況的機(jī)器人的任何運(yùn)動(dòng)之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,在程序的執(zhí)行期間避免至少一個(gè)死鎖狀況。
2.根據(jù)權(quán)利要求I的方法,包括在程序的正常產(chǎn)生執(zhí)行期間施行所述確定和執(zhí)行。
3.根據(jù)權(quán)利要求I的方法,其中所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句被添加到所述程序的至少一個(gè)中。
4.根據(jù)權(quán)利要求I的方法,其中通過(guò)修改所述程序的至少一個(gè)中的至少一條指令來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
5.根據(jù)權(quán)利要求I的方法,其中通過(guò)對(duì)所述程序的至少一個(gè)中的指令重新排序來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
6.根據(jù)權(quán)利要求I的方法,其中通過(guò)控制獨(dú)立于至少一個(gè)程序中的程序指令的各程序中的至少一個(gè)的執(zhí)行來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
7.根據(jù)權(quán)利要求I的方法,包括用體素模型來(lái)表示公用工作空間的被占用部分,并且比較所述各體素模型以識(shí)別出至少一個(gè)干擾區(qū)域。
8.一種計(jì)算機(jī)可讀介質(zhì),其包含能夠由計(jì)算機(jī)執(zhí)行以施行防止具有公用工作空間的機(jī)器人對(duì)死鎖的方法的指令,所述機(jī)器人中的每一個(gè)都由相關(guān)程序控制,其中當(dāng)程序并發(fā)執(zhí)行時(shí),在相關(guān)程序的執(zhí)行的一部分期間,所述機(jī)器人中的每一個(gè)占用公用工作空間的至少一部分,所述方法包括 在程序的并發(fā)執(zhí)行期間,識(shí)別出由機(jī)器人占用的公用工作空間的部分的指令; 識(shí)別出在其中所述公用工作空間的部分重疊的至少一個(gè)干擾區(qū)域的指令; 分析所述至少一個(gè)干擾區(qū)域并識(shí)別出會(huì)在何處發(fā)生兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況的指令;以及 通過(guò)在執(zhí)行導(dǎo)致所述至少一個(gè)死鎖狀況的機(jī)器人的任何運(yùn)動(dòng)之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,在程序的執(zhí)行期間避免所述至少一個(gè)死鎖狀況的指令。
9.根據(jù)權(quán)利要求8所述的方法,包括在程序的正常產(chǎn)生執(zhí)行期間施行所述確定和執(zhí)行的指令。
10.根據(jù)權(quán)利要求8所述的方法,其中所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句被添加到所述程序的至少一個(gè)中。
11.根據(jù)權(quán)利要求8的方法,其中通過(guò)修改所述程序的至少一個(gè)中的至少一條指令來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
12.根據(jù)權(quán)利要求8的方法,其中通過(guò)對(duì)所述程序的至少一個(gè)中的指令重新排序來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
13.根據(jù)權(quán)利要求8的方法,其中通過(guò)控制獨(dú)立于至少一個(gè)程序中的程序指令的各程序的至少一個(gè)的執(zhí)行來(lái)提供所述至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句。
14.根據(jù)權(quán)利要求8的方法,包括用體素模型來(lái)表示公用工作空間的被占用部分以及比較各體素模型以識(shí)別出至少一個(gè)干擾區(qū)域的指令。
15.—種防止具有公用工作空間的多個(gè)機(jī)器人死鎖的方法,所述機(jī)器人中的每一個(gè)都被相關(guān)程序控制,其中當(dāng)所述程序并發(fā)執(zhí)行時(shí),在相關(guān)程序的執(zhí)行的一部分期間,所述機(jī)器人的每一個(gè)都占用公用工作空間的至少一部分,所述方法包括以下步驟 在程序的并發(fā)執(zhí)行期間,識(shí)別出由機(jī)器人占用的公用工作空間的部分; 為至少兩個(gè)機(jī)器人識(shí)別出在其中所述公用工作空間的部分重疊的至少一個(gè)干擾區(qū)域; 分析所述至少一個(gè)干擾區(qū)域并識(shí)別出會(huì)在何處發(fā)生所述至少兩個(gè)機(jī)器人的至少一個(gè)死鎖狀況;以及 通過(guò)在執(zhí)行導(dǎo)致所述至少一個(gè)死鎖狀況的所述至少兩個(gè)機(jī)器人的任何運(yùn)動(dòng)之前自動(dòng)地確定和執(zhí)行至少一個(gè)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句,在程序的執(zhí)行期間避免所述至少一個(gè)死鎖狀況。
全文摘要
本發(fā)明涉及在多機(jī)器人系統(tǒng)中自動(dòng)防止死鎖的方法和系統(tǒng)。一種用于在包含多個(gè)機(jī)器人的工作間中控制避免碰撞和死鎖的系統(tǒng)和方法自動(dòng)地確定潛在的死鎖狀況,并識(shí)別出避免這些狀況的方式。通過(guò)在執(zhí)行具有潛在死鎖狀況的運(yùn)動(dòng)之前確定無(wú)死鎖運(yùn)動(dòng)語(yǔ)句來(lái)消除死鎖狀況。對(duì)無(wú)死鎖運(yùn)動(dòng)語(yǔ)句的確定可以離線、在正常執(zhí)行之外進(jìn)行,或是它可以在正常產(chǎn)生執(zhí)行期間進(jìn)行。如果有充足的CPU處理時(shí)間可用,那么在正常產(chǎn)生執(zhí)行期間的確定提供了響應(yīng)于動(dòng)態(tài)狀況的最大靈活度,例如I/O時(shí)序或外部事件或序列的時(shí)序上的變化。為使得CPU影響最小,該確定可以離線地進(jìn)行,其中能夠分析編程序列的多個(gè)排列并找到最優(yōu)執(zhí)行序列。
文檔編號(hào)B25J9/16GK102814813SQ20121020324
公開(kāi)日2012年12月12日 申請(qǐng)日期2012年5月4日 優(yōu)先權(quán)日2011年5月5日
發(fā)明者H·D·麥吉, 張?zhí)斓? P·斯旺森, 陶建明, 蕭笛, 黃浩祥, 鄭少佳, 蔡啟庚 申請(qǐng)人:范努克機(jī)器人技術(shù)美國(guó)有限公司