坐标系与运动学基础:从“我在哪”到“怎么去”

各位同学,大家好。我是你们这门课的老朋友,一个在运动控制领域摸爬滚打了十几年的工程师。今天咱们开始第一讲,聊聊坐标系和运动学。

你想想看,让一个机器人动起来,最核心的问题是什么?说白了就两个:“它现在在哪?”“怎么到那去?”。坐标系就是回答第一个问题的,运动学就是回答第二个问题的。这两件事搞不明白,后面所有的插补算法都是空中楼阁。

1. 三种坐标系:你总得选一个“参考系”

我刚开始做项目那会儿,最头疼的就是坐标系搞混。有一次调试六轴机器人,明明示教器上位置数据看着没问题,一跑起来就撞工具。查了半天,原来是工具坐标系没设对。嗯,从那以后,我对坐标系就特别敏感。

咱们做多轴插补,主要打交道的是这三种坐标系:

  • 笛卡尔坐标系(直角坐标系):就是咱们初中数学学的X、Y、Z。描述的是末端执行器在空间中的绝对位置和姿态。比如“把焊枪移动到X=100, Y=200, Z=50的位置,并且让焊枪垂直于地面”。这是最直观的,也是我们做轨迹规划时最常用的。
  • 关节坐标系:描述的是每个电机轴转了多少角度。比如“J1轴转了30度,J2轴转了-45度”。你想想看,对于六轴机器人,你直接告诉它每个关节转多少度,它就能动。但问题是,你很难直观地想象出末端到底在哪。这就像你只知道胳膊肘弯了多少度,但不知道手在哪儿。
  • 工具坐标系(TCP,Tool Center Point):这个特别重要。它是以工具末端为原点建立的坐标系。比如你装了一个焊枪,TCP就在焊丝尖上;装了一个夹爪,TCP就在夹爪中心。我个人的习惯是,每换一次工具,第一件事就是标定TCP。否则你让机器人走直线,它走的其实是工具根部在走直线,末端早偏了。

核心理解: 笛卡尔坐标系是“目标导向”,关节坐标系是“执行导向”,工具坐标系是“工艺导向”。三者缺一不可。

2. 正运动学:知道关节角度,求末端位置

正运动学,说白了就是“已知各关节转了多少,求手在哪儿”。这是一个确定的、唯一的过程。

我记得刚入行时,师傅让我手算一个SCARA机器人的正解。那时候没有现成的库,我就拿着D-H参数表,一个矩阵一个矩阵地乘。算完一遍,对机器人的几何结构理解就深了一层。

正运动学的数学本质就是矩阵连乘。对于串联机器人,从基座到末端,每个关节对应一个变换矩阵,把这些矩阵乘起来,就得到了末端位姿。

# 伪代码示例:正运动学计算
def forward_kinematics(joint_angles):
    # joint_angles = [theta1, theta2, theta3, ...]
    T = identity_matrix()  # 从基座开始
    for i in range(len(joint_angles)):
        T_i = dh_transform(a_i, alpha_i, d_i, joint_angles[i])
        T = T * T_i
    # T 矩阵包含了位置 (x, y, z) 和姿态 (旋转矩阵)
    position = T[0:3, 3]
    orientation = T[0:3, 0:3]
    return position, orientation

我的经验: 写正运动学代码时,一定要先验证单位。角度是弧度还是度?长度是毫米还是米?我曾经因为单位问题,让一个价值百万的机器人差点撞了墙。从那以后,所有输入参数我都强制加单位检查。

3. 逆运动学:知道末端位置,求关节角度

逆运动学就难多了。它是“已知手要放到哪,求每个关节该转多少”。

为什么难?因为逆解通常不是唯一的。你想想看,你的手要摸到桌子上同一个点,胳膊肘可以朝上,也可以朝下,这就是两种解。对于六轴机器人,最多可能有8组逆解。

而且,有些位置是“够不着”的,这就是奇异点。比如你胳膊完全伸直了,还想再往前伸一点,那是不可能的。在奇异点附近,关节速度会变得非常大,非常危险。

# 伪代码示例:逆运动学求解思路
def inverse_kinematics(target_pose):
    # target_pose: 目标位置和姿态
    # 方法1:解析法(适用于特定构型,如6轴有封闭解)
    if has_analytical_solution():
        solutions = analytical_solve(target_pose)
    else:
        # 方法2:数值法(迭代求解,通用但慢)
        solutions = numerical_solve(target_pose, initial_guess)
    
    # 从多组解中选最优
    best_solution = select_best(solutions, current_joint_angles)
    return best_solution

避坑指南: 我曾经在做一个喷涂机器人项目时,逆解算法没处理好奇异点。机器人走到工作空间边界时,J4轴突然以每秒500度的速度旋转,差点把气管拧断。所以,逆解一定要加关节限位检查速度平滑处理

4. 知识体系总览

为了让大家更直观地理解这三者之间的关系,我画了一张图。你看,整个运动控制的逻辑链条是这样的:

笛卡尔坐标系 目标位置 (X, Y, Z) 目标姿态 (Rx, Ry, Rz) 逆运动学 笛卡尔 → 关节 多解、奇异点 关节坐标系 电机角度 (J1~J6) 执行器控制 逆解 正解 工具坐标系 (TCP):贯穿始终,是笛卡尔坐标与关节坐标之间的“工艺桥梁” 多轴插补:坐标系与运动学知识体系

从这张图你可以看到,我们做轨迹规划时,是在笛卡尔坐标系下规划路径(比如走一条直线或圆弧),然后通过逆运动学,把路径上的每个点转换成关节角度,最后发给电机去执行。反过来,如果你想验证电机实际走到了哪,就用正运动学算一下末端位置。

5. 一个简单的对比表格

特性 笛卡尔坐标系 关节坐标系 工具坐标系
直观性 高(人眼可见) 低(需要想象) 中(依赖工具)
控制对象 末端位姿 电机角度 工具末端
插补难度 容易(直线/圆弧) 困难(非线性) 中等(需转换)
典型应用 轨迹规划、示教 单轴调试、回零 焊接、涂胶、抓取

总结一下: 坐标系是运动控制的“语言”,运动学是“翻译器”。正运动学把关节语言翻译成笛卡尔语言,逆运动学则反过来。搞懂了这两件事,你就能让机器人听懂你的指令,指哪打哪。

好了,这一章的内容就到这里。坐标系和运动学是后面所有插补算法的基础,一定要吃透。下一章我们会深入具体的插补算法,到时候这些概念会反复用到。

专注资料整理