一、坐标系基础:为什么需要坐标变换?从二维平面坐标系讲起,理解旋转与平移的本质
各位同学,今天咱们来聊聊坐标变换。说实话,我刚入行那会儿,觉得这东西就是纯数学,跟实际控制没啥关系。直到有一次调试机械臂,死活对不准目标点,折腾了两天才发现——原来是坐标系没对齐。嗯,从那以后我再也不敢小看坐标变换了。
1.1 什么是坐标系?说白了就是“参考基准”
想象一下,你站在操场上,有人问你:“足球在哪儿?”你肯定会说“在我左边三米,前面五米”。这个“我”就是你的参考点,也就是坐标系的原点。你面朝的方向,就是坐标系的轴。
在机器人控制里,坐标系就是这样一个参考基准。每个传感器、每个执行器、每个关节,都有自己的坐标系。我习惯把它们想象成“各自为政的小王国”——每个王国都有自己的国王(原点)和方向(坐标轴)。
核心概念:坐标系 = 原点 + 坐标轴方向。没有坐标系,位置就是一句空话。
1.2 为什么需要坐标变换?
你想想看,机器人身上有摄像头、有机械臂、有移动底盘。摄像头看到的目标位置,是相对于摄像头自己的坐标系。机械臂要去抓这个目标,它需要知道目标相对于自己基座的位置。这两个坐标系不一样,怎么办?
答案就是——坐标变换。
说白了,坐标变换就是把一个坐标系下的坐标,换算到另一个坐标系下。就像你问路,别人说“往东走100米”,但你面朝北,你得先把自己转到正确的方向,才能理解这个“东”到底在哪儿。
我在项目中遇到过最典型的场景:AGV小车要抓取流水线上的工件。视觉系统给出的是像素坐标,机械臂需要的是关节空间坐标。中间要经过至少三次坐标变换:像素→相机坐标系→机械臂基座坐标系→工具坐标系。少一步,抓取就偏了。
1.3 二维平面坐标系:从最简单的开始
咱们先从二维平面说起。二维坐标系就是x轴和y轴,互相垂直,交于原点。任何一个点P,都可以用(x, y)来表示。
这里有两个基本操作:
- 平移:把整个坐标系挪个位置。比如原点从(0,0)挪到(2,3),那么原来在(5,5)的点,在新坐标系下就变成了(3,2)。
- 旋转:把整个坐标系转个角度。比如绕原点逆时针转30°,原来在(1,0)的点,就变成了(cos30°, sin30°)。
你可能会问:“就这么简单?”对,就这么简单。但组合起来就很有意思了。
我的小技巧:刚开始学的时候,拿张纸画个十字,用笔尖当点,手动平移和旋转几次。比看公式管用多了。
1.4 旋转与平移的数学表达
咱们用数学语言把刚才的操作写下来。
平移:
新坐标 = 旧坐标 - 平移量
x' = x - dx
y' = y - dy
旋转:
x' = x * cosθ - y * sinθ
y' = x * sinθ + y * cosθ
写成矩阵形式更清爽:
[x'] [cosθ -sinθ] [x]
[y'] = [sinθ cosθ] [y]
这个2x2的矩阵,就是旋转矩阵。我刚开始看这个矩阵的时候,总觉得它很神秘。后来发现,它其实就是把原来的x和y,按照角度重新投影到新坐标轴上。说白了,就是“拆开再组合”。
1.5 一个完整的例子:从世界坐标系到机器人坐标系
假设你有一个移动机器人,它的位置在世界坐标系中是(2, 3),朝向是30°。现在视觉系统检测到一个目标,在世界坐标系中的位置是(5, 7)。
问:目标相对于机器人自身坐标系的位置是多少?
步骤:
- 先平移:目标相对于机器人原点的位置 = (5-2, 7-3) = (3, 4)
- 再旋转:机器人朝向30°,所以要把世界坐标旋转到机器人坐标
x' = 3 * cos30° - 4 * sin30° = 3 * 0.866 - 4 * 0.5 = 2.598 - 2 = 0.598
y' = 3 * sin30° + 4 * cos30° = 3 * 0.5 + 4 * 0.866 = 1.5 + 3.464 = 4.964
所以目标在机器人坐标系中的位置大约是(0.6, 4.96)。
注意:旋转和平移的顺序不能搞反。先平移再旋转,和先旋转再平移,结果完全不同。我曾经在这个坑里栽过跟头——调试了半天,发现目标点总是偏一个固定的角度,就是因为顺序搞反了。
1.6 知识体系总览
下面这张图帮你理清本章的核心逻辑:
1.7 本章小结
咱们这一章,说白了就讲了三件事:
- 坐标系是什么——一个参考基准,由原点和方向定义
- 为什么需要变换——因为不同传感器、不同部件都有自己的坐标系,数据不统一就没法用
- 怎么变换——平移(挪位置)和旋转(转方向),组合起来就能解决大部分问题
我个人觉得,坐标变换是机器人控制里最基础也最重要的概念。你后面学到的所有东西——正运动学、逆运动学、轨迹规划、视觉伺服——全都建立在坐标变换之上。把这个搞明白了,后面的路就好走了。
嗯,下一章咱们会深入聊齐次坐标,把平移和旋转统一成一个矩阵。到时候你会发现,原来数学可以这么优雅。