Home
探索 Uedu
學生控制台
註冊會員/登入
研究知情同意中心
問卷中心
教師控制台
課程設定
支援與訊息
Uptime 數據

UeduGPTs

--

Jupyters

3

UG26 CISOSE26
陽明交大 AQI 47 29°C PM2.5 9

AI 回覆桌面通知

AI 助教回覆完成時顯示桌面通知

聊天訊息通知

同學在討論區發送訊息時通知

聲音通知

每當有新通知時播放提示音

機器人學

機械手臂為什麼能精準把零件放進孔裡?

從關節角度到空間位姿,建立機器人運動學與控制的數學骨架:正向/逆向運動學、雅可比矩陣、動力學與計算力矩控制。

機械手臂為什麼能精準把零件放進孔裡?

想像一條工業機械手臂(robotic manipulator),要把一顆螺絲精準地放進距離自己 80 公分外的孔位。馬達只知道每個關節「轉了幾度」,但工程師關心的卻是末端那支夾爪(end-effector)此刻在三維空間的哪個座標、朝向哪個方向。從「關節角度」到「空間位置」之間的這層翻譯,正是機器人運動學(kinematics)要解決的核心問題;而要讓手臂沿著我們想要的路徑平順移動,又必須加上控制(control)這一層。本篇就從這個看似簡單、實則牽涉大量幾何與線性代數的任務出發,把運動學與機器人控制的骨架建立起來。

機器人學概念示意圖

從關節空間到工作空間:座標轉換的語言

機器人最自然的描述變數是各個關節的角度或位移,我們把它們收集成一個向量,稱為關節空間(joint space)的座標:

$$ \mathbf{q} = \begin{bmatrix} q_1 & q_2 & \cdots & q_n \end{bmatrix}^\top $$

對於旋轉關節(revolute joint),$q_i$ 是轉角 $\theta_i$;對於平移關節(prismatic joint),$q_i$ 是滑移距離 $d_i$。而我們真正在意的末端位姿(pose),則活在工作空間(task space) 或稱笛卡兒空間(Cartesian space)裡,需要同時描述位置與姿態。

要在三維空間中同時記錄「平移」與「旋轉」,工程上採用 $4\times4$ 的齊次變換矩陣(homogeneous transformation matrix)

$$ \mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{p} \\ \mathbf{0}^\top & 1 \end{bmatrix} = \begin{bmatrix} r_{11} & r_{12} & r_{13} & p_x \\ r_{21} & r_{22} & r_{23} & p_y \\ r_{31} & r_{32} & r_{33} & p_z \\ 0 & 0 & 0 & 1 \end{bmatrix} $$

其中 $\mathbf{R} \in SO(3)$ 是 $3\times3$ 的旋轉矩陣(rotation matrix),描述姿態;$\mathbf{p} \in \mathbb{R}^3$ 是位置向量。旋轉矩陣的兩個關鍵性質是正交且行列式為 1:

$$ \mathbf{R}^\top \mathbf{R} = \mathbf{I}, \qquad \det(\mathbf{R}) = 1 $$

齊次矩陣最迷人的地方在於它的可組合性:若 $\mathbf{T}_1^0$ 描述座標系 1 相對於座標系 0,$\mathbf{T}_2^1$ 描述座標系 2 相對於座標系 1,則直接矩陣相乘即可串接:

$$ \mathbf{T}_2^0 = \mathbf{T}_1^0 \, \mathbf{T}_2^1 $$

這正是整條手臂能被「一節一節接起來」的數學基礎,也呼應了物理裡剛體運動可以分解為平移與旋轉的觀念。

正向運動學:給我關節角,還你末端位姿

正向運動學(forward kinematics, FK) 回答的問題是:已知所有關節變數 $\mathbf{q}$,末端的位姿 $\mathbf{T}$ 是多少?這個問題有唯一解,且可由連桿座標系逐節串接得到。

業界最通用的描述方式是 Denavit–Hartenberg(DH)參數法。它用四個參數 $(a_i, \alpha_i, d_i, \theta_i)$ 描述相鄰兩連桿之間的幾何關係:$a_i$ 為連桿長度、$\alpha_i$ 為連桿扭角、$d_i$ 為連桿偏移、$\theta_i$ 為關節角。每一節的變換矩陣寫成:

