正向運動學 vs 逆向運動學:新手一次搞懂

2026-07-02
  • forward-kinematics
  • inverse-kinematics
  • dh-parameters

問題定義

給定機械手臂每個關節的角度,末端執行器(end-effector)會在哪個位置?反過來,如果我想讓末端執行器到達某個位置,每個關節角度該設多少?前者是正向運動學,後者是逆向運動學。

原理說明

正向運動學(Forward Kinematics, FK)透過連續的座標轉換矩陣,把每個關節角度依序疊加,算出末端執行器相對於基座的位置與姿態:

T0n=T01T12Tn1nT_{0}^{n} = T_{0}^{1} \cdot T_{1}^{2} \cdots T_{n-1}^{n}

逆向運動學(Inverse Kinematics, IK)則是反過來,已知末端目標位置 T0nT_0^n,求解每個關節角度 θ1,θ2,,θn\theta_1, \theta_2, \dots, \theta_n。這個問題通常是非線性的,可能無解、恰好一組解,或有多組解。

程式碼範例

python
import numpy as np


def dh_transform(theta, d, a, alpha):
    return np.array([
        [np.cos(theta), -np.sin(theta) * np.cos(alpha), np.sin(theta) * np.sin(alpha), a * np.cos(theta)],
        [np.sin(theta), np.cos(theta) * np.cos(alpha), -np.cos(theta) * np.sin(alpha), a * np.sin(theta)],
        [0, np.sin(alpha), np.cos(alpha), d],
        [0, 0, 0, 1],
    ])

常見錯誤

  • 混淆旋轉順序(是先繞 z 軸還是先繞 x 軸),導致 DH 參數設錯
  • 誤以為 IK 一定有唯一解,忽略奇異點(singularity)的情況

延伸閱讀

常見問題

faq_01.log
正向運動學一定有解嗎?
是的,只要知道每個關節角度,末端點位置與姿態就能唯一計算出來。
faq_02.log
逆向運動學為什麼可能有多組解?
因為同一個末端位置,手臂可能有多種關節組合方式到達(例如手肘朝上或朝下)。