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

机械臂概述与DH参数

🤖 什么是机械臂?

机械臂(Robotic Manipulator)是一种可编程的多自由度机械装置,能在三维空间完成抓取、搬运、装配等任务。从工业焊接到微创手术,机械臂已成为现代自动化的核心装备。

核心组成

📐 DH参数——运动学的基石

Denavit-Hartenberg参数为每个关节定义4个参数,通过齐次变换矩阵描述相邻连杆间的空间关系。

DH参数四要素

参数符号含义类型
连杆长度ai沿xi轴,zi-1到zi的距离常数
连杆扭角αi绕xi轴,zi-1到zi的转角常数
关节距离di沿zi-1轴,xi-1到xi的距离变量P/常数R
关节角θi绕zi-1轴,xi-1到xi的转角变量R/常数P
T_i = Rot(z,θ_i)·Trans(z,d_i)·Trans(x,a_i)·Rot(x,α_i)
T_i = [cosθ -sinθ·cosα sinθ·sinα a·cosθ]
[sinθ cosθ·cosα -cosθ·sinα a·sinθ]
[ 0 sinα cosα d ]
[ 0 0 0 1 ]

💻 代码实现:DH变换矩阵

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]])
L1,L2=1.0,0.8; t1,t2=np.pi/4,np.pi/6
T=np.eye(4)
for i,(th,d,a,al) in enumerate([(t1,0,L1,0),(t2,0,L2,0)]):
    Ti=dh_matrix(th,d,a,al); T=T@Ti
    print(f"T{i+1}:\n{np.round(Ti,4)}")
pos=T[:3,3]; print(f"末端: x={pos[0]:.4f}, y={pos[1]:.4f}, z={pos[2]:.4f}")
x_ch=L1*np.cos(t1)+L2*np.cos(t1+t2); y_ch=L1*np.sin(t1)+L2*np.sin(t1+t2)
print(f"解析解: x={x_ch:.4f}, y={y_ch:.4f}")
print(f"误差: {abs(pos[0]-x_ch)+abs(pos[1]-y_ch):.2e}")

运行结果

T1: [[ 0.7071 -0.7071 0. 0.7071] [ 0.7071 0.7071 -0. 0.7071] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ]] T2: [[ 0.866 -0.5 0. 0.6928] [ 0.5 0.866 -0. 0.4 ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ]] 末端: x=0.9142, y=1.4798, z=0.0000 解析解: x=0.9142, y=1.4798 误差: 1.11e-16
DH变换矩阵计算验证通过:数值解与解析解一致

📊 常见机械臂构型对比

构型自由度工作空间典型应用
直角坐标3P长方体3D打印
SCARA3R1P圆柱壳装配分拣
关节型6R复杂曲面焊接喷涂
并联6R并联小体积高精度精密定位

🔬 DH参数建立步骤

  1. 为每个关节确定z轴方向
  2. 确定基坐标系
  3. 对i=1..n:求公垂线→定原点→定x轴→定y轴
  4. 按规则读取4个DH参数
DH参数有标准DH和修正DH(Craig)两种约定,不同教材可能不同,注意区分!

🔬 工程实践要点

运动学实施注意事项

📖 延伸阅读

推荐资源

🔬 扩展实验:3R空间臂DH参数

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]])
# 3R空间臂
dh_3r=[(0,np.pi/2,0.5,0),(1.0,0,0,0),(0.8,0,0,0)]
q=np.array([np.pi/6,np.pi/4,-np.pi/3])
T=np.eye(4)
for i,(a,al,d,th) in enumerate(dh_3r):
    Ti=dh_matrix(q[i]+th,d,a,al); T=T@Ti
    print(f"关节{i+1}变换后末端: {np.round(T[:3,3],4)}")
print(f"最终末端: {np.round(T[:3,3],4)}")

3R空间臂增加了竖直轴旋转,使末端可以在三维空间运动。DH参数中的α=π/2反映了相邻关节轴的垂直关系。

💡 知识图谱

本课在知识体系中的位置

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

🎯 学习目标回顾

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

📋 本课小结

关键要点

  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空间臂建立DH参数表
练习 2:验证θ₁=0,θ₂=π/2时2R臂末端位置
练习 3:修改代码添加第3关节
练习 4:对比标准DH与修正DH的变换矩阵差异
练习 5:给出PUMA 560的完整DH参数表
🏆

成就解锁:DH参数初学者

成功建立了第一个DH参数表并验证了正运动学!