机械臂(Robotic Manipulator)是一种可编程的多自由度机械装置,能在三维空间完成抓取、搬运、装配等任务。从工业焊接到微创手术,机械臂已成为现代自动化的核心装备。
Denavit-Hartenberg参数为每个关节定义4个参数,通过齐次变换矩阵描述相邻连杆间的空间关系。
| 参数 | 符号 | 含义 | 类型 |
|---|---|---|---|
| 连杆长度 | 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 |
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}")| 构型 | 自由度 | 工作空间 | 典型应用 |
|---|---|---|---|
| 直角坐标 | 3P | 长方体 | 3D打印 |
| SCARA | 3R1P | 圆柱壳 | 装配分拣 |
| 关节型 | 6R | 复杂曲面 | 焊接喷涂 |
| 并联 | 6R并联 | 小体积高精度 | 精密定位 |
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反映了相邻关节轴的垂直关系。
本课程按"运动学→动力学→力控制→感知规划→实战项目"组织,每课都建立在前面知识基础上。理解本课后,你将:
完成本课后,你应该能够:
完成练习后,继续下一课的学习。本课内容将在后续课程中被反复使用和扩展。
齐次变换矩阵是描述三维空间中刚体位姿的数学工具。一个4×4的齐次变换矩阵T同时包含了旋转信息(3×3旋转矩阵R)和平移信息(3×1位置向量p):
旋转矩阵R是正交矩阵(RᵀR=I,det(R)=1),有3个自由度;位置向量p有3个自由度。因此一个刚体在三维空间中有6个自由度。
旋转有多种等价表示:
DH参数法为每个连杆建立一个坐标系,建立规则如下:
当相邻z轴平行或相交时,需要特殊处理。
实际机器人的运动学参数与设计值有偏差,需要通过运动学标定来补偿。标定流程:
标定后定位精度可从毫米级提升到0.1mm级别。
本课涉及的技术在以下场景中有重要应用:
理解理论与实践的差距,是成为优秀机器人工程师的关键。
仿真验证的算法通常需要以下适配才能部署到实际机器人:参数标定、实时性优化、异常处理、安全保护。仿真与现实的差距(sim-to-real gap)是机器人领域的重要挑战。
Python适合算法验证和原型开发,但生产级控制器通常用C++实现。Python的NumPy/SciPy计算效率约为C++的1/10到1/100,对于1kHz控制频率可能不够。可以使用Cython、Numba或直接C++重写来加速。
推荐步骤:(1) Python仿真验证算法正确性;(2) 添加传感器噪声和延迟模型测试鲁棒性;(3) 用C++重写核心计算模块;(4) 在低速度下实际测试;(5) 逐步提高速度和负载。安全永远是第一位的。
成功建立了第一个DH参数表并验证了正运动学!