运动学基础:刚体运动学、齐次变换矩阵、正运动学与逆运动学求解

各位工程师朋友,大家好。我是老张,在工业机器人这行摸爬滚打了十几年。今天咱们聊点硬核的——运动学基础。你别看这名字听着像教科书,其实说白了,就是搞清楚机器人“怎么动”和“动到哪”的问题。

我个人习惯,讲运动学前先问个问题:你让龙门机器人去抓一个工件,它凭什么知道自己的手(末端)在哪儿?又凭什么知道该让电机转多少圈?答案就在运动学里。嗯,咱们一步步来。

刚体运动学:机器人的“骨架”逻辑

龙门机器人,说白了就是三个互相垂直的直线轴,搭成一个“门”字形。每个轴都是一个刚体,它们之间通过滑动副连接。刚体运动学,就是研究这些刚体在空间中的位置和姿态变化。

我记得刚入行时,带我的老师傅说:“你先把一个轴的运动想明白,三个轴就是三个一维运动的叠加。” 这话糙理不糙。直角坐标型机器人最大的好处就是——运动解耦。X轴动不影响Y轴,Y轴动不影响Z轴。这在控制上省了大心了。

但要注意,刚体运动学里有个核心概念:自由度。龙门机器人通常有3个自由度(X、Y、Z平移),如果加上旋转轴,那就是4轴、5轴。自由度越多,运动学越复杂。咱们这章先聚焦3轴直角坐标型。

核心要点: 刚体运动学只描述“几何关系”,不关心“力”和“力矩”。说白了,就是纯几何问题。

齐次变换矩阵:把“位置”和“姿态”打包

你想想看,机器人的每个关节都有一个自己的坐标系。我们要把末端执行器的坐标,从它自己的局部坐标系,转换到世界坐标系(或者基坐标系)下。怎么转?用齐次变换矩阵。

齐次变换矩阵长这样:

| R   t |
| 0   1 |

其中,R是3x3的旋转矩阵,描述姿态;t是3x1的平移向量,描述位置。最后一行是[0 0 0 1],这是为了保持矩阵乘法的一致性。

为什么叫“齐次”?因为把三维坐标(x,y,z)扩展成了四维(x,y,z,1)。这样,旋转和平移就能用一个矩阵乘法搞定。我在项目中遇到过,很多新手不理解为什么要多此一举。其实,你想想看,如果没有齐次坐标,你要先旋转再平移,得写两个式子,麻烦不说,还容易出错。

对于直角坐标型机器人,齐次变换矩阵特别简单。因为只有平移,没有旋转。假设X轴移动了a,Y轴移动了b,Z轴移动了c,那么从末端到基座的变换矩阵就是:

T = | 1 0 0 a |
    | 0 1 0 b |
    | 0 0 1 c |
    | 0 0 0 1 |

你看,旋转矩阵R是单位阵,因为三个轴始终平行。这就是直角坐标型的“特权”。

我的小技巧: 写代码时,我习惯把齐次变换矩阵定义成一个4x4的numpy数组。这样后续做矩阵连乘、求逆,都非常方便。千万别用三个单独的向量去存,后期维护会疯掉。

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

正运动学,说白了就是“已知电机转了多少,求手在哪儿”。对于龙门机器人,这就是个加法问题。

假设基坐标系原点在龙门架左下角,X轴向右,Y轴向里,Z轴向上。三个滑块的位置分别是x、y、z(单位:毫米)。那么末端执行器的位置P就是:

Px = x
Py = y
Pz = z

简单吧?但要注意,这里的x、y、z是相对于各自轴的原点而言的。如果轴的原点不在基坐标系原点,那就要加上偏移量。我曾经在一个项目中,因为没考虑Z轴的原点偏移,导致机器人抓空了好几次。嗯,从那以后我养成了习惯:先标定原点,再写运动学。

正运动学的代码实现也很直接:

def forward_kinematics(x, y, z):
    """
    直角坐标型机器人正运动学
    输入:三个关节位置(mm)
    输出:末端执行器在基坐标系下的位置(mm)
    """
    # 假设基坐标系原点与各轴原点对齐
    px = x
    py = y
    pz = z
    return px, py, pz

你可能会问:“就这?” 对,就这。但别小看它。正运动学是所有后续控制的基础。你连手在哪儿都不知道,还谈什么轨迹规划?

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

逆运动学是正运动学的逆过程。说白了就是“已知手要抓到那个点,求电机该转多少”。对于直角坐标型,这也是个简单的一一对应关系:

x = Px
y = Py
z = Pz

直接赋值就行。但这里有个大坑——工作空间。你想想看,如果目标点Px=2000mm,但X轴行程只有1000mm,那机器人肯定到不了。逆运动学求解时,必须先检查目标点是否在工作空间内。

避坑指南: 我曾经在调试一个高速拾放程序时,因为没做工作空间检查,导致机器人直接撞到硬限位。从那以后,我的逆运动学函数里第一行代码一定是:if not in_workspace(px, py, pz): return False。这习惯救了我好几次。

逆运动学的代码实现:

def inverse_kinematics(px, py, pz):
    """
    直角坐标型机器人逆运动学
    输入:末端执行器目标位置(mm)
    输出:三个关节位置(mm),如果不可达则返回None
    """
    # 工作空间检查
    if not (X_MIN <= px <= X_MAX and
            Y_MIN <= py <= Y_MAX and
            Z_MIN <= pz <= Z_MAX):
        return None
    
    x = px
    y = py
    z = pz
    return x, y, z

你看,逆运动学比正运动学多了一步检查。这是工程实践中的关键差异。教科书上往往只讲数学解,但实际项目中,安全永远是第一位的。

知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图。这张图展示了从刚体运动学到正逆运动学的逻辑链条:

运动学基础 - 知识体系 刚体运动学 位置 + 姿态描述 齐次变换矩阵 旋转 + 平移 → 4x4矩阵 正运动学 关节 → 末端位置 逆运动学 末端位置 → 关节 直角坐标型特点: • 三个轴互相垂直,运动完全解耦 • 齐次变换矩阵中旋转部分为单位阵 • 正/逆运动学均为线性映射,无多解问题 • 工作空间为矩形体,边界清晰 图1:直角坐标型机器人运动学知识体系

从这张图你可以看到,刚体运动学是基础,齐次变换矩阵是工具,正逆运动学是应用。三者环环相扣。对于直角坐标型,因为结构简单,所以正逆运动学几乎是对称的。但如果你以后做六轴机器人,那逆运动学可就复杂多了——会有多解、奇异点等问题。

好了,这一章的内容就到这里。运动学是机器人控制的“地基”,地基不牢,后面盖什么楼都得塌。我个人建议,你可以在纸上手推一遍齐次变换矩阵的乘法,再写几行代码验证一下。实践出真知。


专注资料整理