第 3 课 / 共 30 课📐 运动学阶段

逆运动学(解析解)

🎯 逆运动学的挑战

逆运动学(IK)解决:已知末端位姿,求关节变量。这是实际应用最常见的需求。

难点

📐 2R平面臂解析解推导

Step1: x²+y² = L₁²+L₂²+2L₁L₂cosθ₂

cosθ₂ = (x²+y²-L₁²-L₂²)/(2L₁L₂)
θ₂ = ±arccos[...] ← 两个解!
θ₁ = atan2(y,x) - atan2(L₂sinθ₂, L₁+L₂cosθ₂)

💻 解析IK实现

Python
import numpy as np
def ik_2r(x,y,L1=1.0,L2=0.8,elbow='up'):
    d2=x**2+y**2; d=np.sqrt(d2)
    if d>L1+L2+1e-6: return None
    if d

运行结果

2R平面臂逆运动学解析解 ============================================================ 目标(1.5,0.5): 肘上: θ=(-6.8°,57.5°) 误差=5.6e-17 肘下: θ=(43.7°,-57.5°) 误差=0.0e+00 目标(0.5,1.2): 肘上: θ=(29.4°,88.2°) 误差=2.3e-16 肘下: θ=(105.3°,-88.2°) 误差=0.0e+00 目标(1.8,0.0): 肘上: θ=(0.0°,0.0°) 误差=0.0e+00 肘下: θ=(0.0°,-0.0°) 误差=0.0e+00 目标(0.2,0.0): 肘上: θ=(0.0°,180.0°) 误差=1.1e-16 肘下: θ=(0.0°,-180.0°) 误差=1.1e-16 目标(2.0,0.0): 肘上: 无解 肘下: 无解
逆运动学解析解验证通过:正逆运动学闭环误差 < 1e-10
解析IK仅适用于简单构型,一般构型需数值方法(第4课)

🔬 工程实践要点

运动学实施注意事项

📖 延伸阅读

推荐资源

🔬 扩展实验:肘上/肘下解对比

Python
import numpy as np
L1,L2=1.0,0.8
def ik(x,y,elbow="up"):
    d2=x**2+y**2; c2=np.clip((d2-L1**2-L2**2)/(2*L1*L2),-1,1); s2=np.sqrt(1-c2**2)
    if elbow=="down": s2=-s2
    t2=np.arctan2(s2,c2); t1=np.arctan2(y,x)-np.arctan2(L2*s2,L1+L2*c2)
    return t1,t2
for x,y in [(1.0,0.8),(0.5,1.0),(1.3,0.5)]:
    tu,td=ik(x,y,"up"),ik(x,y,"down")
    print(f"({x:.1f},{y:.1f}): 肘上=({np.degrees(tu[0]):.1f}°,{np.degrees(tu[1]):.1f}°) 肘下=({np.degrees(td[0]):.1f}°,{np.degrees(td[1]):.1f}°)")

肘上解和肘下解在关节空间完全不同,但在笛卡尔空间到达同一点。选择哪个解取决于关节限位和避障需求。

💡 知识图谱

本课在知识体系中的位置

本课程按"运动学→动力学→力控制→感知规划→实战项目"组织,每课都建立在前面知识基础上。理解本课后,你将:

🎯 学习目标回顾

完成本课后,你应该能够:

📋 本课小结

关键要点

  1. 本课的核心概念和公式已在仿真中验证
  2. Python实现提供了从理论到代码的完整路径
  3. 课后练习将帮助你深化理解和应用能力

下一步

完成练习后,继续下一课的学习。本课内容将在后续课程中被反复使用和扩展。

📚 运动学理论基础

齐次变换矩阵

齐次变换矩阵是描述三维空间中刚体位姿的数学工具。一个4×4的齐次变换矩阵T同时包含了旋转信息(3×3旋转矩阵R)和平移信息(3×1位置向量p):

T = [R p]
[0 1]

旋转矩阵R是正交矩阵(RᵀR=I,det(R)=1),有3个自由度;位置向量p有3个自由度。因此一个刚体在三维空间中有6个自由度。

欧拉角与旋转表示

旋转有多种等价表示:

连杆坐标系的建立规则

DH参数法为每个连杆建立一个坐标系,建立规则如下:

  1. zi轴沿关节i+1的运动轴方向
  2. xi轴沿zi-1和zi的公垂线方向
  3. yi轴由右手定则确定
  4. 原点Oi在xi与zi的交点

当相邻z轴平行或相交时,需要特殊处理。

运动学标定

实际机器人的运动学参数与设计值有偏差,需要通过运动学标定来补偿。标定流程:

  1. 移动机器人到多组已知位姿
  2. 用外部测量设备(激光跟踪仪/视觉)测量末端实际位姿
  3. 建立参数与末端位姿的误差模型
  4. 用最小二乘法辨识DH参数修正量
  5. 更新控制器中的运动学参数

标定后定位精度可从毫米级提升到0.1mm级别。

🏭 工业应用实例

本课知识在实际工程中的应用

本课涉及的技术在以下场景中有重要应用:

理解理论与实践的差距,是成为优秀机器人工程师的关键。

❓ 常见问题解答

Q1: 本课的算法在实际机器人上能直接使用吗?

仿真验证的算法通常需要以下适配才能部署到实际机器人:参数标定、实时性优化、异常处理、安全保护。仿真与现实的差距(sim-to-real gap)是机器人领域的重要挑战。

Q2: Python实现的效率够用吗?

Python适合算法验证和原型开发,但生产级控制器通常用C++实现。Python的NumPy/SciPy计算效率约为C++的1/10到1/100,对于1kHz控制频率可能不够。可以使用Cython、Numba或直接C++重写来加速。

Q3: 如何从仿真过渡到实际机器人?

推荐步骤:(1) Python仿真验证算法正确性;(2) 添加传感器噪声和延迟模型测试鲁棒性;(3) 用C++重写核心计算模块;(4) 在低速度下实际测试;(5) 逐步提高速度和负载。安全永远是第一位的。

🐛 调试技巧

本课代码的常见问题和调试方法

📝 课后练习

练习 1:推导3R平面臂的解析IK
练习 2:分析L₁=L₂时工作空间的特殊性质
练习 3:实现关节限位约束的IK
练习 4:用三角代换法重新推导2R臂IK
练习 5:写出PUMA 560的解析IK过程
🏆

成就解锁:逆运动学解析师

掌握了几何法和代数法求解逆运动学!

🔐 安全提示

在实际机器人上实验时,请始终遵循以下安全规则: