第2章 笛卡尔坐标系基础

码枢沄社 · 嵌入式体系化教程平台
入门 👤 零基础,想理解机器人如何描述位置和朝向的开发者 🔧 为后续学习机器人运动、导航和坐标变换打下基础
本章你将学到
  • 笛卡尔坐标系的定义与构成
  • 右手定则与坐标轴方向的确定方法
  • 如何用坐标描述机器人的位置和朝向
核心概念坐标系位姿

想象一下,你要告诉一个朋友你家书桌的位置。你可能会说:“从大门进来,往前走3米,然后左转走2米,书桌就在你右手边。”这种描述方式,本质上就是在使用一个坐标系——以大门为原点,前进方向为X轴,左侧为Y轴。在机器人世界里,我们使用一种更精确、更通用的数学工具来描述位置和方向,这就是笛卡尔坐标系。

什么是笛卡尔坐标系?

笛卡尔坐标系,也叫直角坐标系,是一个由互相垂直的坐标轴构成的系统,用于唯一确定空间中一个点的位置。在机器人学中,我们最常用的是三维笛卡尔坐标系。

三维坐标系的构成

一个完整的三维笛卡尔坐标系由三个核心要素构成:原点、坐标轴和方向。理解这三者,你就掌握了坐标系的骨架。

原点 (Origin)
坐标轴 (Axes)
方向 (Orientation)
空间参考点
+
X, Y, Z
+
右手定则
唯一确定空间中任意点的位置

原点是一个固定的参考点,所有位置的测量都从这里开始。坐标轴是从原点延伸出的三条互相垂直的直线,通常标记为X轴、Y轴和Z轴。方向则由著名的“右手定则”来确定。

关键点:右手定则

这是确定三维坐标系各轴正方向的黄金法则。伸出你的右手,让拇指、食指和中指两两垂直:

  • 拇指指向:X轴正方向。
  • 食指指向:Y轴正方向。
  • 中指指向:Z轴正方向。

这个规则确保了不同坐标系之间方向定义的一致性。我在调试机械臂时,曾因为一个外部传感器提供的坐标系方向不符合右手定则(可能是左手系),导致计算出的抓取位置完全错误,排查了半天才发现是坐标轴方向定义冲突。

描述机器人的位姿

现在,我们可以用笛卡尔坐标系来精确地定义它。

