1. 运动学基础回顾:坐标系、DH参数与正逆解

各位同学,欢迎来到这门课。我是老周,搞了十几年机器人控制和嵌入式硬件。今天咱们先打好运动学的地基。别小看这些基础概念,我见过太多项目栽在坐标系没对齐、DH参数写反这种低级错误上。

说白了,运动学就是研究机器人“动起来”的数学关系。你给关节发个角度,末端执行器会跑到哪?反过来,你想让末端去抓个杯子,关节该转多少度?这两个问题,就是正运动学和逆运动学要解决的。

核心要点: 运动学标定的本质,就是通过实测数据修正理论模型中的参数误差。模型不准,后面所有控制都是空中楼阁。

1.1 机器人坐标系建立

搞机器人,第一件事就是定坐标系。我习惯把坐标系想象成“尺子”——你得先统一度量衡,才能谈位置和姿态。

一个完整的机器人系统,通常涉及这么几把“尺子”:

  • 世界坐标系(基坐标系):固定在机器人底座或工作空间地面,是所有运动的绝对参考。我一般把它放在机器人安装面的中心,Z轴朝上。
  • 关节坐标系:每个关节都有自己的坐标系,原点在关节轴线上。描述的是关节自身的转动或移动。
  • 工具坐标系(TCP):固定在末端执行器上,原点就是工具中心点(Tool Center Point)。你编程时控制的就是这个点。
  • 用户坐标系:为了方便编程,在工作台上任意定义的坐标系。比如焊接时沿着焊缝走,定义一个用户坐标系就简单多了。

这些坐标系之间通过齐次变换矩阵(4x4矩阵)互相转换。矩阵里包含了旋转(3x3)和平移(3x1)信息。嗯,这里要记住:矩阵乘法不满足交换律,左乘右乘顺序搞反,末端位置能差出十万八千里。我曾经在调试一个六轴协作臂时,就是因为把变换顺序写反了,结果机器人差点撞到夹具——从那以后,我每次写变换都先在纸上画一遍坐标链。

我的习惯: 在代码里用枚举类型定义所有坐标系ID,比如 FRAME_WORLD、FRAME_BASE、FRAME_TOOL。这样在矩阵运算时不容易搞混。

1.2 DH参数法详解

DH参数法,是Denavit和Hartenberg两位老前辈在1955年提出的。它的核心思想很巧妙:用4个参数就能完整描述相邻两个关节坐标系之间的变换关系。

这4个参数分别是:

参数 符号 物理含义 我的理解
连杆长度 ai-1 沿Xi-1轴,从Zi-1到Zi的距离 两个关节轴线之间的公垂线长度
连杆扭角 αi-1 绕Xi-1轴,从Zi-1到Zi的转角 两个关节轴线之间的夹角
连杆偏距 di 沿Zi轴,从Xi-1到Xi的距离 相邻连杆沿关节轴线的偏移
关节角 θi 绕Zi轴,从Xi-1到Xi的转角 关节变量(旋转关节)

你想想看,为什么是4个参数?因为三维空间里两个坐标系之间的变换,理论上需要6个自由度(3平移+3旋转)。但DH法利用了关节轴线的几何约束——相邻关节的Z轴要么平行要么相交——把自由度降到了4个。这就是它的精妙之处。

建立DH坐标系的步骤,我总结了一个口诀:

  1. 定Z轴:Zi轴沿关节i的轴线方向。
  2. 定原点:Zi和Zi-1的公垂线与Zi的交点,就是原点Oi。
  3. 定X轴:Xi轴沿公垂线方向,从Zi-1指向Zi。
  4. 定Y轴:右手定则,Yi = Zi × Xi。

有了这4个参数,相邻坐标系之间的变换矩阵就是:

T = Rot(X, α) * Trans(X, a) * Rot(Z, θ) * Trans(Z, d)

展开成4x4矩阵就是:

| cosθ    -sinθ    0     a |
| sinθ*cosα  cosθ*cosα  -sinα  -d*sinα |
| sinθ*sinα  cosθ*sinα   cosα   d*cosα |
| 0        0        0     1 |
避坑指南: 我曾经在标定一个SCARA机器人时,发现末端位置误差总是周期性波动。查了两天,最后发现是DH参数里d2的符号写反了——因为SCARA的关节2是移动关节,d是变量,符号错了整个运动学就反了。所以,一定要确认你的DH参数约定是标准DH还是改进DH,两者在参数定义上正好相反。

1.3 正运动学与逆运动学概念

这两个概念,说白了就是“已知关节求末端”和“已知末端求关节”。

正运动学:给定所有关节变量(θ1, θ2, ..., θn),求末端执行器在基坐标系下的位姿(位置+姿态)。

方法很简单:把每个关节的DH变换矩阵连乘起来。

T_0_n = T_0_1 * T_1_2 * ... * T_{n-1}_n

这个计算是确定性的,给一组关节角,末端位姿是唯一确定的。我在STM32上实现时,会用浮点运算,注意矩阵乘法要写对循环顺序,别把行和列搞混了。

逆运动学:给定末端位姿,求所有关节变量。

这就复杂多了。逆解通常有多个解(比如六轴机器人可能有8组解),甚至可能无解(末端位置超出工作空间)。求解方法主要有:

  • 解析法:通过代数或几何推导出封闭解。速度快,适合实时控制。但只适用于满足Pieper准则的机器人(相邻三个关节轴交于一点)。
  • 数值法:比如牛顿-拉夫森迭代、雅可比伪逆法。通用性强,但计算量大,且需要初值。

我个人在实际项目中,优先用解析法。如果机器人构型不满足Pieper准则,再用数值法。但数值法有个坑:迭代可能不收敛,或者收敛到错误的解。我一般会结合关节限位和避障需求,从多组解里选最优的。

经验之谈: 在STM32上跑逆解,如果计算资源紧张,可以预先离线计算好所有可能的解,存成查找表。在线运行时只做插值。我做过一个四轴码垛机器人,就是用查表法,把逆解时间从毫秒级降到了微秒级。

1.4 本章知识体系

下面这张图,把本章的核心逻辑串起来了。你从坐标系建立开始,到DH参数建模,再到正逆解计算,每一步都是环环相扣的。

运动学基础 — 知识体系 坐标系建立 DH参数建模 齐次变换矩阵 运动学方程 世界坐标系 关节/工具/用户坐标系 a, α, d, θ 标准DH vs 改进DH T = Π Ti-1,i 矩阵连乘 正运动学 vs 逆运动学 正解:关节 → 末端位姿 逆解:末端位姿 → 关节 解析法 / 数值法

这张图你看懂了吗?从坐标系到DH参数,再到变换矩阵,最后汇聚到正逆解。后面的章节,我们会在这个基础上,引入参数误差,然后讲怎么用最小二乘法把这些误差标定出来。