$$ \mathbf{A}_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i \cos\alpha_i & \sin\theta_i \sin\alpha_i & a_i \cos\theta_i \\ \sin\theta_i & \cos\theta_i \cos\alpha_i & -\cos\theta_i \sin\alpha_i & a_i \sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix} $$

整條 $n$ 軸手臂的正向運動學就是把每節串起來:

$$ \mathbf{T}_n^0(\mathbf{q}) = \mathbf{A}_1 \mathbf{A}_2 \cdots \mathbf{A}_n $$

以最簡單的平面二連桿手臂(兩個旋轉關節,連桿長 $l_1$、$l_2$,關節角 $\theta_1$、$\theta_2$)為例,末端位置有漂亮的閉式解:

$$ x = l_1 \cos\theta_1 + l_2 \cos(\theta_1 + \theta_2) $$ $$ y = l_1 \sin\theta_1 + l_2 \sin(\theta_1 + \theta_2) $$

注意第二項用的是 $\theta_1 + \theta_2$,因為第二節的角度是相對於第一節「累加」上去的——這正是齊次矩陣串接在背後默默幫我們處理好的角度疊加。

逆向運動學:給我目標位置,還你關節角

實務中我們通常反過來:「我要末端到 $(x, y, z)$、朝某個方向」,請問各關節該轉幾度?這就是逆向運動學(inverse kinematics, IK),難度遠高於 FK,原因有三:

  1. 非線性:方程式中充滿三角函數,無法簡單線性求解。
  2. 多解:同一個目標位置,手臂可能有「肘朝上」與「肘朝下」等多組解。
  3. 無解或奇異:若目標超出工作空間(workspace),則根本沒有解。

仍以平面二連桿為例,給定目標 $(x, y)$,可用餘弦定理求出 $\theta_2$:

$$ \cos\theta_2 = \frac{x^2 + y^2 - l_1^2 - l_2^2}{2 l_1 l_2} $$

$$ \theta_2 = \pm \arccos\!\left( \frac{x^2 + y^2 - l_1^2 - l_2^2}{2 l_1 l_2} \right) $$

正負號分別對應肘朝上與肘朝下兩組解。接著回代求 $\theta_1$:

$$ \theta_1 = \operatorname{atan2}(y, x) - \operatorname{atan2}\big(l_2 \sin\theta_2,\; l_1 + l_2 \cos\theta_2\big) $$

這裡務必使用 $\operatorname{atan2}$ 而非 $\arctan$,因為前者能正確處理四個象限,避免角度落在錯誤的範圍。對於六軸以上的複雜手臂,閉式解往往不存在,只能改用下一節要談的雅可比矩陣做數值迭代求解。

雅可比矩陣:把速度連起來

當手臂要沿著連續軌跡運動時,我們關心的不只是位置,更是速度雅可比矩陣(Jacobian matrix) $\mathbf{J}(\mathbf{q})$ 正是連接關節速度與末端速度的橋樑:

$$ \dot{\mathbf{x}} = \mathbf{J}(\mathbf{q}) \, \dot{\mathbf{q}} $$

其中 $\dot{\mathbf{x}}$ 是末端的線速度與角速度(合稱 twist),$\dot{\mathbf{q}}$ 是各關節角速度。雅可比是位姿對關節變數的偏微分:

$$ J_{ij} = \frac{\partial x_i}{\partial q_j} $$

對平面二連桿手臂,位置雅可比為:

$$ \mathbf{J} = \begin{bmatrix} -l_1 \sin\theta_1 - l_2 \sin(\theta_1 + \theta_2) & -l_2 \sin(\theta_1 + \theta_2) \\ \;\;\,l_1 \cos\theta_1 + l_2 \cos(\theta_1 + \theta_2) & \;\;\,l_2 \cos(\theta_1 + \theta_2) \end{bmatrix} $$

若要從末端期望速度反推關節速度,需對雅可比求逆:

$$ \dot{\mathbf{q}} = \mathbf{J}^{-1}(\mathbf{q}) \, \dot{\mathbf{x}} $$

但當 $\det(\mathbf{J}) = 0$ 時,矩陣不可逆,這個位形稱為奇異點(singularity)。在奇異點上,手臂會「失去一個自由度」,需要極大的關節速度才能產生微小的末端運動,控制器可能因此飽和甚至失控。雅可比也決定了力矩與外力的關係(靜力學對偶):

