肩—肘—腕的小把戲
把一杯水端在身前,讓手保持紋絲不動,然後上下擺動你的肘部。水杯沒有移動,但你的整條手臂卻一直在重新調整姿態。這之所以可能,是因為你的手臂關節數超過了任務嚴格所需:把手放到空間中某個位姿(位置加朝向)只需要六個數,而你的肩、肘、腕加在一起卻提供了七個轉動自由度。多出來的那一個,是你可以隨意支配的自由。
機械臂也可以擁有同樣的天賦。本階梯前幾級已經搭好了核心機器:正運動學(輸入關節角,輸出手部位姿)、逆運動學(輸入目標位姿,輸出關節角),以及把關節速度與手部速度聯繫起來的雅可比矩陣。本篇要講的是,當關節數有富餘時會發生什麼——以及如何把這多出來的餘地變成工具,而非麻煩。
冗餘:一個手部位姿,多種手臂形態
當一條手臂擁有的關節自由度多於眼前任務所需時,就說它具有運動學冗餘。一條七關節手臂被要求把手放到六自由度的位姿上時,有一個冗餘自由度;同一條手臂若只被要求觸到一個點(不管朝向),冗餘就更多。冗餘是相對於任務而言的,並非硬體的固定屬性。
其後果意義深遠。對非冗餘手臂而言,一個可達的手部位姿通常對應一小組有限的關節解(經典的「肘上 vs 肘下」之選)。而對冗餘手臂而言,單個手部位姿對應的是一整族連續的關節構型——以無窮多種方式停在同一個地方。逆運動學問題不再只有一個答案,而是在關節空間中擁有一條曲線、一張曲面,乃至一團體積的答案。
在這族解中明智地選擇本身就是一門學問,叫做冗餘消解。其思路是:讓手精確停在任務要求的位置,同時把剩餘的自由用在次要目標上——遠離關節極限、讓肘部避開障礙物,或保持靈活。手部位姿是硬約束,其餘一切都是在它之下優化的偏好。
零空間運動:動起來卻哪兒也沒去
機器人怎樣在不移動手的情況下擺動肘部?答案藏在雅可比矩陣裡。回想一下,雅可比把關節速度變成手部速度。對冗餘手臂來說,存在一整批關節速度組合,被雅可比映射為零手部速度——關節在動,效果卻在手部相互抵消。這組自相抵消的關節運動叫做雅可比的零空間,沿它運動就是零空間運動。
這正是那杯水的把戲,只是說得更精確了。零空間運動是一種內部重構:手臂自我重新排布,而末端執行器始終凍結在目標上。由於它對任務毫無代價,正是追求那些次要目標的理想場所——躲開漂向肘部的障礙物、把關節引離機械極限,或從運動學奇異點處退開(在奇異點上,手臂會失去朝某個方向運動的能力)。
Joint command = primary task + null-space term
q_dot = J_pseudoinverse * x_dot_desired <- moves the hand
+ N * z <- moves the elbow only
where N projects any desired joint motion z
into the null space, so it changes the arm's
shape WITHOUT changing the hand's velocity.你甚至可以把優先級疊起來。手部位姿可以是最高優先級,避障次之,舒適姿態墊底——每個較低目標只能在較高目標留下的自由內活動。這種在零空間中對任務分層的做法,正是現代人形機器人所用的全身控制器的種子。
可操作度:一張「手有多容易動」的地圖
即便手臂能夠到某個點,它在那裡朝各個方向也並非同樣靈活。在接近完全伸直的姿態附近,手向側面滑動很輕鬆,卻抗拒沿手臂方向移動——就像你自己手臂完全伸直時那樣。可操作度橢球一眼就能刻畫這一點:設想讓關節以單位力度朝各個方向運動,並描出手響應的快慢。結果是一個橢球,沿容易的方向鼓出,沿困難的方向收窄。
一個渾圓飽滿的橢球意味著手在每個方向都靈活——這是一個靈巧的位姿。一個扁如薄餅的橢球則是警告:手臂逼近奇異點,沿被壓扁的那條軸幾乎動彈不得。工程師把橢球歸結為單一的可操作度數值(大致是它的體積),當作品質評分來用。冗餘消解便可專門用零空間運動把這個評分維持得很高,引導手臂走向它依然敏捷、響應迅速的位姿。
這讓前幾篇裡的一個概念更加銳利。手所能觸到的全部點構成可達工作空間;其中那塊更小、還能以任意所欲朝向到達的區域,是靈巧工作空間。可操作度又添了第三層細膩:不只看一個位姿是否可達,還看手臂到了那裡之後能動得多優雅。
前沿:全身控制與基於學習的運動學
把冗餘推到極限,你就來到了人形機器人。人形機器人在兩條手臂、一個軀幹和兩條腿上分佈著幾十個關節,因此幾乎每個任務都極度冗餘。現代的答案是全身控制:把整個身體當作一個龐大的冗餘系統,在每一瞬間求解出尊重一摞分級目標的關節運動——先保持平衡、再擺放雙手、最後求舒適——這正是前面那套零空間分層,放大到整台機器。
經典運動學也正獲得一位基於學習的搭檔。數值逆運動學可能很慢、也可能卡住;如今越來越多地,會訓練一個神經網路一步給出不錯的關節構型,再由經典求解器加以打磨。而在最前沿,視覺—語言—動作模型與模仿學習讓機器人把相機圖像直接映射為動作,從人類示範中隱式地吸收冗餘消解,而非依賴手寫規則。