3、运动学基础(上):机械臂正运动学、DH参数法、标准DH与改进DH的区别
各位同学,今天咱们来啃一块硬骨头——机械臂的运动学基础。
说实话,我刚入行那会儿,觉得运动学就是一堆矩阵乘法,枯燥得很。直到有一次,我调试一台六轴协作臂,发现末端怎么都对不准目标点。折腾了两天,最后发现是DH参数里一个符号搞反了。嗯,从那以后,我再也不敢小看这章内容了。
3.1 什么是正运动学?
正运动学,说白了就是:已知关节角度,求末端位姿。
你给机器人每个关节发一个角度值,比如关节1转30度,关节2转45度……然后它告诉你,我的手现在在空间哪个位置、朝向哪里。这就是正运动学干的事。
我习惯把它比作「从骨头到指尖」的映射。你想想看,你的肩膀转一下,肘部弯一下,手腕扭一下,指尖的位置就变了。机械臂也一样,每个关节的变化,最终都会反映到末端执行器上。
核心公式:
T = T1 · T2 · T3 · … · Tn
其中 T 是末端位姿矩阵,Ti 是第 i 个关节的变换矩阵。
正运动学是唯一解。你给定一组关节角,末端位姿是确定的。这跟逆运动学不一样,逆运动学经常有多解甚至无解的情况。做路径规划的时候,我一般先用正运动学快速验证轨迹是否在可达空间内。
3.2 DH参数法——机械臂建模的通用语言
DH参数法,全称Denavit-Hartenberg参数法。这是1955年提出的方法,到现在还是机器人领域的标配。
为什么它这么流行?因为它用四个参数就能完整描述两个相邻关节之间的变换关系。这四个参数分别是:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | ai | 沿Xi轴,从Zi-1到Zi的距离 |
| 连杆扭角 | αi | 绕Xi轴,从Zi-1到Zi的转角 |
| 连杆偏距 | di | 沿Zi-1轴,从Xi-1到Xi的距离 |
| 关节角 | θi | 绕Zi-1轴,从Xi-1到Xi的转角 |
我刚开始学的时候,总觉得这四个参数记不住。后来我总结了一个口诀:「先绕Z转θ,再沿Z移d,再沿X移a,最后绕X转α」。你按这个顺序来,永远不会乱。
个人经验:写DH参数表的时候,我习惯先画一个简图,把每个关节的Z轴标出来。Z轴方向定了,X轴方向自然就定了。很多新手一上来就填参数,结果填错了都不知道错在哪。
3.3 标准DH vs 改进DH
这里有个坑,我当年踩过。DH参数法其实有两个版本:标准DH(Standard DH)和改进DH(Modified DH)。
它们本质上描述的是同一个东西,但坐标系定义方式不同。你想想看,如果两个人在同一个项目里,一个用标准DH,一个用改进DH,那代码肯定对不上。
3.3.1 标准DH(SDH)
标准DH的坐标系定义规则是:
- Zi轴沿关节i的轴线方向
- Xi轴沿Zi和Zi+1的公垂线方向
- 变换顺序:先绕Zi-1转θi,再沿Zi-1移di,再沿Xi移ai,最后绕Xi转αi
标准DH的变换矩阵是:
T = Rot(z, θ) · Trans(z, d) · Trans(x, a) · Rot(x, α)
3.3.2 改进DH(MDH)
改进DH是Craig在《Introduction to Robotics》里推广的版本。它的坐标系定义略有不同:
- Zi轴沿关节i+1的轴线方向
- Xi轴沿Zi和Zi-1的公垂线方向
- 变换顺序:先绕Xi-1转αi-1,再沿Xi-1移ai-1,再绕Zi转θi,最后沿Zi移di
改进DH的变换矩阵是:
T = Rot(x, α) · Trans(x, a) · Rot(z, θ) · Trans(z, d)
注意:我曾经在一个项目里,同事用标准DH建模,我用改进DH写控制器。结果末端位姿差了十万八千里。排查了整整一天才发现是DH版本不一致。所以,团队协作时一定要统一DH版本!
3.4 两者的核心区别
我整理了一个对比表,方便你理解:
| 对比项 | 标准DH | 改进DH |
|---|---|---|
| Z轴定义 | Zi沿关节i轴线 | Zi沿关节i+1轴线 |
| X轴定义 | 沿Zi到Zi+1的公垂线 | 沿Zi到Zi-1的公垂线 |
| 变换顺序 | θ → d → a → α | α → a → θ → d |
| 参数归属 | 参数下标与关节i对应 | 参数下标与连杆i-1对应 |
| 常见教材 | Paul, Siciliano | Craig, Lynch |
说白了,标准DH是把变换参数「挂」在关节上,改进DH是把参数「挂」在连杆上。我个人习惯用改进DH,因为它的参数物理意义更直观——a和α描述的是连杆本身的几何,θ和d描述的是关节的运动。
3.5 知识体系总览
下面这张图,是我画的本章节知识结构。你可以把它当作一个「导航图」:
3.6 实战中的避坑指南
最后,分享几个我踩过的坑:
- Z轴方向搞反——我曾经把Z轴正方向定义反了,结果正运动学算出来的末端位置在机器人背后。检查了三个小时才发现。
- 忘记考虑初始关节偏置——很多机械臂的关节零点并不是DH参数里的θ=0。你需要在DH参数里加上一个偏置量。
- 坐标系编号混乱——我建议基座标系编号为0,第一个关节编号为1,最后一个关节编号为n。这样末端坐标系就是n。统一编号规则,能省很多沟通成本。
- 没有验证——写完正运动学代码后,一定要用几个已知的关节角度去验证。比如所有关节角为0时,末端应该在什么位置?这个位置对不对?
一个小技巧:验证正运动学的时候,我习惯用「单关节运动法」。就是只动一个关节,其他关节锁死,看末端轨迹是不是一个圆弧。如果是,说明这个关节的DH参数基本正确。
好了,运动学基础的上半部分就到这里。记住,DH参数法是机械臂建模的基石,标准DH和改进DH没有谁对谁错,关键是要统一。下一节我们会讲逆运动学,到时候你会发现,正运动学学得扎实,逆运动学才能推得顺。