2015 年前後,如果你去問任何一個做機器人抓取的研究者一個問題:給機械手做一個抓取規劃系統,最大的坎在哪裡?答案幾乎眾口一致,數據不夠。
不是隨便什麼數據都不夠,是那種把某個具體物體和某種具體抓取姿勢對應起來的數據嚴重不足。你想讓一隻機械手學會抓杯子、抓螺絲刀、抓蘋果,前提是有人先把成千上萬次成功的抓取姿勢記錄下來,餵給神經網路。問題是,抓取數據集的採集成本高得嚇人,早期的做法要麼靠人類戴著動作捕捉設備做示範,要麼靠遙操作機械臂一次次試錯,甚至有研究組用熱成像相機去捕捉手掌接觸物體後留下的熱痕跡。這些方法慢、貴,而且天生有一個致命傷:你訓練時用的是蘋果和螺絲刀,測試時遇到一個從沒見過的奇怪形狀的水壺,模型大概率就懵了。
這篇論文的題目叫 GOAG
,全稱是 Generative and Object-Agnostic Grasp Planner,直譯過來是"生成式的、與物體無關的抓取規劃器"。它想解決的正是這個老大難問題,但解決思路有點反常識:它壓根不用任何物體的數據來訓練模型。
這事聽起來有點玄乎,一個抓取系統,不看任何物體照片、不看任何物體點雲,是怎麼學會抓東西的?
這就是整篇論文最值得琢磨的地方。
抓取問題卡在哪兒
先說說傳統數據驅動方法到底難在哪。
主流的深度學習抓取規劃器,不管是早期的回歸模型,還是後來的擴散模型、基礎模型,骨子裡做的都是同一件事:拿一個物體的三維點雲當輸入,直接吐出一個抓取姿態,包括機械手手掌的位置朝向,以及每個手指關節該彎曲多少度。這類方法統稱為"直接預測法",論文裡提到的 DexDiffuser、DexGrasp Anything 都屬於這一類。
問題是,這種直接預測經常會"想當然"。它給你的姿態,手指可能戳進物體裡面去了,這在物理上叫穿透,是抓取里最忌諱的一種失敗。所以這類方法往往還得加一道後處理,用物理仿真器篩一遍,把明顯不合理的抓取過濾掉,這一步計算開銷不小。
另一條路線叫"中間表徵法",UniGrasp、GeoMatch、GenDexGrasp、DRO-Grasp 這些工作走的都是這條路。它們不直接預測抓取姿態,而是先預測一張"接觸圖",也就是物體表面上哪些點應該被手指碰到,再用一個逆運動學求解器把這張圖翻譯成具體的關節角度。這樣做的好處是能天然避免穿透,抓取更可靠,但代價是,這些方法依然要靠"物體加機械手"配對的訓練數據才能學會預測接觸圖,數據瓶頸並沒有真正解開。
論文裡給出的對比數字很直接:此前一份叫 GenDexGrasp 的工作,構建訓練數據集花了 1400 個 GPU 小時,用的還是英偉達
A100 這種高端卡。這個數字背後的意思是,每換一種機械手、每擴充一批新物體,都得重新燒掉上千小時的算力去生成配對數據。
這就是 2023 年前後這個領域卡住的地方:模型越做越花哨,擴散模型、基礎模型都用上了,但骨子裡都得先餵飽一個物體專屬的訓練集,而這個訓練集的生產成本高、覆蓋面窄,換個新物體形狀,識別率立刻掉下來。
GOAG 團隊的思路是,能不能幹脆不去學"這個物體該怎麼抓",而是去學"這隻手能怎麼抓"?
物體視角換成機械手視角
這是整篇論文最核心的一次視角轉換,值得慢慢講清楚。
先想一個物理事實:當一次抓取成功發生時,機械手表面和物體表面在接觸的地方,幾何形狀是高度吻合的。手指貼住杯壁的那一小片區域,和杯壁貼住手指的那一小片區域,說的其實是同一件事,只是站在兩個不同的參照系裡看。
論文把這個共同的接觸區域記作 C(.),從物體角度看是 C(O),從機械手角度看是 C(H)。這兩者近似相等,這是整個方法的立足點。
傳統做法固定在物體坐標系裡思考問題:給定物體點雲 O 和機械手在某個姿態下的"手印
"H,數一數物體表面上哪些點足夠靠近手印,這些點就構成接觸圖。這個思路天然要求你手頭有一大堆物體,才能算出一大堆接觸圖。
GOAG 反過來做。它把整個坐標系換成機械手自己的坐標系,機械手固定在原點不動,不管外面的物體是什麼,先把物體通過一個逆變換搬到機械手的參照系裡。這樣一來,接觸點就變成了機械手表面上的一個子集,和外面到底是什麼物體沒有直接關係。
這裡有個概念叫手印*:論文裡定義的手印 H,指的是機械手表面上真正參與抓取的那部分區域,主要是手掌和手指內側朝向物體的那一面。這是機械手"能夠接觸外界"的物理邊界。
這個視角轉換帶來的直接好處是,你現在可以完全脫離物體,單獨去研究"這隻機械手在各種手指彎曲程度下,它自己身上哪些區域會同時形成一片有效的接觸面"。這變成了一個純粹關於機械手運動學的問題,和外部世界長什麼樣完全無關。
打個比方可能更好理解。假設你是個樂高積木愛好者,想搞清楚一塊特定形狀的積木能和哪些其他積木拼接。傳統做法是把倉庫里所有積木都拿出來,一塊一塊去試拼,拼上了就記一筆"這塊積木和那塊積木能拼上"。積木種類越多,你要試的組合就越多,永遠試不完,而且換了一批新積木,之前攢的經驗全部作廢。GOAG 的做法是反過來,先只研究手裡這一塊積木本身,它凸起的位置在哪、凹陷的位置在哪、能和多寬的凹槽咬合、能承受多大角度的偏轉,把這塊積木自身的拼接可能性摸透。等真正遇到新積木的時候,你不需要重新試遍倉庫,只需要拿這塊積木的"拼接指紋"去對比新積木的形狀,哪裡能對上一目了然。如果不這樣做,而是堅持把每一種可能遇到的積木都收集齊再逐一配對訓練,你就永遠追不上現實世界物體形狀的多樣性,這正是過去那些方法卡住的地方。
如何在沒有物體的情況下生成訓練數據
視角換了,接下來的問題是,訓練數據從哪兒來。
答案是,從機械手自己的運動學參數裡"編"出來。具體做法是,先在機械手的關節活動範圍內隨機採樣出一萬組合法的關節角度配置,記作 Q。對每一組配置,算出機械手在這個姿態下的完整表面點雲 H(Q)。
光有點雲還不夠,還需要知道這個姿態下,手上哪些區域"應該"被算作接觸區域。這裡論文借用了一個來自人體工程學研究的成果,叫抓取分類法
*:一套將人類和機器人常見抓取動作歸類的體系,論文引用自 Escorcia-Hernandez 等人 2023 年的工作,原本用於分析人類手部完成日常任務時的姿態模式。
論文選取了其中最常見、最適合機械手的六種抓取類型,針對每一種類型,在機械手表面預先標出哪些區域是"可能形成有效接觸"的黑色區域,哪些是"不太可能參與接觸"的區域。然後,對每一組隨機採樣的關節配置,再隨機挑一種抓取類型,在對應的黑色允許區域內隨機撒一些點當作這次採樣的"接觸點"。這樣重複五十次,再乘以一萬組關節配置,總共生成了三百萬條帶標籤的點雲數據。
這裡有個細節值得注意:論文特意強調,如果完全隨機地在整個手上撒點當接觸點,理論上也能湊出一個數據集,但那樣生成出來的接觸模式很可能是不合邏輯的,比如某幾個手指的接觸點組合在物理上根本無法同時實現。藉助抓取分類法作為先驗,保證了每一條生成的數據都符合真實抓取時手指之間應有的協同關係。
這帶來一個立竿見影的效果:整個數據集的生成只花了大約一個 GPU 小時,用的是一塊消費級的 RTX 4090 顯卡,和前面提到 GenDexGrasp 那 1400 個 GPU 小時相比,差了三個數量級。
這個對比數字值得多說一句。1400 個 GPU 小時換成一個 GPU 小時,意味著如果你想給一種全新設計的機械手重新訓練一遍,以前得規劃好幾周的伺服器排期,現在一頓飯的功夫就能跑完。這不只是省錢,而是從根本上改變了這類研究能不能被小團隊、小實驗室復現和疊代的現實門檻。
模型架構:條件變分自編碼器
怎麼學接觸分布
有了數據,接下來是怎麼把這些三百萬條點雲餵給神經網路學習。
這裡遇到一個技術性的麻煩:點雲的點數是不固定的,神經網路不太喜歡處理長度可變的輸入。論文用了一種叫基點集
的編碼方式來解決這個問題。
基點集*:英文縮寫 BPS,是一種把不定長點雲轉換成固定長度向量的編碼技術,做法是預先在空間裡放置一批固定的"基準點",然後計算輸入點雲里每個點到這些基準點的最近距離,拼成一個固定維度的向量。
論文的一個巧妙設計是,這批基準點不是隨便撒在一個包圍盒裡,而是專門離散化了機械手的運動學工作空間,也就是機械手轉動所有關節之後,手掌坐標系下能夠觸及的整個體積範圍。這樣一來,基準點天然集中在抓取真正會發生的區域,而不是浪費在手根本夠不到的地方。
有了這個編碼,論文進一步定義了一個連續的接觸似然值,對每個基準點算一個 0 到 1 之間的分數,越接近 1 說明這個基準點越靠近真實的接觸點,並且方向也對得上。這個分數背後用了一個叫對齊距離的度量,不僅看兩點的空間距離,還要看表面法線方向是否一致,畢竟指尖壓在物體表面上,壓的方向和物體表面朝外的方向應該基本相反,方向不對,壓不實。
訓練用的核心模型是條件變分自編碼器*:英文縮寫 CVAE,是一種生成式神經網路,能學會一個數據分布的"壓縮表示",並且可以在給定某些條件的情況下,從這個壓縮表示里採樣生成新的、合理的樣本,而不是死記硬背訓練時見過的例子。
放在 GOAG 里,這個 CVAE 學的是,給定一個基準點集合的編碼,機械手表面上合理的接觸分布長什麼樣。訓練完之後,模型的編碼器部分其實用不上了,推理階段直接從一個標準正態分布里隨機採樣一個隱變量,餵給解碼器,就能生成一份新的、符合機械手運動學規律的接觸點分布預測。
與此同時,論文還單獨訓練了一個 PointNet++
*:一種專門處理三維點雲數據的神經網路結構,能夠從點雲里逐層提取局部到全局的幾何特徵,常用於點雲分類和分割任務。
這個網路的任務比較專一,就是給定一批接觸點,判斷每個點應該歸屬於機械手的哪個手指或者哪一節指骨。這一步很關鍵,因為光知道"物體表面這裡需要被碰一下"還不夠,還得知道該派哪根手指去碰。
這裡可以做個類比。你讓一個剛上崗的快遞分揀員去處理一堆包裹,如果只告訴他"這些包裹需要送到某個地址附近",卻不告訴他具體該走哪條路線、由哪個片區的快遞員負責,他還是沒法把包裹準確送到。PointNet++ 在這裡乾的就是分派路線的活,把一個抽象的"這裡需要接觸"翻譯成一個具體的"三號手指的第二關節負責這裡"。如果沒有這一步,後面的關節優化就變成了無頭蒼蠅,不知道該彎哪根手指去夠哪個點,整個抓取執行會亂套。
推理階段:換個新物體,怎麼用起來
訓練階段完全沒見過任何物體,那真正遇到一個新物體的時候,這套系統是怎麼運作的?
第一步,把物體點雲通過前面提到的那個逆變換,搬進機械手的坐標系裡,這一步依賴你已經指定或者採樣出了一個候選的抓取姿態,也就是機械手手掌相對物體應該擺在哪個位置、朝哪個方向。
第二步,對這個搬運過來的物體點雲,用和訓練時同一套基點集編碼方式,算出它的距離場向量。
第三步,從標準正態分布里採樣一個隱變量,丟進 CVAE 的解碼器,連同剛才算出的距離場向量一起,解碼器直接吐出一份接觸似然預測。挑出那些似然值超過某個閾值的基準點,這些點就構成了模型認為"應該在這裡發生接觸"的候選集合。
第四步,用訓練好的 PointNet++ 給這些候選接觸點分配責任手指。
這裡有個自然而然的問題:模型是在純粹的機械手幾何上訓練出來的,推理時突然要處理真實物體的形狀,這兩種數據分布真的能對得上嗎?論文自己也承認,這裡存在一個"訓練測試域偏移
"的挑戰,並且提到這個問題在他們後續一篇工作 CoToGrasp 里有更深入的探討。不過從後面的實驗結果看,這種遷移在實踐中效果不錯。
生成出來的接觸點候選雖然幾何上說得通,但畢竟是從一個隨機採樣的隱變量里生成的,並不天然保證物理上穩不穩。所以論文加了一道力封閉
*:一種描述抓取穩定性的經典力學判據,大致意思是,如果幾個接觸點上施加的摩擦力組合起來,能夠抵消任意方向的外力和外力矩,這個抓取在理論上就是"鎖得住"的。
檢驗步驟。具體做法是,把預測出來的接觸點按手指分組,每組取一個重心投影到物體表面上,假設摩擦係數是 0.3,算出所有可能的接觸力構成的凸包,如果這個凸包嚴格包含坐標原點,就說明這組接觸點理論上能鎖住物體,不會滑脫。
如果沒通過這個檢驗,模型不會將就著往下走,而是重新採樣一個隱變量,再試一次,最多試二十次。這一步之所以要設上限,是因為有些候選姿態天生條件差,比如剛好卡在機械手工作空間的邊緣,這種情況下怎麼採樣都難找到穩定組合,與其死磕,不如及時止損換個姿態。
最後一步是關節優化,把力封閉檢驗通過的接觸點,當作目標,反過來去調整機械手每個關節該彎多少度,才能讓手指真正碰到這些指定的位置。這一步的優化目標函數包含四項:一項是讓手指儘量靠近目標接觸點,一項是懲罰手指戳進物體內部,一項是懲罰手指之間自己互相打架,還有一項是約束關節角度不能超出機械手硬體本身的活動範圍。
這套流程走下來,你會發現它其實是把"生成"和"驗證"拆成了兩個獨立的階段,生成階段大膽天馬行空地採樣,驗證階段用紮實的物理判據把關。這種設計思路讓人聯想到寫文章時先自由地打草稿,再回過頭逐句核實事實,兩件事情如果混在一起做,往往顧此失彼,分開做反而效率更高。
實驗結果:速度和成功率雙贏
理論說完了,數據說話。
論文在 MultiDex 數據集上做了細緻的對比實驗,這個數據集包含來自 ContactDB 和 YCB 兩個物體庫的十個物體,測試了三種經典機械手:Barrett 三指手、Allegro 四指手、還有更複雜的 Shadow 五指仿人手。
| 方法 | 是否數據驅動 | 訓練是否與物體無關 | 平均成功率 | 效率(秒/個) |
|---|---|---|---|---|
| DFC | 否 | 是 | 79.32% | 大於1800秒 |
| GenDexGrasp(完整版) | 是 | 否 | 70.96% | 約13.6秒 |
| DRO-Grasp(預訓練版) | 是 | 否 | 72.47% | 約1.0秒 |
| GOAG(不含力封閉檢驗) | 是 | 是 | 84.07% | **0.12秒** |
| **GOAG(完整版)** | 是 | 是 | **86.93%** | 0.19秒 |
這張表里有幾個數字值得細品。GOAG 完整版的平均成功率是 86.93%,是表里所有方法中最高的,而且它是唯一一個在訓練階段完全沒用過物體數據的方法。DFC 這個傳統分析法雖然成功率也不低,達到 79.32%,但它每生成一個抓取要超過 1800 秒,這個速度差距是致命的,意味著如果你想批量生成上百個抓取候選,DFC 得跑上大半天,GOAG 只需要幾十秒。
還有一個細節特別有意思:去掉力封閉檢驗這一步之後,GOAG 的成功率依然有 84.07%,只比完整版低了不到 3 個百分點。這說明模型本身已經在生成階段學到了相當紮實的抓取力學規律,力封閉檢驗更像是錦上添花的保險絲,而不是救命稻草。這也從側面印證了論文的核心假設,單純從機械手自身的幾何和運動學出發,確實能學到具有普適性的抓取知識。
再看效率這一列,DRO-Grasp 單個抓取生成速度看起來很快,但論文指出這是因為它每個抓取都要獨立跑一次優化,生成的抓取數量一多,總耗時是線性增長的。GOAG 採用的是一次性對一批候選抓取做統一的向量化優化,批量生成上百個抓取時反而更有優勢,這也是為什麼表里 GOAG 在三種手上都穩定在 0.1 到 0.2 秒這個區間,幾乎不隨生成數量的增加而明顯變慢。
論文還做了一個更大規模的泛化測試,把訓練好的 Shadow 手模型,拿去測試五個完全不同的抓取數據集,包括 DexGraspNet、UniDexGrasp、MultiDex、真實機器人採集的 RealDex,以及從人手動作重定向過來的 DexGRAB。
| 方法 | 是否針對每個數據集單獨訓練 | 五個數據集平均成功率 |
|---|---|---|
| UniDexGrasp | 是 | 25.42% |
| GraspTTA | 是 | 19.52% |
| SceneDiffuser | 是 | 37.10% |
| UGG | 是 | 44.72% |
| **DexGrasp Anything(DGA)** | 是 | **58.48%** |
| GOAG | 否,只訓練一次 | 53.97% |
這張表的關鍵不在於 GOAG 拿了第一
,它排在第二,比專門為每個數據集單獨調過參的 DexGrasp Anything 低了大約 4.5 個百分點。真正值得琢磨的是"是否針對每個數據集單獨訓練"這一列:表里除了 GOAG,所有對手都是針對每一個測試數據集重新訓練一遍模型,而 GOAG 從頭到尾只在 Shadow 手的運動學上訓練了一次,拿著這一份模型去闖五個完全不同的數據集。
這就好比五個人參加一場跨領域知識競賽,其他四個人每換一個賽道就提前突擊複習那個賽道的題庫,只有一個人全程沒複習任何具體題目,憑著基本功硬闖下來,最後成績只比複習過的人差一點點。如果不做這種"一次訓練、到處使用"的設計,那你每來一個新場景就得重新準備一整套針對性的訓練數據,這在現實世界裡幾乎不可能持續,因為真實世界裡物體的種類是無窮的,不可能窮舉完再逐一餵給模型。
真實機器人上的驗證
仿真結果好看是一回事,真機器人上能不能用是另一回事。
論文團隊用了一隻 Allegro 左手,裝在一台七自由度的機械臂末端,對著 YCB 數據集裡的真實物體做實機測試,成功抓取了十一件不同的物體,包括牙膏盒、清潔劑瓶、木棍等日常用品。論文裡的配圖顯示了機械臂實際抓取的場景,以及對應的仿真復現畫面並排展示,從圖上能看到抓取姿態在虛實之間基本一致,說明這套從純機械手幾何學出來的策略,確實能扛得住真實世界裡傳感器噪聲和物體表面不規則形狀帶來的干擾。
寫在後面
讀完這篇論文,最觸動我的其實不是那個 86.93% 的成功率數字,而是那個 1400 個 GPU 小時對 1 個 GPU 小時的對比。這個差距太誇張了,以至於讓人重新思考一個問題:我們是不是習慣性地把"更多數據、更貴的訓練"等同於"更好的方法",而忽略了換一個問題定義方式,原本需要海量數據才能解決的事,可能根本不需要那麼多數據。
另一個讓我意外的細節是,去掉力封閉檢驗之後模型成功率只掉了不到 3 個點。這說明生成模型在訓練階段學到的東西,已經隱含了相當程度的物理規律,不需要額外的顯式約束來兜底。這多少顛覆了我之前的一個默認預期,總以為純粹靠數據分布學出來的生成模型,天生缺乏物理常識,得靠後處理硬性修正才能用。
論文裡沒細說的一點是,這套方法對於那些體積超出機械手工作空間的大物體效果會打折扣,採樣策略需要專門適配。這大概是這條思路接下來最值得深挖的方向:一隻手能學會抓握自己夠得著的一切,那夠不著的那部分世界,又該怎麼辦?
Q&A
Q1:GOAG是什麼?
A:GOAG是一種物體無關的機械手抓取規劃方法,核心思路是只用機械手自身的運動學和幾何數據訓練模型,完全不依賴物體的抓取數據集,從而在遇到全新物體時也能生成有效抓取。
Q2:GOAG相比傳統方法效率高在哪裡?
A:GOAG訓練數據生成只需約1個GPU小時,而此前GenDexGrasp類方法需要1400個GPU小時;在生成大批量抓取時,GOAG單個抓取平均耗時0.1到0.2秒,明顯快於需要逐個獨立優化的方法。
Q3:GOAG在沒見過物體訓練數據的情況下效果如何?
A:在MultiDex數據集測試中,GOAG平均成功率達到86.93%,高於多個專門針對該數據集訓練的方法;在跨五個數據集的泛化測試中,GOAG只訓練一次就取得53.97%的平均成功率,接近專門為每個數據集單獨訓練的最優方法。






