3、坐标系与运动学基础:关节坐标系与笛卡尔坐标系、正运动学与逆运动学、DH参数建模方法

各位同学,今天我们来聊聊运动学里最核心的几个概念。说实话,我刚入行那会儿,被坐标系和正逆解绕得晕头转向。后来在调试一台六轴机器人时,因为坐标系搞反了,差点把末端执行器怼到工件上——嗯,从那以后,我对这块内容就格外上心。

运动学说白了,就是研究“动”的学问。但动之前,你得先知道“在哪儿”。这就离不开坐标系。

3.1 关节坐标系与笛卡尔坐标系

先讲关节坐标系。每个关节都有一个自己的坐标系,通常叫关节坐标系。比如一个六轴机器人,它有六个关节,每个关节都有一个角度值。这些角度值组成的空间,就是关节空间。

举个例子:你让机器人“肘关节弯曲30度”,这就是在关节坐标系下操作。我习惯把关节坐标系想象成机器人的“母语”——它天生就懂。

笛卡尔坐标系呢?就是我们熟悉的X、Y、Z直角坐标系。在笛卡尔空间里,我们描述的是机器人末端在三维空间中的位置和姿态。比如“末端移动到点(100, 200, 300)毫米处,姿态保持水平”。

这两者有什么区别?我打个比方:

  • 关节坐标系:你告诉机器人“每个关节转多少度”。机器人听得懂,但你不直观。
  • 笛卡尔坐标系:你告诉机器人“末端走到哪里”。你直观,但机器人需要算一下。

核心要点:我们操作机器人时,通常用笛卡尔坐标系(直观);但机器人底层控制,必须用关节坐标系(直接)。两者之间的桥梁,就是正运动学和逆运动学。

我的经验:在调试现场,我经常遇到新手直接给笛卡尔坐标,结果机器人“抽风”。为什么?因为逆解可能有多解,或者关节限位没考虑。所以,我建议先确认关节空间是否可达,再给笛卡尔指令。

3.2 正运动学与逆运动学

正运动学,就是已知关节角度,求末端位姿。说白了,你告诉机器人“每个关节转多少”,它告诉你“末端在哪儿”。

逆运动学,反过来:已知末端位姿,求关节角度。你告诉机器人“末端要去这儿”,它算出“每个关节该转多少”。

听起来很简单?但实际工程中,逆运动学才是真正的难点。为什么?

  • 多解性:同一个末端位姿,可能有多种关节角度组合。比如肘关节可以“向上弯”也可以“向下弯”。
  • 奇异性:某些位姿下,关节速度会变得无穷大。我记得有一次调试SCARA机器人,在某个点附近,关节4突然疯狂旋转——那就是奇异点。
  • 无解:末端位姿超出了机器人的工作空间。比如你让一个短臂机器人去够远处的点,它当然够不着。

避坑指南:我曾经在项目中直接用了开源的逆解算法,结果在奇异点附近,机器人剧烈抖动。后来我加了“奇异点规避”逻辑,才稳定下来。所以,逆解算法一定要考虑边界条件。

正运动学相对简单,通常用齐次变换矩阵连乘就能搞定。但逆运动学,我建议根据具体构型选择方法:

  1. 解析法:对于常见构型(如六轴机器人有封闭解),速度快、精度高。
  2. 数值法:如牛顿-拉夫森法,通用性强,但可能不收敛。
  3. 几何法:针对特定构型,比如SCARA、Delta机器人,用几何关系推导。

3.3 DH参数建模方法

DH参数,全称Denavit-Hartenberg参数。这是运动学建模的“标准语言”。我个人觉得,DH参数就像给机器人关节之间“画地图”——每个关节用一个4x4的矩阵表示,连起来就是整个运动链。

DH参数有四个:

参数 符号 含义
连杆长度 a 相邻关节轴线的公垂线长度
连杆扭角 α 相邻关节轴线的夹角
关节距离 d 沿关节轴线的偏移
关节角度 θ 绕关节轴线的旋转角

建模步骤很简单:

  1. 给每个关节建立坐标系(Z轴沿关节轴线)
  2. 确定四个DH参数
  3. 写出齐次变换矩阵
  4. 连乘得到末端位姿

下面是一个标准DH变换矩阵的代码示例(Python):

import numpy as np

def dh_transform(a, alpha, d, theta):
    """
    标准DH参数变换矩阵
    a: 连杆长度
    alpha: 连杆扭角
    d: 关节距离
    theta: 关节角度
    """
    T = np.array([
        [np.cos(theta), -np.sin(theta)*np.cos(alpha),  np.sin(theta)*np.sin(alpha), a*np.cos(theta)],
        [np.sin(theta),  np.cos(theta)*np.cos(alpha), -np.cos(theta)*np.sin(alpha), a*np.sin(theta)],
        [0,              np.sin(alpha),                np.cos(alpha),               d],
        [0,              0,                            0,                           1]
    ])
    return T

# 示例:一个两连杆机器人
T1 = dh_transform(1.0, 0, 0, np.radians(30))  # 关节1
T2 = dh_transform(0.8, 0, 0, np.radians(45))  # 关节2
T_end = T1 @ T2  # 正运动学
print("末端位姿矩阵:\n", T_end)

我的习惯:写DH参数时,我总会在纸上先画一遍坐标系。画错了,后面全错。有一次我偷懒没画,结果参数顺序搞反了,仿真时机器人“拧麻花”。所以,别省这一步。

下面我用一张SVG图来展示本章的知识体系:

运动学基础核心知识体系 坐标系 运动学 DH参数建模 关节坐标系 笛卡尔坐标系 正运动学(关节→末端) 逆运动学(末端→关节) a, α, d, θ 四个参数 齐次变换矩阵 三者关系:坐标系是基础,DH参数是工具,运动学是目标

最后,我想说一句:运动学基础,看似枯燥,但它是所有运动控制的根基。你想想看,如果连坐标系都搞不清,后面做轨迹规划、动力学控制,那不就是空中楼阁吗?

嗯,今天就到这里。记住:多画图、多写代码、多动手仿真。纸上得来终觉浅,绝知此事要躬行。

专注资料整理