robot-notes — 機器人知識筆記 GitHub ↗
本章與本頁目次

形態

robot-notes /形態/手臂運動學

手臂運動學:為什麼多一隻手臂,問題就換了一種

底盤的運動學是兩條代數式:給左右輪速,算出車體的 vω,反過來也一樣直接。手臂看起來只是「多幾個關節」,但問題的性質變了——同一個目標可能有八組答案、也可能一組都沒有,而且在某些姿勢下手臂會突然「少一個方向動不了」。

這篇把這些現象推到根上:它們全部來自同一件事——手臂能直接控制的量,和任務關心的量,不是同一組量

前置:座標轉換與 TF(剛體變換與座標系鏈)。 延伸:移動操作:底盤與手臂的耦合


1. 兩個空間,以及它們之間的兩個方向

一句話
關節空間(joint / configuration space) 所有關節角組成的向量 q = (q₁, q₂, …, qₙ)。這是馬達直接能控的量。
工作空間(task / operational space) 末端執行器(end-effector,夾爪或工具的作用點)的位姿 x——3 個位置 + 3 個姿態,共 6 個量。這是任務真正關心的量。
正運動學(FK) x = f(q):給關節角,算末端在哪。
逆運動學(IK) q = f⁻¹(x):給末端目標,回推關節角。

關節空間到工作空間的正運動學是單一對應,反過來的逆運動學則可能無解、多解或無限多解

整篇的張力就在這張圖的兩個方向上。FK 一定有答案而且唯一;IK 不保證。 為什麼?

FK 是求值,IK 是求根。 FK 做的事是把一串已知的剛體變換乘起來:每個關節轉了多少是已知的、每段連桿的幾何是固定的,矩陣連乘就得到末端位姿。連乘一定算得出來,而且只有一個答案。

IK 反過來,是把那串連乘的結果攤開成一組非線性三角方程組,再去解它。求根本來就可能無解、可能多根。所以「IK 解不出來」不是實作沒寫好,是問題本身允許這件事發生。

這也解釋了差速底盤為什麼沒有這個困擾:它的 FK 是兩條線性式,反過來還是兩條線性式,一一對應。手臂的非線性來自旋轉——關節角以 sincos 進入變換矩陣。


2. 正運動學:DH 參數為什麼是 4 個

一條手臂是一串連桿用關節接起來。末端相對基座的位姿,就是把每一段的變換連乘:

T⁰ₙ = T⁰₁ · T¹₂ · … · Tⁿ⁻¹ₙ

問題出在「每一段的座標系要放哪裡」。隨便放的話,相鄰兩個座標系之間的一般剛體變換要 6 個參數(3 個平移 + 3 個旋轉)。n 段就是 6n 個數,而且每個人放的位置不一樣,兩份文件對不起來。

Denavit–Hartenberg 的作法是對「怎麼放座標系」施加兩個約束:

  1. xᵢ垂直於 zᵢ₋₁
  2. xᵢ zᵢ₋₁相交

一般剛體變換需要六個參數;DH 用垂直與相交兩個約束各消掉一個自由度,剩下 a、alpha、d、theta 四個參數

這兩個約束下去,相鄰兩座標系之間的變換就只剩 4 個參數:

參數 幾何意義 轉動關節 移動關節
a(link length) 兩軸的公垂線長度 常數 常數
α(link twist) 兩軸之間的扭轉角 常數 常數
d(link offset) 沿 zᵢ₋₁ 的偏移 常數 變數
θ(joint angle) zᵢ₋₁ 的轉角 變數 常數

為什麼恰好是 4 個:一般剛體變換有 6 個自由度,「垂直」消掉一個、「相交」再消掉一個,6 − 2 = 4。DH 表能存在不是慣例約定,是這兩個約束算出來的結果。

對應的變換矩陣:

        ⎡ cosθ   −sinθ·cosα    sinθ·sinα   a·cosθ ⎤
Tᵢ₋₁ᵢ = ⎢ sinθ    cosθ·cosα   −cosθ·sinα   a·sinθ ⎥
        ⎢  0        sinα          cosα        d    ⎥
        ⎣  0         0             0          1    ⎦

於是一條 6 軸手臂的完整幾何,就是一張 6 列 × 4 欄的表。

最常見的坑:DH 有 standard(Denavit–Hartenberg 原版)與 modified(Craig 版)兩種慣例,座標系掛在連桿的哪一端不同,同一台手臂兩種寫法的參數表長得不一樣。抄別人的參數表之前先確認是哪一種,否則算出來的末端位置會系統性偏掉,而且看起來很像「機構裝配誤差」。


3. 逆運動學:三種麻煩,以及機構設計怎麼遷就它

3.1 多解——IK 的答案是一個集合,不是一個值

同一個末端位姿可以由肘上與肘下兩種構型達成,六軸手臂典型有八組解

一台典型 6 軸工業手臂,同一個末端位姿通常有 8 組關節角組合都能達成,來自三個二選一:

八組解在幾何上等價,在工程上完全不等價——有的會撞到自己、有的會撞到工作台、有的離關節極限只剩幾度、有的要從現在的姿勢繞一大圈才過得去。

所以把 IK 當成「一個函數呼叫」的心智模型會出事。 它回傳的是候選集合,選哪一組是另一個獨立的決策:離目前構型最近的?可操作度最高的?不會碰撞的?這個選擇通常才是規劃器真正在做的事。

3.2 無解

兩種情況:目標超出工作空間(構造上構不到),或位置構得到但姿態做不到。後者更常見也更難察覺——夾爪要垂直向下抓,但在那個位置手腕轉不到那個角度。

3.3 奇異點——突然少一個方向

某些構型下,手臂會失去一個自由度:末端在某個方向上,無論關節怎麼動都動不了。