$$ \boldsymbol{\tau} = \mathbf{J}^\top(\mathbf{q}) \, \mathbf{F} $$

也就是說,同一個雅可比既描述速度傳遞,也描述力的傳遞——這個對偶關係在機器人力控制(force control)中極為關鍵。

動力學與控制:讓手臂真的動起來

知道「該轉到哪」還不夠,馬達輸出的是力矩(torque),必須透過動力學把力矩與運動連起來。機器人的運動方程式可由拉格朗日法導出,寫成標準形式:

$$ \mathbf{M}(\mathbf{q}) \ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) \dot{\mathbf{q}} + \mathbf{g}(\mathbf{q}) = \boldsymbol{\tau} $$

其中 $\mathbf{M}(\mathbf{q})$ 是慣量矩陣、$\mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}}$ 是科氏力與離心力項、$\mathbf{g}(\mathbf{q})$ 是重力項,$\boldsymbol{\tau}$ 是關節力矩。這條方程式本質上是牛頓第二定律 $\mathbf{F} = m\mathbf{a}$ 在多連桿系統的推廣,只是質量變成了會隨位形改變的慣量矩陣。

最直觀的控制策略是比例-微分(PD)控制,讓實際關節角 $\mathbf{q}$ 追上期望角 $\mathbf{q}_d$:

$$ \boldsymbol{\tau} = \mathbf{K}_p (\mathbf{q}_d - \mathbf{q}) + \mathbf{K}_d (\dot{\mathbf{q}}_d - \dot{\mathbf{q}}) $$

$\mathbf{K}_p$ 是比例增益(像彈簧把手臂拉向目標),$\mathbf{K}_d$ 是微分增益(像阻尼器抑制振盪)。但 PD 控制忽略了重力與耦合,會有穩態誤差。更精緻的做法是計算力矩控制(computed-torque control),利用動力學模型把非線性項先抵消掉:

$$ \boldsymbol{\tau} = \mathbf{M}(\mathbf{q})\big[\ddot{\mathbf{q}}_d + \mathbf{K}_d \dot{\mathbf{e}} + \mathbf{K}_p \mathbf{e}\big] + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})\dot{\mathbf{q}} + \mathbf{g}(\mathbf{q}) $$

其中誤差 $\mathbf{e} = \mathbf{q}_d - \mathbf{q}$。這個控制律巧妙地把非線性系統「線性化」成一組獨立的二階誤差方程 $\ddot{\mathbf{e}} + \mathbf{K}_d \dot{\mathbf{e}} + \mathbf{K}_p \mathbf{e} = \mathbf{0}$,只要把 $\mathbf{K}_p$、$\mathbf{K}_d$ 選成正定,誤差就會指數收斂到零。

看一個例子

設一支平面二連桿手臂,連桿長 $l_1 = 0.5\,\text{m}$、$l_2 = 0.3\,\text{m}$,目前關節角 $\theta_1 = 30^\circ$、$\theta_2 = 45^\circ$。

正向運動學——末端在哪裡?

$$ x = 0.5\cos 30^\circ + 0.3\cos 75^\circ = 0.5(0.866) + 0.3(0.259) = 0.510\,\text{m} $$ $$ y = 0.5\sin 30^\circ + 0.3\sin 75^\circ = 0.5(0.5) + 0.3(0.966) = 0.540\,\text{m} $$

末端目前位於 $(0.510,\ 0.540)\,\text{m}$。

逆向運動學——若想讓末端到 $(0.6,\ 0.4)$ 呢?

先求 $\theta_2$:

$$ \cos\theta_2 = \frac{0.6^2 + 0.4^2 - 0.5^2 - 0.3^2}{2(0.5)(0.3)} = \frac{0.36 + 0.16 - 0.25 - 0.09}{0.30} = \frac{0.18}{0.30} = 0.6 $$

$$ \theta_2 = \arccos(0.6) = 53.1^\circ \quad (\text{取肘朝上解}) $$

再求 $\theta_1$:

$$ \theta_1 = \operatorname{atan2}(0.4, 0.6) - \operatorname{atan2}\big(0.3\sin 53.1^\circ,\; 0.5 + 0.3\cos 53.1^\circ\big) $$ $$ = 33.7^\circ - \operatorname{atan2}(0.240,\ 0.680) = 33.7^\circ - 19.4^\circ = 14.3^\circ $$

