正向運動學 vs 逆向運動學:新手一次搞懂
2026-07-02
- forward-kinematics
- inverse-kinematics
- dh-parameters
問題定義
給定機械手臂每個關節的角度,末端執行器(end-effector)會在哪個位置?反過來,如果我想讓末端執行器到達某個位置,每個關節角度該設多少?前者是正向運動學,後者是逆向運動學。
原理說明
正向運動學(Forward Kinematics, FK)透過連續的座標轉換矩陣,把每個關節角度依序疊加,算出末端執行器相對於基座的位置與姿態:
逆向運動學(Inverse Kinematics, IK)則是反過來,已知末端目標位置 ,求解每個關節角度 。這個問題通常是非線性的,可能無解、恰好一組解,或有多組解。
程式碼範例
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