一、笛卡尔空间概述
大家好,我是这次课程的主讲工程师。今天咱们聊聊笛卡尔空间——这个听起来有点数学味的概念,其实是机器人运动规划的基石。
说实话,我刚入行那会儿,对「笛卡尔空间」的理解也就停留在高中课本里。直到有一次调试六轴机器人,发现关节空间规划出来的轨迹,末端走出来的路径完全不是我想象的直线……嗯,那次之后我才真正重视起笛卡尔空间的概念。
1.1 什么是笛卡尔空间
笛卡尔空间,说白了就是我们最熟悉的那个三维坐标系——X、Y、Z三个轴互相垂直,再加上绕这三个轴的旋转(Rx、Ry、Rz)。
你想想看,我们描述一个物体在空间中的位置,最直观的方式是什么?就是告诉它在哪、朝哪。这就是笛卡尔空间的本质。
核心定义:笛卡尔空间是一个三维欧几里得空间,用三个正交轴(X、Y、Z)来描述点的位置,用三个旋转分量来描述姿态。总共6个自由度。
我习惯把笛卡尔空间叫做「任务空间」——因为机器人最终要完成的任务,比如焊接、涂胶、装配,都是在笛卡尔空间里定义的。你不可能跟焊接机器人说「关节1转30度,关节2转45度」,你得告诉它「焊枪走到这个点,保持这个角度」。
1.2 机器人工作空间
工作空间这个概念,我遇到过不少新手搞混。它指的是机器人末端执行器能够到达的所有点的集合。
举个例子:你家的扫地机器人,能扫到客厅的每个角落吗?不一定。沙发底下、墙角缝隙,可能就进不去。这就是工作空间的限制。
工作空间分两种:
- 可达工作空间:末端能到达的所有位置点(不管姿态)
- 灵巧工作空间:末端能以任意姿态到达的位置点
我曾经在一个项目里,客户要求机器人在一个狭窄的管道内部做焊接。我一开始没仔细算工作空间,结果机器人手臂伸进去之后,姿态完全被卡死了——这就是灵巧工作空间不够。后来不得不换了一款更细长的机器人。
我的经验:做运动规划前,一定要先画工作空间图。用蒙特卡洛法随机采样关节角度,算末端位置,然后画点云图。这步省不了。
1.3 位姿描述
位姿,就是位置+姿态。位置好理解,就是(x, y, z)。姿态呢?描述一个物体「朝哪」。
描述姿态的方式有好几种:
| 描述方式 | 参数数量 | 优点 | 缺点 |
|---|---|---|---|
| 旋转矩阵 | 9个 | 直观,容易做变换 | 冗余,有约束条件 |
| 欧拉角 | 3个 | 参数少,直观 | 有万向锁问题 |
| 四元数 | 4个 | 无奇点,插值平滑 | 不够直观 |
| 轴角表示 | 4个 | 物理意义明确 | 插值不方便 |
我个人最常用的是四元数。为什么?因为做轨迹插值时,四元数的球面线性插值(SLERP)非常平滑,不会出现欧拉角那种突然翻转的情况。
我记得有一次做视觉引导抓取,相机给出的姿态是欧拉角(ZYX顺序),我直接用这个角度做轨迹规划。结果机器人走到一半,手腕突然来了个180度翻转——吓我一跳。后来查出来是万向锁问题。从那以后,我只要做插值,一律转成四元数。
注意:欧拉角的旋转顺序很重要!同样的角度值,ZYX顺序和XYZ顺序得到的结果完全不同。一定要确认你用的库默认是什么顺序。
1.4 坐标系定义
坐标系,是机器人运动规划的「语言」。没有统一的坐标系,你说的话别人听不懂。
一个典型的机器人系统,至少包含以下几个坐标系:
- 世界坐标系:固定在机器人基座或工作台,是所有坐标的「绝对参考」
- 基坐标系:固定在机器人基座,通常与世界坐标系重合或有个固定偏移
- 工具坐标系:固定在末端执行器上,比如焊枪尖、夹爪中心
- 工件坐标系:固定在待加工工件上,方便编程
- 用户坐标系:用户自定义的参考系,比如工作台的一个角落
这里我画了一张图,帮你理清这些坐标系的关系:
这张图里,世界坐标系是「老大」,其他坐标系都直接或间接跟它关联。基坐标系和世界坐标系之间通常是个固定偏移,标定一次就不用动了。工具坐标系和基坐标系之间,是通过机器人的运动学链联系起来的——你给每个关节一个角度,末端的位置和姿态就确定了。
工件坐标系和用户坐标系,都是为了方便编程而设的。比如你要在工件上画一个圆,直接在工件坐标系下编程,比在世界坐标系下算来算去方便得多。
一个小技巧:做TCP标定的时候,我习惯用「四点法」——让机器人以四种不同的姿态去触碰同一个固定点。这样算出来的工具坐标系最准。别问我为什么,试过你就知道了。
1.5 坐标系变换
坐标系之间怎么转换?说白了就是矩阵乘法。
一个点P在坐标系A中的坐标是AP,要转换到坐标系B中:
BP = BTA · AP
其中BTA是一个4×4的齐次变换矩阵,包含了旋转和平移信息。
这个矩阵长这样:
| R11 R12 R13 tx |
| R21 R22 R23 ty |
| R31 R32 R33 tz |
| 0 0 0 1 |
左上角3×3是旋转矩阵,右上角3×1是平移向量。最后一行永远是[0 0 0 1],这是齐次坐标的规矩。
我刚开始学的时候,总觉得这个矩阵很抽象。后来做实际项目,发现它就是「从一个坐标系看另一个坐标系」的数学表达。你站在世界坐标系里看工具坐标系,工具坐标系的原点在哪、三个轴朝哪——这就是变换矩阵。
关键点:坐标系变换是可逆的。从A到B的变换矩阵,求个逆就能从B回到A。而且变换可以链式传递:工具T世界 = 工具T基 · 基T世界
嗯,笛卡尔空间的基础概念就这些。说白了就是:用坐标描述位置,用矩阵描述变换,用坐标系统一参考。这些搞清楚了,后面的运动规划才能顺利进行。
公众号:蓝海资料掘金营,微信deep3321