轉載:http://www.javashuo.com/article/p-dueuecmk-gd.htmlhtml
參考:實例介紹機械臂運動規劃及前沿研究方向(附PPT+視頻)react
如 果你想要讓機器人能幫你拿瓶子、作飯、收拾屋子等,就必須賦予機器人快速生成無碰撞、最優運動軌跡的能力,這就須要靠運動規劃了。有人以爲運動規劃已經很 成熟了,無需再研究,但實際上,機械臂運動規劃很是難,之因此這麼難,主要是由於規劃問題的維度過高(具體後面分析),目前暫無兼顧實時性與最優性的規劃 算法。算法
咱們能夠從中給運動規劃得出一個定義:編程
在給定環境中,指定機器人起點與終點,計算出鏈接起點與終點,並知足必定約束條件(如避障)的軌跡。網絡
從數學角度上看,移動機器人的路徑規劃( Path Planning )也屬於運動規劃的範疇。但因爲問題的維度不一樣,因此使用的算法也不一樣,你們習慣上將二者區分開。dom
(1)社會老齡化iphone
這是世界銀行發佈的關於中日兩國國內生產總值(GDP)變化曲線圖,小圖是中日兩國的人口結構,能夠看到2000年日本和中國2015年的人口結構 已經很接近了,因此將來中國勞動力數量會減小,咱們必須提升平均勞動生產力,這樣才能防止GDP的增速減緩。機器人是能夠解決這些問題的。編程語言
(2)市場轉變post
傳統工業機器人主要應用在汽車行業,而這個行業的特色是一個車型能夠生產不少年,同時每臺車的利潤也會相較較高,可是從目前來看機器人在汽車行業已 經基本飽和,因此你們的關注點開始轉向3C(Computer、Communication、ConsumerElectronics)行業。學習
3C產品具有這些特色:更新週期短、款式種類多、單件利潤低、總體市場大、勞動力成本增長、對自動化須要加大。
(3)示教
如今咱們工業機器人的使用方法一般是示教,即便像右圖採用拖動示教這種比較便利的方式,效率仍是很低,由於每一臺機器人的示教都須要人蔘與進來,而 且示教的路徑沒辦法應對其餘一些環境的變化,尤爲在3C行業你每次更新一次機型,咱們就必須對流水線上全部的機器人從新示教,這樣的效率確定是不夠高的。
(4)加中間點
固然,目前有些機器人應用是加入了機器視覺等技術,就是在檢測以後讓機器人應對一些變化狀況。左邊碼垛機器人就是經過視覺能夠抓取東西,但它的路徑 是人工指定中間點。右邊是我作過的相似插秧機器人,原理與前面碼垛機器人相似。這類機器人想要在3C行業被靈活運用確定是不行的,因此若是運動規劃研究成 熟算法比較穩定的話,就能夠用高級編程語言去編程,好比咱們的指令讓它抓取零件A而後加工零件B的某一面,這種下達指令的方式就不須要每一步都示教了。
對於規劃器的評價標準,咱們如今有兩個準則:
Optimality(最優性): 路徑最短、規劃速度最快等。
Complete(完備性):在有限時間內解決全部有解問題。
(1)Walk To
(2)優化算法(蟻羣等)
(3)人工勢場
(4)圖搜索算法
(5)可視圖(Visibility Graph)
(6)柵格化(Cell Decomposition)
(7)隨機路圖法
(8)快速擴展隨機樹法
前面咱們講的都是2D點狀機器人的狀況,如今咱們想怎麼把這些問題推廣到實際機器人上。實際機器人有兩個問題,一個是機器人再也不是一個點,須要將機器人的體積考慮在內,另外,機器人的自由度更高,本來的算法是否都還可用?
(1)C空間(理論基礎)
(2)高維度*
(3)人工勢場
(4)PRM 和 RRT
現狀:主要使用 RRT 和 PRM 等 Sampling-based methods;這些算法計算的結果通常須要進行後處理(smoothing等)。
(5)RRT 和 PRM 變種
(6)RRT*
(7)Informed RRT*
Coursera: 賓大 Robotics: Computational Motion Planning (簡單編程)
Choset, Howie M. Principles of robot motion: theory, algorithms, and implementation. MIT press, 2005.
經典論文+編程實現經典算法。
實踐
ROS MoveIt!:http://moveit.ros.org/
容易上手+容易修改
理論現狀是,從運動學規劃角度,給定足夠多的時間必定可以最優且完備地求解到軌跡。從理論的角度而言,這個問題已經解決了。如今研究方向主要在這兩個方面,探索新問題和作一些實用化工做。
(1)新問題
這個算是蠻實用的,由於每次規劃完執行的過程當中會遇到環境變化的問題,這就須要在執行過程當中從新規劃。從新規劃的路線與以前的路線是鏈接的,而不是中間停下來從新走。上面是RSS在2016年的研究,感興趣的能夠了解下。
理想狀態下機器人在運動規劃下直接端一杯水到一個地方就好了,但實際狀況下這個過程是有動力學在裏面,若是不作任何處理,這個杯子會掉。因此,在考慮了動力學以後,從新進行運動規劃,這時候杯子纔不會掉。這個問題仍是比較簡單的,由於你只須要把它變成一個約束就行了。
由於我沒有作這塊東西,因此不太清楚它是怎麼運做的,可是這個問題是存在的,由於在規劃的時候會跟環境接觸,例如這個機器人攀爬杆子而後落地,涉及 到整個身體動力學跟你身體運動的協調過程,這個工做是MIT計算機科學與人工智能實驗室在2014年的實驗。接觸動力學比傳統的單體動力學複雜不少,由於 咱們不知道它接觸的碰撞摩擦力這些很差建模。
運動規劃是指我給你一個大任務,你自動生成一些小任務。這是IROS在2016年的一個工做,它的目標是讓機器人到達對面這個點,而它的路徑被障礙 物擋住了,這個時候把運動規劃加進來,從更高一個空間維度去求解這個問題。第一步,它把這個桌子往前推,發現桌子推不動的時候對任務進行重規劃,而後規劃 到去推這個桌子,而後發現執行的效果與預計的不同,因此它又生成新的任務,而後它拉開桌子以後就走到了對面實現了工做。這只是一個很簡單的demo,但 實際上生活中會遇到不少這樣的問題,好比我想從這個房間到另外一個房間,而門是關着的,這個時候就須要把門打開。因此說,不是要給機器人生成不少子任務,而 是一個大任務,將來服務機器人想要作好這塊是必需要作的。
(2)實用化
另外大部分時間你們都用在了實用化上,雖說只要有足夠時間它必定能求解出來,但實際狀況下咱們不可能給它無限的時間。另外RRT這些算法生成軌跡 很奇怪, 你能夠看右邊這個視頻,只是讓它敲這個東西它要畫一大圈,因此這也是一個問題,就是怎麼優化它的軌跡。因此須要將研究領域好的算法往工業領域推,目前二者 之間是存在很大缺口的。
這個工做是想辦法把舊的軌跡給用起來,經過人工的方式指定一個運動微元,也就是原始軌跡,等到了新的環境後再進行改變。固然,這個爬樓梯的過程,環 境和動做基本上都相同,因此能夠在這個微元的基礎上進行改變。首先,經過變形的工做拉到如今起始點位置,部分起始點會重合,而後對這些新起始點進行重複利 用,它會造成一個好的軌跡。這個工做是Hauser et al在2008年發佈的論文。如今存在的問題是運動微元必須由人工來指定,因此研究方向是由系統自動生成運動微元。
這是以前作的一個內容,比較簡單但在相對固定的環境比較好用。大概原理就是根據人工示教的路徑,經過高斯混合模型(GMM)對可行C空間進行建模, 以後在這個GMM-C空間內進行規劃。這個方法有點相似Learning From Demonstration 的工做,但我只用了它們前面一半的步驟,後面一半仍是採用採樣的方法。
這個是我針對加工過程作的另外一個工做。咱們在工業領域用機器人每每指望的不是整個機械臂的動做,而只是末端的動做。假設我要拋光一個面,首先我要對 末端進行規劃,用CAD模型就能夠計算實現;獲得路徑後發給機器人,以後直接求逆解或者用雅克比迭代過去。固然,這種方法大部分時候夠用,但有時候也會遇 到奇異點或者碰到障礙物。我就是針對這個七軸的機械臂,利用它的一個冗餘自由度進行規劃。由於末端是固定的軌跡,這個時候,只要找到冗餘自由度對應的C空 間流形,咱們就能夠在這麼一個低維(2維)流形內進行很快速的規劃,實現末端固定軌跡,且關節避障避奇異。
我我的如今如今最關注的一塊,目前尚未實質性的東西出來,在這裏就和你們討論下,我以爲這一塊將來會出來很多的研究成果。
假設深度學習作運動規劃,那麼它進行一次運動規劃的時間就是一次網絡正向傳播時間,這個時間很是短的,因此只要網絡訓練好後,運動規劃須要耗費很長 時間的問題就沒有了。目前這塊也有一些這方面的研究,上面左邊圖是用深度學習玩遊戲,Nature上的一篇論文,效果比人還厲害;右上角是谷歌用深度學習 來開門;右下角就是AlphaGo下圍棋了。這個是頗有意思的,它也是運動規劃和控制的問題,但它是用網絡來作的映射。
我爲何對這方面很感興趣呢?首先,CNN已經具有強大的環境理解能力,很容易從觀測估計狀態,觀測是圖片這類,而狀態,若是是物體識別,就是是什 麼物體,若是是定位,那就是物體在什麼地方。也就是說,在給定信息知足系統狀態可觀性的前提下,CNN環境理解能力是很是強大的。
第二個就是RL(強化學習)能夠進行路徑規劃,經過 value iteration 等方式創建表格,這個表格紀錄的是從狀態到動做的映射。不過運動規劃的維度這麼高不可能用表格來存,因此能夠經過神經網來解決這個映射問題。