所以要把末端送到 $(0.6, 0.4)$,需把關節角設為 $\theta_1 \approx 14.3^\circ$、$\theta_2 \approx 53.1^\circ$。

檢查奇異點: 當 $\theta_2 = 0^\circ$ 或 $180^\circ$ 時,$\sin\theta_2 = 0$,此時雅可比的行列式 $\det(\mathbf{J}) = l_1 l_2 \sin\theta_2 = 0$,手臂完全伸直或完全摺疊,落入奇異位形。本例 $\theta_2 = 53.1^\circ$ 遠離奇異點,控制上是安全的。

重點回顧

  1. 運動學分兩個方向:正向運動學(FK)由關節角算末端位姿,有唯一解;逆向運動學(IK)由目標位姿反推關節角,可能多解、無解或落在奇異點。
  2. 齊次變換矩陣 $4\times4$ 同時封裝旋轉 $\mathbf{R}$ 與平移 $\mathbf{p}$,並以矩陣相乘串接各連桿,DH 參數法是業界標準的系統化描述方式。
  3. 雅可比矩陣 $\mathbf{J}$ 連接關節速度與末端速度($\dot{\mathbf{x}} = \mathbf{J}\dot{\mathbf{q}}$),其轉置 $\mathbf{J}^\top$ 又連接力與力矩;$\det(\mathbf{J}) = 0$ 處為奇異點,須避開。
  4. 逆向運動學算角度時務必用 $\operatorname{atan2}$,才能正確涵蓋四個象限。
  5. 控制層面:PD 控制簡單但有穩態誤差;計算力矩控制利用動力學模型抵消非線性項,能達成誤差指數收斂。

深入探討(研究所視角)

進入研究層級,運動學與控制會延伸出幾個更深的方向:

冗餘機器人與虛逆。 當關節自由度 $n$ 大於任務維度 $m$(例如七軸手臂執行六維任務),雅可比是長方形矩陣,$\mathbf{J}^{-1}$ 不存在。此時改用 Moore–Penrose 虛逆(pseudo-inverse)

$$ \dot{\mathbf{q}} = \mathbf{J}^{+} \dot{\mathbf{x}} + (\mathbf{I} - \mathbf{J}^{+}\mathbf{J})\,\dot{\mathbf{q}}_0 $$

其中 $\mathbf{J}^{+} = \mathbf{J}^\top(\mathbf{J}\mathbf{J}^\top)^{-1}$。第一項給出最小範數解,第二項是零空間(null space) 投影,可在不影響末端運動的前提下,額外執行避障、避奇異或關節極限等次要任務——這是冗餘機器人靈巧度的數學來源。

奇異點的工程處理。 在奇異點附近直接求虛逆會因條件數爆炸而產生極大關節速度。實務上採用阻尼最小平方法(damped least squares, DLS)

$$ \dot{\mathbf{q}} = \mathbf{J}^\top (\mathbf{J}\mathbf{J}^\top + \lambda^2 \mathbf{I})^{-1} \dot{\mathbf{x}} $$

阻尼因子 $\lambda$ 在奇異點附近犧牲少許精度以換取數值穩定,是工業控制器的標準防護。

姿態表示的選擇。 旋轉矩陣有 9 個元素卻只有 3 個自由度,存在冗餘。歐拉角(Euler angles)會遭遇萬向鎖(gimbal lock),因此進階應用多採用四元數(quaternion) 或李群 $SE(3)$ 的指數座標(exponential coordinates),後者也催生了現代的旋量理論(screw theory) 與乘積指數公式(product of exponentials, PoE),讓運動學描述更為簡潔且無奇異參數化問題。

控制的前沿。 從計算力矩控制再往前,包含對模型不確定性具強健性的滑模控制(sliding mode control)、能線上估計未知參數的自適應控制(adaptive control),以及處理接觸與外力的阻抗/導納控制(impedance / admittance control)。近年資料驅動方法(如強化學習與模仿學習)也逐漸用於難以精確建模的柔性與接觸密集任務,但無論方法多新,背後仍以本篇的運動學與動力學方程作為物理先驗。理解這套經典骨架,才有能力判斷哪些是真正的進步、哪些只是換了包裝。

AI 共讀助教正在陪你讀:機械手臂為什麼能精準把零件放進孔裡?
嗨!我是這篇文章的共讀助教,只根據〈機械手臂為什麼能精準把零件放進孔裡?〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。