分量描述在三维坐标系中的表示示例 (单位:米)
位置 (Position)机器人上某一点(如底盘中心)相对于坐标系原点的偏移。一个三维向量 (x, y, z)(1.5, 0.8, 0.0)
姿态 (Orientation)机器人本体相对于坐标系各轴的旋转角度。旋转矩阵、欧拉角或四元数(绕Z轴旋转30度
位姿 (Pose)位置和姿态的组合。位置向量 + 姿态表示位置(1.5,0.8,0), 绕Z轴旋转30度

对于地面移动机器人(如扫地机器人、AGV),我们通常忽略高度变化,将其简化为二维平面上的运动。此时,位姿可以用三个量表示:x坐标、y坐标和朝向角(通常称为偏航角,yaw)。

⚠️ 常见误区

  • 混淆位置与位姿:位置只是一个点(x,y,z),而位姿包含了这个点的位置和物体在该点的朝向。说“机器人的坐标是(2,3)”是不完整的,还必须说明它面朝哪个方向。
  • 忽视坐标系的相对性:坐标值(x,y,z)本身没有绝对意义,它总是相对于某个特定的坐标系原点而言的。不指明参考坐标系,坐标值就失去了意义。
  • 默认使用世界坐标系:新手常误以为所有坐标都是相对于一个固定的“世界”原点。实际上,机器人身上有多个坐标系(如本体坐标系、传感器坐标系),必须明确当前坐标是相对于哪个坐标系给出的。

坐标系在机器人系统中的角色

一个机器人系统内部存在多个笛卡尔坐标系,它们像地图上的不同图例层,共同描述了机器人的状态和环境信息。

世界坐标系

  • 全局的、固定的参考系。
  • 通常与地图或环境绑定。
  • 用于描述机器人在整个环境中的绝对位姿。

机器人本体坐标系

  • 固定在机器人身上的坐标系。
  • 原点常取在底盘中心或基座。
  • 用于描述机器人自身部件(如机械臂末端、传感器)的相对位置。

传感器坐标系

  • 固定在摄像头、激光雷达等传感器上。
  • 描述传感器观测到的数据点位置。
  • 需要转换到本体或世界坐标系才有意义。

例如,激光雷达测到一个障碍物在其自身坐标系下的坐标是(2.0, 0.5, 0.1)。只有我们知道雷达相对于机器人底盘中心的安装位置和角度(即两个坐标系间的变换关系),才能计算出这个障碍物在机器人本体坐标系下的位置,进而判断是否会发生碰撞。

编者提示:从“相对”到“绝对”的思维转换
实际开发中,最常遇到的坑就是坐标系混乱。当你拿到一个坐标数据时,第一反应必须是问:“这个坐标是相对于哪个坐标系的?”养成这个习惯能避免绝大多数定位和导航错误。我参与过一个AGV项目,定位模块输出的坐标默认是在“起始点坐标系”下,而路径规划模块期望的是“地图坐标系”,两者原点相差几十米,直接导致机器人“鬼畜”乱跑。解决方法就是明确每个数据源的坐标系上下文,并在系统设计文档中强制标注。

二维与三维坐标表示

根据机器人应用场景的不同,我们会对坐标系进行简化或使用完整的三维表示。

应用场景分析
选择坐标系维度
确定位姿表示法

对于在平坦地面运动的机器人(如自动驾驶汽车、仓库AGV),我们使用二维坐标系(X, Y)加上一个旋转角(θ,即偏航角Yaw)。其位姿通常写作 (x, y, θ)。

对于在空中飞行或需要复杂操作的机器人(如无人机、机械臂),则必须使用三维坐标系(X, Y, Z),姿态也需要用三个旋转角(Roll, Pitch, Yaw)或更复杂的数学工具来描述。

关键点:编程中的坐标表示

在代码中,我们使用结构体或类来封装位姿数据。以二维位姿为例,一个典型的C++定义如下:

struct Pose2D {
    double x;      // X坐标(米)
    double y;      // Y坐标(米)
    double theta;  // 偏航角(弧度)

    // 一个实用的构造函数
    Pose2D(double x_ = 0.0, double y_ = 0.0, double theta_ = 0.0)
        : x(x_), y(y_), theta(theta_) {}
};

// 使用示例:创建一个表示机器人位于(1.0, 2.0),朝向东方(0弧度)的位姿
Pose2D robot_pose(1.0, 2.0, 0.0);

注意,角度在数学运算中通常使用弧度制。如果你从传感器得到的是角度制(0-360度),记得先转换为弧度(弧度 = 角度 * π / 180)。很多三角函数库的默认输入就是弧度。

理解并熟练使用笛卡尔坐标系,是读懂机器人状态、处理传感器数据、进行路径规划的前提。它就像机器人世界的通用语言,所有模块都必须基于统一的坐标系“方言”进行交流。

动手试一试

1. 纸上练习:在一张白纸上画一个二维笛卡尔坐标系,原点在中心。标出X轴向右为正,Y轴向上为正。在图上标出以下几个点:A(2, 1), B(-1, 3), C(0, -2)。然后,在每个点旁边画一个小箭头,表示机器人位于该点且朝向分别为:A点箭头指向右(0度),B点箭头指向左上(135度),C点箭头指向下(-90度或270度)。这就是三个不同的二维位姿。

2. 思维练习:假设你的书桌是一个“机器人”,定义两个坐标系:
- 坐标系W:以你房间的门口为原点,进门方向为X轴正方向,左侧为Y轴正方向。
- 坐标系D:以书桌中心为原点,桌面正对你时的朝向为X轴正方向,左侧为Y轴正方向。
试着描述你的电脑显示器在坐标系D下的位置(例如:显示器在书桌中心正前方0.5米,即(0.5, 0))。然后,思考一下,如果你知道书桌在房间里的位置和朝向,如何计算出显示器在坐标系W(房间门口)下的位置?这个“如何计算”的过程,就是坐标变换的核心思想。

检验你的理解

1. 判断题:在三维笛卡尔坐标系中,根据右手定则,当拇指指向X轴正方向,食指指向Y轴正方向时,中指指向的是Z轴负方向。(对/错)

2. 选择题:对于一个在室内平坦地面移动的扫地机器人,我们最少需要几个参数来描述它在某一时刻的完整位姿?
A. 2个 (x, y)
B. 3个 (x, y, z)
C. 3个 (x, y, θ)
D. 6个 (x, y, z, roll, pitch, yaw)

3. 判断题:坐标值(5, -3)具有绝对意义,我们可以直接知道这个点在哪里。(对/错)

本章小结

  • 笛卡尔坐标系由原点、互相垂直的坐标轴(X, Y, Z)和由右手定则确定的方向构成,是描述空间位置和方向的数学基础。
  • 机器人的“位姿”是位置和姿态的组合。位置用坐标向量表示,姿态描述物体的朝向。
  • 坐标系具有相对性,任何坐标值都必须明确其参考坐标系才有意义。机器人系统中通常存在世界、本体、传感器等多个坐标系。
  • 根据应用场景,可选择二维(平面运动)或三维(空间运动)坐标系来描述机器人位姿。
  • 在编程中,通常使用结构体来封装位姿数据,并需注意角度单位(弧度制)的统一。
← 上一章 返回目录 下一章 →