形封閉:用幾何形狀困住物體
當機器人拿起東西時,最根本的問題很簡單:物體會不會跑掉?一個看起來很緊的抓取,在手臂一加速的瞬間,零件仍可能滑動、扭轉或彈出。工程師用兩個精確的概念來回答這個問題——形封閉與力封閉——它們準確地告訴你什麼時候握得住。
先看形封閉。它的核心思想是:用接觸點把物體包圍得足夠徹底,使得僅憑幾何形狀就能阻擋一切可能的運動。想像一把鑰匙落進一個鑰匙形狀的槽裡——它無法朝任何方向旋轉或滑動,並不是因為有什麼東西在擠壓它,而是因為無論它想往哪兒動,都有實牆擋著。
形封閉的根本特徵是它完全不需要摩擦力。即使每個接觸面都光滑無比——無摩擦的冰貼著無摩擦的玻璃——物體依然動不了,因為接觸點在物理上把它圍死了。這使得形封閉成為最強、最可靠的握持方式,但也是要求最高的:在三維空間中,要把一個剛體完全困住,通常至少需要七個佈置得當的接觸點。
力封閉:讓摩擦力來出力
現實中大多數夾爪並不去圍困物體——它們是去捏住物體。兩個指尖壓在一個方塊的相對兩面上,把它提起來。沒有任何牆把方塊圍住;如果手指是無摩擦的,它就會像一塊濕肥皂一樣竄出去。讓抓取成立的,是摩擦力,而這正是力封閉的天地。
力封閉的說法是:只要靠用力夾緊,手指就能產生出抵消任何外界干擾的接觸力,抓取便成立。這裡的「任何干擾」包括各個方向的推力和繞各個軸的扭轉。機器人學家把一次推和一次扭打包成一個量,稱為力旋量(wrench)——力與力矩的組合。當接觸點能抵抗一切可能的力旋量時,抓取就具有力封閉。
讓這一切成為可能的是摩擦力,而摩擦力是有「預算」的。在每個接觸點,側向的握持力大致不能超過法向(按壓)力乘以摩擦係數——一旦超過,手指就會打滑。可以想像每個接觸點上立著一個錐子:只要手指所需的力落在這個摩擦錐之內,接觸點就能保持不滑動。力封閉說的就是:在所有接觸點的錐子之間,手指合起來能產生出所需要的任何力旋量。
兩種握持,以及如何給它們打分
把這兩個概念並排來看。形封閉靠形狀困住物體,不需要摩擦力;力封閉靠夾緊和摩擦力來穩住物體。任何具有形封閉的抓取自動也具有力封閉——如果幾何已經擋住了所有運動,再加上摩擦只會更穩。反過來卻不成立:一個雙指捏合可以具有力封閉,卻離形封閉差得很遠,因為一旦去掉摩擦,它就散架了。
知道一個抓取「握得住」只是個是非判斷;實踐中我們還想知道它握得有多牢。這正是抓取品質度量的用武之地——用一個數字來評分,衡量一個握持抵抗推與扭的穩健程度。一個勉強成立、所需力正好頂在摩擦錐邊緣上的抓取,得分很低;一個留有大量餘量的抓取,得分則很高。
一種常見的演算法把接觸點所能抵抗的全部力旋量想像成力旋量空間中的一個形狀——「抓取力旋量集」。一種被廣泛使用的度量會測量能塞進這個形狀內部的最大球的半徑:它回答的是「這個抓取最弱的方向在哪兒,在那個方向上它能扛住多大的干擾?」球越大,抓取越好。規劃器隨後就能比較眾多候選握持,挑出得分最高的那個。
for each candidate grasp g:
if not has_force_closure(g):
skip # cannot hold at all
score[g] = radius of largest ball
inside g's grasp-wrench-set
choose g with the highest score權衡:剛性圍籠對陣摩擦捏合
既然形封閉更牢,為什麼不總是追求它呢?因為圍困一個物體需要更多手指、更多接觸點,以及一隻能裹住零件形狀的手——昂貴、笨重、就位慢。而力封閉式的捏合只需兩根手指和一瞬間的閉合,這正是平行鉗口夾爪在工廠和倉庫裡佔主導的原因。代價是對摩擦的依賴:光滑、帶油或帶塵的表面會縮小摩擦錐,一個能握住乾燥零件的抓取,碰上油膩的零件可能就滑了。
現實中的設計會把兩者融合。指尖常被做成淺淺的 V 形槽或帶一塊軟墊:V 形槽加入一點幾何困束,朝形封閉靠攏;而軟墊——一種柔順性——則分散接觸、增大有效摩擦,從而強化力封閉。指尖裡的觸覺感測器能感知到打滑的第一絲跡象,並在物體逃脫之前告訴控制器再夾緊一點。
此外還有一種更寬鬆的中間狀態,叫做「籠罩(caging)」,它差一點點才到完全的形封閉:手指鬆鬆地把物體圍起來,物體雖仍能在裡面晃動,卻跑不出這個圍圈。當你不確定物體的確切姿態時,籠罩很寬容——先把它困住,再合攏成穩固的抓取。而有時最聰明的做法根本不是去抓:像把零件推進角落這樣的非抓取式操作,可以為一個原本在物體初始位置無法完成的、輕鬆而高品質的抓取創造條件。