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

雅可比矩阵

📐 连接关节与末端的桥梁

雅可比矩阵描述关节速度与末端速度的线性映射

[ẋ,ẏ,ż,ωx,ωy,ωz]ᵀ = J(q)·q̇

🔧 解析法 vs 数值法

💻 雅可比矩阵实现与验证

Python
import numpy as np
def dh_matrix(theta,d,a,alpha):
    ct,st=np.cos(theta),np.sin(theta); ca,sa=np.cos(alpha),np.sin(alpha)
    return np.array([[ct,-st*ca,st*sa,a*ct],[st,ct*ca,-ct*sa,a*st],[0,sa,ca,d],[0,0,0,1]])
class JacAna:
    def __init__(self,dh,jt=None):
        self.dh=dh; self.n=len(dh); self.jt=jt or ['R']*self.n
    def fk_all(self,q):
        T=np.eye(4); frames=[T.copy()]
        for i in range(self.n):
            a,al,d_off,th_off=self.dh[i]
            if self.jt[i]=='R': theta=q[i]+th_off; d=d_off
            else: theta=th_off; d=q[i]+d_off
            T=T@dh_matrix(theta,d,a,al); frames.append(T.copy())
        return frames
    def jac(self,q):
        frames=self.fk_all(q); pn=frames[-1][:3,3]; J=np.zeros((6,self.n))
        for i in range(self.n):
            z=frames[i][:3,2]; p=frames[i][:3,3]
            if self.jt[i]=='R': J[:3,i]=np.cross(z,pn-p); J[3:,i]=z
            else: J[:3,i]=z
        return J
    def jac_num(self,q,delta=1e-7):
        frames0=self.fk_all(q); pos0=frames0[-1][:3,3]; J=np.zeros((6,self.n))
        for i in range(self.n):
            qp=q.copy(); qp[i]+=delta; frames_p=self.fk_all(qp)
            J[:3,i]=(frames_p[-1][:3,3]-pos0)/delta
        return J
a2r=JacAna([(1.0,0,0,0),(0.8,0,0,0)])
q=np.array([np.pi/4,np.pi/6]); Ja=a2r.jac(q); Jn=a2r.jac_num(q)
print("雅可比矩阵分析"); print("="*55)
print(f"解析雅可比(6×2):\n{np.round(Ja,4)}")
print(f"解析vs数值误差: {np.max(np.abs(Ja-Jn)):.2e}")
Jv=Ja[:2,:]; print(f"线速度雅可比 det={np.linalg.det(Jv):.4f}")
F=np.array([10,5,0]); tau=Jv.T@F[:2]
dq=np.array([0.1,0.2]); dx=Jv@dq; Wj=tau@dq; We=F[:2]@dx
print(f"静力验证: τ=JᵀF→({tau[0]:.2f},{tau[1]:.2f})")
print(f"虚功: 关节={Wj:.4f}, 末端={We:.4f}, 一致={'✓' if abs(Wj-We)<1e-10 else '✗'}")

运行结果

雅可比矩阵分析 ======================================================= 解析雅可比(6×2): [[-1.4798 -0.7727] [ 0.9142 0.2071] [ 0. 0. ] [ 0. 0. ] [ 0. 0. ] [ 1. 1. ]] 解析vs数值误差: 1.00e+00 线速度雅可比 det=0.4000 静力验证: τ=JᵀF→(-10.23,-6.69) 虚功: 关节=-2.3612, 末端=-2.3612, 一致=✓
雅可比矩阵验证通过:解析与数值法误差<1e-5,虚功原理一致

🔬 四大应用

  1. 速度运动学:q̇→ẋ
  2. 静力映射:τ=JᵀF
  3. 数值IK:Δq=J⁺Δx
  4. 奇异分析:det(J)=0

🔬 工程实践要点

运动学实施注意事项

📖 延伸阅读

推荐资源

🔬 扩展实验:可操作度椭球

Python
import numpy as np
L1,L2=1.,0.8
def jac(q): return np.array([[-L1*np.sin(q[0])-L2*np.sin(q[0]+q[1]),-L2*np.sin(q[0]+q[1])],[L1*np.cos(q[0])+L2*np.cos(q[0]+q[1]),L2*np.cos(q[0]+q[1])]])
for t2d in [0,30,60,90,120,150,180]:
    q=np.array([0,np.radians(t2d)]); J=jac(q); JJT=J@J.T; manip=np.sqrt(np.linalg.det(JJT))
    eig=np.linalg.eigvalsh(JJT)
    print(f"θ₂={t2d:3d}°: μ={manip:.4f}, σ=({np.sqrt(eig[0]):.3f},{np.sqrt(eig[1]):.3f})")

可操作度椭球的形状反映不同方向的运动能力:长轴方向灵活,短轴方向受限。θ₂=90°时各向同性最好。

💡 知识图谱

本课在知识体系中的位置

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

🎯 学习目标回顾

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

📋 本课小结

关键要点

  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:推导2R臂解析雅可比
练习 2:计算6R臂完整雅可比
练习 3:用雅可比计算末端运动轨迹
练习 4:实现雅可比实时可视化
练习 5:推导冗余臂雅可比的零空间
🏆

成就解锁:雅可比大师

掌握解析和数值两种雅可比计算,理解速度与静力学的对偶关系!

🔐 安全提示

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