三種典型:

接近奇異點時,末端只要移動一點點,關節速度就會急遽放大到發散

實務後果比「少一個方向」嚴重得多。 靠近奇異點時,要讓末端移動一小段,所需的關節速度會發散——因為求解時要除以一個趨近於零的量。真機的表現是手臂突然高速甩動。所以控制器必須偵測並主動限速,不能等到真的抵達奇異點才處理。

這不是理論上的顧慮。MoveIt 的即時控制元件 MoveIt Servo 內建奇異點偵測,靠近時自動降速,而且這個行為預設是開的——成熟工具把它做成預設值,正說明踩到的人夠多。

3.4 機構設計遷就了求解的可行性

IK 有兩條路:

解法 怎麼做 代價
解析解(closed-form) 直接把方程組解開,得到公式 只有特定機構有;但快、能一次列出全部解
數值解(iterative) 用 Jacobian 反覆迭代逼近目標 通用;但慢、可能不收斂、一次只給一組解

關鍵在於 Pieper 準則:若手臂有三個相鄰關節軸交於一點,IK 就有封閉解。

回頭看工業 6 軸手臂為什麼幾乎都做成「球型手腕」(spherical wrist,最後三軸交於一點)——這不是為了機構緊湊,是為了讓 IK 有封閉解。 機構設計反過來遷就了求解的可行性,是這個領域最典型的一個柵欄:看到球型手腕想「這樣設計比較好裝」,其實它擋住的是「IK 只能用數值迭代」這件事。

冗餘手臂(7 軸以上)沒有這個好處——自由度多於任務需求,解不再是有限組而是無限多,只能走數值路線,並額外決定「這無限多組裡要哪一組」。這一步就是下一篇移動操作的主題。


4. Jacobian:同一個矩陣的三重身分

把 FK 對關節角微分,得到 Jacobian 矩陣:

J(q) = ∂f/∂q        ẋ = J(q) · q̇

它是 6 × n 的矩陣(6 個末端速度分量,n 個關節)。這個矩陣在三個看似無關的問題裡都是主角,而且是同一個矩陣。

Jacobian 的三重身分:正向映射關節速度到末端速度、轉置映射末端力到關節力矩、奇異值描述可操作度

身分一:速度映射(以及數值 IK 的來源)

ẋ = J q̇ 是正向:給關節速度,末端跑多快。反過來:

q̇ = J⁻¹ · ẋ

這就是微分逆運動學——不直接解位置的方程組,而是一小步一小步地問「末端要往這個方向走一點點,關節各該轉多少」,累積逼近目標。所有數值 IK 都建在這條式子上。

奇異點的數學定義也在這裡:J 掉秩(det J = 0),J⁻¹ 不存在,或接近時數值上爆炸。第 3.3 節那個「關節速度發散」的現象,就是這個倒數。

身分二:力映射(靜力對偶)

這一段是整篇最值得記住的推導。用虛功原理(前提是連桿剛性、不儲存彈性能、關節無摩擦——真實手臂這三項都只是近似,所以 τ = JᵀF 是理想值,實務上還要補摩擦補償):同一個瞬間,關節力矩做的功必須等於末端受力做的功。

τᵀ · q̇  =  Fᵀ · ẋ          (功率相等)
        =  Fᵀ · (J q̇)
        =  (Jᵀ F)ᵀ · q̇

這對所有可能的 都成立,所以兩邊的係數必須相等:

τ = Jᵀ · F

同一個 Jacobian,轉置一下就是力的映射。 這不是巧合或記憶技巧,是虛功原理的直接後果:速度與力是對偶的量,它們共用同一個幾何。

這條式子是力控的基礎——要末端輸出指定的力(例如插銷入孔時的貼合力),就是算出各關節該出多少力矩;反過來,量到關節力矩就能推末端受了多大的力,不必裝力感測器也能粗略估

身分三:可操作度

J奇異值描述「末端往各個方向動的容易程度」。

奇異值是什麼(它跟三行前的「奇異點」不是同一個東西,但有關):把 J 這個線性映射沿它自己的幾個主方向拆開,每個方向都有一個放大倍率,那些倍率就是奇異值。最大的那個 = 最好動的方向,最小的那個 = 最難動的方向。最小的奇異值掉到 0,就代表有一個方向被壓扁了——那就是奇異點。 所以「奇異值」是連續的量度,「奇異點」是它退化到 0 的那個位置。把它們全部乘起來:

w(q) = √( det( J · Jᵀ ) )

這是 可操作度(manipulability),由 Yoshikawa 於 1985 年提出:w 大代表這個構型往各方向都靈活,w → 0 就是奇異點。它可以當成一個要最大化的目標,讓規劃器主動選「遠離奇異、留有餘裕」的構型——冗餘手臂那無限多組解裡,這是常用的挑選判準之一。


5. 收斂:三個現象,一個根源

現象 根源
IK 可能無解 / 多解 要解的是非線性三角方程組,不是求值
六軸手臂典型八組解 肩、肘、腕三個二選一
工業手臂都有球型手腕 Pieper 準則:三軸交於一點才有封閉解——機構遷就求解
靠近奇異點手臂會甩 J 掉秩,J⁻¹ 發散
力控不必然要力感測器 τ = JᵀF,虛功原理下速度與力共用同一個 Jacobian

底盤沒有這些問題,是因為它的映射是線性且一一對應的。手臂一旦接上來,「控制的量」與「任務的量」就分家了,上面所有現象都從這個分家長出來。

下一篇把底盤接回來:當底盤本身也會動,兩邊的自由度加在一起變成冗餘,又會多出哪些新問題。→ 移動操作:底盤與手臂的耦合


來源