2、坐标系与运动学基础

说实话,做运动控制这些年,我最大的体会就是——坐标系搞不明白,后面全白搭。不管是写代码还是调参数,坐标系就是你的「世界观」。今天咱们就把这块地基打牢。

2.1 笛卡尔坐标系:我们最熟悉的「世界」

笛卡尔坐标系,说白了就是三维空间里的XYZ轴。我习惯把右手伸出来比划一下:拇指是X,食指是Y,中指是Z。嗯,这就是右手定则。

在实际项目中,我遇到过不少新手把坐标系搞反。比如机器人底座坐标系和工具坐标系混用,结果一运动就撞限位。所以我的建议是:先定好世界坐标系,再谈其他

核心要点:

  • 笛卡尔坐标系用 (x, y, z) 表示位置
  • 用 (Rx, Ry, Rz) 表示姿态(旋转角度)
  • 位置+姿态 = 6自由度位姿

2.2 关节坐标系:机器人的「母语」

你想想看,机器人关节电机转多少度,它才不管什么XYZ。关节坐标系就是每个轴的角度值。比如六轴机器人,关节坐标就是 (J1, J2, J3, J4, J5, J6)。

我记得刚入行时,总喜欢在笛卡尔空间里规划路径。后来发现,关节空间才是机器人最舒服的语言。为什么?因为关节运动不会出现奇异点,也不会因为逆解算不出来而报错。

我的经验:调试阶段先用关节坐标手动走一遍,确认每个轴都能动。再用笛卡尔坐标做轨迹规划。这个顺序能省不少排查时间。

2.3 正运动学:从关节到笛卡尔

正运动学,就是已知每个关节的角度,求末端的位置和姿态。说白了,就是「我知道每个关节怎么转,告诉我手在哪」。

公式长这样:

T = f(θ1, θ2, θ3, θ4, θ5, θ6)

其中 T 是4x4的齐次变换矩阵,θ 是关节角度。这个 f 函数,其实就是一堆三角函数和矩阵乘法。

我做过一个SCARA机器人的正解,代码大概这样:

def forward_kinematics(theta1, theta2, d3, theta4):
    # 简化版SCARA正解
    L1 = 0.3  # 大臂长度
    L2 = 0.2  # 小臂长度
    
    x = L1*cos(theta1) + L2*cos(theta1+theta2)
    y = L1*sin(theta1) + L2*sin(theta1+theta2)
    z = d3
    rz = theta1 + theta2 + theta4
    
    return [x, y, z, rz]

注意:正运动学的结果是唯一的。给定一组关节角,末端位姿是确定的。这一点和逆运动学完全不同。

2.4 逆运动学:从笛卡尔到关节

逆运动学就反过来了——我知道手要放到哪,求每个关节该转多少度。这是运动控制里最头疼的部分。

为什么头疼?因为:

  • 解不唯一:同一个位置,可能有多种关节姿态
  • 可能无解:目标点超出了工作空间
  • 奇异点:某些位置会导致关节速度无穷大

我曾经在调试六轴机器人时,遇到一个诡异的问题:路径规划明明没问题,但一到某个点就剧烈抖动。排查了两天,最后发现是逆解选错了构型。嗯,从那以后我写逆解代码都会加上构型选择参数。

避坑指南:

  • 逆解前先判断目标点是否在工作空间内
  • 多解时优先选择关节变化最小的解
  • 靠近奇异点时切换到关节空间运动

2.5 齐次变换矩阵:运动学的「瑞士军刀」

齐次变换矩阵,说白了就是一个4x4的矩阵,同时包含了旋转和位移信息。结构如下:

| R11  R12  R13  Tx |
| R21  R22  R23  Ty |
| R31  R32  R33  Tz |
|  0    0    0    1  |

左上角3x3是旋转矩阵,右上角3x1是位移向量。最后一行固定是 [0 0 0 1]。

为什么用4x4?因为这样可以把旋转和平移统一成矩阵乘法。你想想看,如果分开算,又要加又要乘,多麻烦。用齐次矩阵,一连串变换就是一连串矩阵相乘:

T_总 = T_1 * T_2 * T_3 * ...

我习惯把每个关节的变换矩阵写成一个函数,然后链式乘起来。这样代码结构清晰,调试也方便。

小技巧:写代码时把齐次矩阵的乘法封装成一个函数,比如 multiply(T1, T2)。这样正运动学就是一连串的乘法调用,可读性极好。

2.6 知识体系总览

下面这张图是我自己总结的运动学知识结构,你可以把它当作学习地图:

运动学知识体系 笛卡尔坐标系 位置(x,y,z) + 姿态(Rx,Ry,Rz) 关节坐标系 各轴角度 (J1~J6) 齐次变换矩阵 4x4 旋转+位移 正运动学 关节角 → 末端位姿(唯一解) 逆运动学 末端位姿 → 关节角(多解/无解) 应用:轨迹规划 · 运动控制 · 碰撞检测 · 标定 坐标系是基础,运动学是桥梁,齐次矩阵是工具

2.7 小结

这一章的内容,说白了就是三件事:

  • 坐标系:笛卡尔和关节,两种看问题的角度
  • 运动学:正解和逆解,来回转换
  • 齐次矩阵:统一描述旋转和平移的数学工具

我个人觉得,运动学这东西,光看书不行,得动手算。找个简单的两连杆机器人,手写一遍正解和逆解,比看十遍书都管用。下一章咱们就上代码,把今天讲的这些变成能跑的程序。


专注资料整理