為什麼純位置控制一接觸就出問題
大多數機械臂都被訓練得很擅長一件事:移動到指定位置並僵硬地保持在那裡。一個好的 PID 控制器 盯著關節編碼器,會用力對抗任何偏差——你推它,它就推回到被命令的位置。在空中運動時,這種剛性正是你想要的:動作乾脆而精確。但機器人一碰到堅硬物體,麻煩就來了。
想像你命令夾爪移動到鋼製工作檯*內部*一毫米處。控制器看到一個它永遠無法消除的一毫米誤差,於是不斷加大力矩,試圖到達一個永遠到不了的地方。由於鋼材幾乎不變形,哪怕這一點點過衝也會變成巨大的接觸力——機械臂吃力、桌面凹陷,或者觸發安全保護。機器人沒有出故障;它正是在嚴格執行位置控制的要求,完全沒有「力正在累積」這個概念。
解決辦法是不再死守精確位置,而是讓機器人的接觸行為變得可程式化。我們希望能調節機械臂在被推時的軟硬程度——有時像夾具一樣剛硬,有時像一根可以用手壓動的彈簧一樣柔順。這種可程式化的柔軟度,正是柔順控制的核心。
阻抗與導納:互為鏡像的兩種思路
讓機器人產生「彈性」感最乾淨的辦法是 阻抗控制。你不再命令一個位置,而是讓機械臂*表現得像一根連到目標點上、可調的彈簧加阻尼器*。你設定一個剛度(被推開時抵抗多大)、一個阻尼(對速度抵抗多大),還可以選配一個虛擬質量。控制器測量機械臂被推離目標多遠,然後命令出這段位移所對應的彈簧—阻尼力。用 200 N/m 的剛度把它推開 5 毫米,它就回推 1 牛——溫柔而可預測。
impedance: F_cmd = K (x_target - x) + D (v_target - v)
in : measured position/velocity out: a force/torque to apply
admittance: x_target = x_ref + (1/K) * F_measured (then a stiff position loop tracks x_target)
in : measured contact force out: a motion to follow導納控制 正好是它的鏡像。這裡你用 力/力矩感測器 *測量*接觸力,並把它轉換成*運動*:感到一股推力,就像虛擬彈簧那樣順勢讓開。機器人最終仍表現得像同一根彈簧—阻尼器,但內部的走線方向相反——輸入力、輸出位置,由一個普通的剛性位置環來完成實際追蹤。
為什麼同一根彈簧要有兩種做法?因為真實硬體各不相同。阻抗控制在可反驅的機械臂上表現最好——你能推動關節、馬達會輕易讓步——這類機械臂常用低減速比齒輪、串聯彈性致動器(在馬達與負載之間故意加一根彈簧),或帶有關節級 力 感測的 諧波減速器。這樣的機器人能命令出真實的力。導納控制則適合剛硬、高減速比、*推不動*的工業機械臂:它們無法偽造柔軟的力,於是改為讀取腕部力感測器並據此運動。這個選擇往往歸結到一個特性:可反驅性。
力控制與混合控制的妙招
有時你根本不想要彈簧——你想保持一個*特定*的推力。去毛邊工具應當以比如恰好 10 牛的力壓住工件,無論表面如何起伏。這就是純粹的 力控制:設定值是一個力,回饋來自力感測器,控制器讓機械臂前進或後退,直到測得的力與目標相符。位置變成了自由變量;力才是你要守住的量。
但大多數真實任務會同時混合這兩種需求。擦窗戶時,你必須精確地貼著玻璃平面(這是位置任務),*同時*以穩定的力壓向它(這是力任務)——而這兩個方向彼此垂直。混合位置/力控制 的處理辦法是把工作空間按方向拆分:在你必須描畫的軸上剛硬並做位置控制,在你產生接觸的軸上柔順並做力控制。兩者永不打架,因為每個方向只由其中之一掌管。
- 確定任務座標系——對一個表面來說,就是沿表面的兩個方向和一個垂直於表面的方向。
- 為每個方向分配角色:路徑重要的方向做位置控制,發生接觸的方向做力控制。
- 在第一組軸上跑位置環,在第二組軸上跑力環,用一個選擇矩陣讓每個軸只聽從其中一個環。
- 在任務座標系中合併這兩個指令,再映射回關節力矩去驅動機械臂。
一套可用的心智模型:插裝、拋光、手動牽引
想像經典的孔軸配合(插銷入孔)。要求銷子精確到微米地對準孔位,是很脆弱的——哪怕最小的對不齊都會卡死。而在橫向上設置柔軟阻抗,銷子就能稍微*讓一讓*,沿著倒角滑動,一邊下插一邊自動對中。工程師甚至為這種寬容做了一個機械版本,叫做 遠程柔順中心。插裝正是柔順、富接觸操作 的教科書案例:向下保持剛硬把銷子壓到位,橫向保持柔軟去吸收誤差。
拋光和打磨是力控制任務。沿曲面零件的精確路徑反而沒那麼重要,重要的是工具壓向它的*壓力*;你希望保持恆定的法向力,讓表面處理均勻,至於進退位置則交給表面本身決定。手動牽引 協作機器人 是其中最親切的例子:工人抓住機械臂、帶著它走一遍動作,運行阻抗或導納控制的機器人,只是順著人的推力流動,而不是與之對抗——正是這種柔順讓它即便被撞到也很安全。
那麼該如何選擇方案?先問關於硬體的兩個問題。第一,機械臂能被推動嗎? 帶關節力矩感測的可反驅機械臂偏向阻抗控制,可以做到快速、柔軟、反應靈敏。剛硬的減速機械臂則偏向帶腕部 力/力矩感測器 的導納控制。第二,任務要守住的是什麼——是路徑還是力? 描畫一個形狀:位置控制。保持一個壓力:力控制。觸碰一個人或不確定的表面:柔軟阻抗。大多數任務想要的是一種有意為之的混合,而這正是混合控制被發明出來要表達的東西。