Kinematic Redundancy
- 又稱: manipulator redundancy
- 類別: Foundations & spatial maths › Kinematics
- 標籤: kinematics, inverse-kinematics, null-space, manipulators, redundancy-resolution
當機器人的關節數多於任務所需時,它對該任務便是運動學冗餘的,因此同一個末端執行器姿態可以由一個連續的關節組態族達成。
定義
當機器手臂的關節數 n 超過它必須控制的任務維度 m 時,它相對於該任務便是運動學冗餘(kinematically redundant)的。典型情形是一支七關節機器手臂控制六維的末端執行器姿態,留下一個冗餘度。不過,冗餘是相對於任務來定義的:對於只固定工具尖端位置的任務,或允許繞鑽頭軸線自由旋轉的任務,六關節手臂同樣是冗餘的。對一個固定的末端執行器姿態而言,能達成它的關節組態不是單一個點,而是一個 (n − m) 維的族,常稱為自運動流形。實務上,這表示手臂可以在手保持不動的同時移動肘部。
在速度層次,冗餘表現為 m × n 機器手臂雅可比矩陣 J 的零空間:位於這個零空間中的關節速度不會產生末端執行器運動。分解速率控制器利用這一點,採用標準形式 q̇ = J⁺ẋ + (I − J⁺J)q̇₀,其中 J⁺ 是虛反矩陣。第一項追蹤任務,第二項則把次要目標 q̇₀ 投影到零空間中。常見的次要目標包括遠離關節極限、讓肘部避開障礙物、提高可操作度以避開奇異點,以及降低關節扭矩。任務優先順序逆向運動學在此基礎上為多個任務排序,使每個較低優先順序的任務只在其上方各任務的零空間中作用。
冗餘也會改變逆向運動學的行為。數值 IK 求解器會從無限多個解中傳回一個,這個解由它的初始值與演算法隱含地決定,因此連續的查詢可能在相距很遠的組態之間跳動。對於肩部與腕部為球形的常見七關節設計,解析 IK 會明確地把多出來的自由度參數化,通常以一個臂角或擺角表示,它讓肘部繞著肩到腕的連線旋轉。冗餘不應與離散 IK 分支的有限集合混為一談,例如肘部朝上或朝下、腕部翻轉,這些分支即使是非冗餘的六關節手臂也有。
為何重要
冗餘讓七關節手臂能在手沿著路徑移動的同時繞過障礙物、避開關節極限並遠離奇異點,這也是許多協作型與人形機器人手臂採用七個關節的原因。它也讓逆向運動學與規劃變得更困難,因為必須有某種機制從一個連續體中選出一個組態,而不好的選擇會造成關節極限停機或肘部突然翻轉。
主要應用
- 在末端執行器追蹤路徑時,讓肘部避開障礙物並避免自我碰撞
- 在長工具路徑中避開關節極限與奇異點
- 雙臂操作與閉鏈操作,多餘的自由度有助於滿足共同的約束
- 關節數遠多於任何單一任務所需的人形機器人與移動機器手臂的全身控制
- 在協作作業中讓手臂姿勢保持可預測,並遠離人員
- 在給定的末端執行器運動下降低關節扭矩或能量消耗
實際應用
一位工程師為一支七關節手臂編寫程式,讓它在旁邊有人工作時用海綿擦桌子。擦拭路徑固定了末端執行器姿態,留下一個自由的自由度。控制器以雅可比虛反矩陣為擦拭動作計算關節速度,並加上一個零空間項,把肘部推離被追蹤的人員位置,並推向每個關節行程的中間。測試時,團隊發現在每個路徑點呼叫一般的數值 IK 求解器,有時會傳回肘部位在相反兩側的解,造成關節大幅跳動。他們改成以前一個解為每次查詢做暖啟動,並以臂角明確地將肘部位置參數化,讓規劃器刻意選擇這個冗餘自由度,而不是交給求解器決定。
常見誤解
- 冗餘只是表示關節多於六個 — 冗餘是相對於任務定義的,因此對於約束少於六個末端執行器座標的任務,六關節手臂也是冗餘的
- 冗餘手臂有多個 IK 解,與六關節手臂的情況相同 — 非冗餘手臂有有限個離散解,而冗餘手臂有連續的解族
- 零空間運動從不影響任務 — 它只在一階近似下保持末端執行器姿態不變,因此除非修正誤差,大步長或在奇異點附近的運動仍可能干擾任務
誰需要了解
- 操作與運動規劃工程師
- 從事任務空間控制與全身控制的控制工程師
- 人形機器人與移動機器手臂開發者
- 學習機器手臂運動學的機器人學學生
相關技術
- 雅可比虛反矩陣(Jacobian Pseudoinverse)
- 零空間投影(Null-Space Projection)
- 解析逆向運動學(Analytic Inverse Kinematics)
- 可操作度橢球(Manipulability Ellipsoid)
- 阻尼最小平方法(Damped Least Squares)
相關術語
相關專案
- MoveIt 2: Motion planning framework for ROS 2 robot arms, with kinematics and collision checking
- PyRoki: Modular Python toolkit for kinematic optimization across CPU, GPU, and TPU via JAX
- mink: Python inverse kinematics library built on MuJoCo supporting 20+ robot platforms
- DART: C++ physics engine for articulated rigid body dynamics and robotics simulation
- IKPy: Pure-Python inverse kinematics library that builds chains straight from URDF
- frax: JAX library for fast, differentiable robot kinematics, dynamics and inverse kinematics