运动学基础回顾:正运动学与逆运动学、DH参数模型、关节空间与笛卡尔空间

各位工程师朋友,咱们开始第二章。这一章是后面所有标定和调参工作的地基。说白了,如果你连机器人怎么动、怎么算位置都搞不清楚,那后面谈精度补偿、谈稳定性,都是空中楼阁。

我见过不少刚入行的同事,一上来就调PID、调摩擦补偿,结果机器人走个直线都歪歪扭扭。为什么?因为运动学模型就没建对。所以,咱们今天花点时间,把正逆运动学、DH参数、还有关节空间和笛卡尔空间这几个核心概念,彻底捋一遍。

2.1 正运动学:从关节角度到末端位姿

正运动学,说白了就是:我知道每个关节转了多少度,求机器人手在哪儿、朝哪个方向。

这其实是个很直观的问题。你想想看,一个六轴机器人,六个电机一转,末端执行器就跑到某个位置去了。正运动学就是建立从关节角度 → 末端位姿的映射关系。

数学上,我们通常用齐次变换矩阵来描述。每个关节的变换矩阵可以写成:

T_i = Rot(z, θ_i) * Trans(z, d_i) * Trans(x, a_i) * Rot(x, α_i)

其中:

  • θ_i:关节角(绕z轴旋转)
  • d_i:连杆偏距(沿z轴平移)
  • a_i:连杆长度(沿x轴平移)
  • α_i:连杆扭角(绕x轴旋转)

然后,把从基座到末端的所有变换矩阵乘起来:

T_0_n = T_1 * T_2 * ... * T_n

这个 T_0_n 就是末端在基坐标系下的位姿。嗯,这里要注意,矩阵乘法顺序不能乱,从基座往末端依次左乘。

我的经验: 在实际项目中,我习惯先用MATLAB的Symbolic Toolbox把正运动学表达式推导一遍,然后生成C代码烧到控制器里。这样比手算靠谱得多,尤其是遇到臂型角、多解判断的时候。

2.2 逆运动学:从末端位姿到关节角度

逆运动学正好反过来:我知道机器人手要去哪个位置、什么姿态,求每个关节该转多少度。

这比正运动学难多了。为什么?因为逆运动学通常有多解,甚至无解。你想想看,一个六轴机器人,同一个末端位置,可能有8组不同的关节角度组合都能到达。这就是所谓的“多解问题”。

常见的逆运动学解法有两种:

  • 解析法(封闭解):适用于满足Pieper准则的机器人(后三个关节轴线交于一点)。速度快,精度高,我强烈推荐。
  • 数值法(迭代法):比如牛顿-拉夫森法。通用性强,但计算慢,而且可能不收敛。

避坑指南: 我曾经在一个协作机器人项目里,直接用数值法做逆解,结果在奇异点附近迭代发散,机器人直接“飞”了。后来我改成解析法+多解择优,才彻底解决这个问题。所以,能用解析法就别用数值法,除非你实在没办法。

逆运动学还有一个关键点:多解选择策略。比如,你希望机器人尽量少动关节,或者避开关节限位,或者避免碰撞。这些都需要在逆解之后加一个“择优”逻辑。

2.3 DH参数模型:运动学的“身份证”

DH参数,全称Denavit-Hartenberg参数。它是描述机器人连杆和关节几何关系的标准方法。每个关节用4个参数就能唯一确定:

参数 符号 物理含义 常见取值
关节角 θ 绕z轴的旋转角度 变量(旋转关节)
连杆偏距 d 沿z轴的平移距离 常量(旋转关节)
连杆长度 a 沿x轴的平移距离 常量
连杆扭角 α 绕x轴的旋转角度 常量

这里有个容易混淆的地方:标准DH和改进DH的区别。标准DH是把坐标系建在连杆末端,改进DH是建在连杆前端。我个人习惯用改进DH,因为它在树形结构和闭链机构中更直观。

注意: 很多机器人厂家提供的URDF文件里,用的就是改进DH。如果你自己建模型,一定要搞清楚用的是哪种约定,否则正逆运动学算出来全是错的。

下面这张图,是我自己总结的DH参数建模流程,你可以参考一下:

DH参数建模与运动学计算流程 定义连杆坐标系 提取DH参数表 构建齐次变换矩阵 正运动学:矩阵连乘 逆运动学:解析/数值解 关节空间 (q1, q2, ..., qn) 笛卡尔空间 (x, y, z, R) 关键点 DH参数是桥梁 连接关节与笛卡尔

2.4 关节空间与笛卡尔空间:两种“语言”

这两个概念,我刚开始学的时候也绕了很久。简单来说:

  • 关节空间:用每个关节的角度/位移来描述机器人的状态。比如 (q1, q2, q3, q4, q5, q6)。这是机器人“自己”的语言,控制器直接操作的就是关节。
  • 笛卡尔空间:用末端在三维空间中的位置和姿态来描述。比如 (x, y, z, roll, pitch, yaw)。这是人类和编程者更容易理解的语言。

你想想看,你让机器人“把手伸到桌子右上角”,这是笛卡尔空间的指令。但机器人实际执行时,必须把这条指令转换成6个关节的转动角度,这就是逆运动学干的事。反过来,机器人反馈回来的关节角度,也要通过正运动学转成笛卡尔坐标,你才知道它到底到没到位置。

实际应用中的选择:

  • 轨迹规划:通常在笛卡尔空间做直线、圆弧插补,更直观。
  • 速度控制:在关节空间做速度规划更简单,因为每个关节独立。
  • 力控/阻抗控制:通常在笛卡尔空间做,因为力和位置的关系更直接。

这里有个常见的坑:笛卡尔空间的直线运动,在关节空间里可能不是线性的。什么意思?就是末端走直线,每个关节的速度和加速度变化可能非常剧烈,尤其是在奇异点附近。所以,做笛卡尔空间轨迹规划时,一定要检查关节空间的可行性。

我的习惯: 在做标定之前,我会先用正运动学把机器人的理论工作空间画出来,看看有没有空洞或者奇异区域。这样后面做标定时,就能避开那些“天生”就不准的位置。

2.5 小结:运动学是标定的“尺子”

好了,这一章的内容就这些。正运动学、逆运动学、DH参数、关节空间和笛卡尔空间,这几个概念是贯穿整个课程的。后面讲标定,本质上就是修正DH参数里的误差;讲稳定性调参,本质上就是在关节空间和笛卡尔空间之间做权衡。