介绍一下 机器人坐标转换的 RT 矩阵

好的,我们来详细介绍一下机器人学和计算机视觉中至关重要的 RT矩阵,也常被称为刚体变换矩阵位姿矩阵


1. 什么是 RT 矩阵?

RT矩阵 的核心作用是描述一个刚体(比如机器人的手臂、末端执行器、自动驾驶车辆上的传感器)在三维空间中的位置和姿态,即 位姿

  • R 代表 旋转:一个 3x3 的矩阵,描述了物体是如何相对于参考坐标系旋转的。
  • T 代表 平移:一个 3x1 的向量,描述了物体相对于参考坐标系的位移。

为了将旋转和平移统一在一个矩阵运算中(便于连续变换和计算),我们使用一个 4x4 的齐次坐标变换矩阵,这就是我们通常所说的 RT 矩阵

它的标准形式如下:

text复制下载 [ r11 r12 r13 tx ] T = [ r21 r22 r23 ty ] [ r31 r32 r33 tz ] [ 0 0 0 1 ]

其中:

  • 左上角的 3x3 子矩阵 [r11, r12, r13; r21, r22, r23; r31, r32, r33] 就是旋转矩阵 R
  • 最右边的 3x1 列向量 [tx, ty, tz]^T 就是平移向量 T
  • 最后一行 [0, 0, 0, 1] 是为了满足齐次坐标计算而固定的。

2. RT 矩阵的数学原理:为什么要用 4x4 矩阵?

在三维空间中,一个点的坐标通常用 [x, y, z]^T 表示。如果我们只想进行旋转,用 3x3 矩阵乘法就够了:

P_rotated = R * P

如果我们只想进行平移,用向量加法就够了:

P_translated = P + T

但是,当我们既需要旋转又需要平移时,运算就变成了:

P_new = R * P + T

这虽然正确,但不是线性的,不便于将多个变换合并成一个。为了解决这个问题,我们引入了齐次坐标

齐次坐标 将三维点 [x, y, z] 扩展为四维 [x, y, z, 1]。这样,旋转和平移就可以通过一个单一的矩阵乘法来完成:

text复制下载[ P_new ] [ R T ] [ P ] [ ] = [ ] * [ ] [ 1 ] [ 0, 0, 0 1 ] [ 1 ]

展开后就是:
P_new = R * P + T

看到了吗?我们用一次矩阵乘法,优雅地实现了 R * P + T 这个操作。这使得连续变换变得非常简单。


3. RT 矩阵的几何意义与作用

RT 矩阵描述了一个坐标系(目标坐标系 B)到另一个坐标系(参考坐标系 A)的变换关系。

通常我们写作 ᴀTʙ,它的含义是:

“我知道一个点在坐标系 B 下的坐标,那么通过 ᴀTʙ,我就可以计算出该点在坐标系 A 下的坐标。”

数学表达
Point_A = ᴀTʙ * Point_B

几何解释

  • 旋转部分 R:描述了如何将坐标系 B 的三个轴 (X_b, Y_b, Z_b) 旋转,才能与坐标系 A 的三个轴 (X_a, Y_a, Z_a) 对齐。
  • 平移部分 T:描述了坐标系 B 的原点在坐标系 A 中的坐标位置。

举个例子
想象机器人的基座是坐标系 Base,机器人的手爪是坐标系 Gripper

  • ᴮTɢ 这个矩阵就描述了手爪相对于机器人基座的位置和朝向。
  • 如果你知道一个物体(比如一个螺丝)在手爪坐标系下的坐标 P_gripper,那么通过 P_base = ᴮTɢ * P_gripper,你就能算出这个螺丝在基座坐标系下的坐标,从而让机器人知道如何移动整个身体去接近它。

4. RT 矩阵的运算

a. 变换的复合(连锁变换)

这是 RT 矩阵最大的优势之一。如果你有多个坐标系,比如从 A 到 B,再从 B 到 C,那么从 A 到 C 的变换矩阵就是:

ᴀTᴄ = ᴀTʙ * ʙTᴄ

注意顺序:矩阵乘法是右乘的,即最先发生的变换在最右边。这个顺序非常重要,不能颠倒。

例子:在机器人学中,从基座到末端执行器的变换,是由一系列连杆变换复合而成的:
ᴮTᴱ = ᴮT₁ * ¹T₂ * ²T₃ * ... * ᴺ⁻¹Tᴺ * ᴺTᴱ

b. 逆变换

如果你有 ᴀTʙ,想知道 ʙTᴀ(即从坐标系 A 变换到 B 的逆过程),不需要直接求逆矩阵,有一个快速计算方法:

text复制下载 [ R^T -R^T * T ] T = [ ] [ 0 1 ]

其中 R^T 是旋转矩阵 R 的转置。因为旋转矩阵是正交矩阵,所以它的逆就等于它的转置。


5. 实际应用场景

RT 矩阵在机器人和计算机视觉领域无处不在:

  1. 机器人运动学:描述机器人各个连杆之间的位姿关系,是机器人控制和轨迹规划的基础。
  2. 手眼标定:确定相机安装在机器人手上(Eye-in-Hand)或机器人外部(Eye-to-Hand)时,相机坐标系与机器人基座坐标系之间的变换关系。核心就是求解一个 AX = XB 的矩阵方程。
  3. 自动驾驶:将激光雷达、摄像头、GPS/IMU 等不同传感器坐标系的数据统一到车体坐标系下,进行融合感知。这里的 RT 矩阵通常由传感器外参标定得到。
  4. 计算机图形学:用于移动、旋转和放置三维模型中的物体。
  5. 增强现实:将虚拟物体准确地叠加到真实世界的视频画面上,需要计算相机相对于真实世界标记物的 RT 矩阵。

6. 与其他姿态表示法的关系

旋转矩阵 R 只是描述旋转的一种方式,其他常见的还有:

  • 欧拉角:直观,但有万向节死锁问题。
  • 四元数:紧凑,计算高效,常用于插值和避免死锁。
  • 轴角/旋转向量:用一根旋转轴和一个旋转角度来表示。

这些表示法都可以与旋转矩阵 R 相互转换。RT 矩阵因其统一和规范的形式,成为了在系统内部存储和传递位姿信息的标准方式。

总结

RT矩阵 是一个强大而优雅的数学工具,它将三维空间中的旋转平移统一在一个 4x4 的矩阵中。它不仅是描述物体位姿的标准语言,更是连接不同坐标系、实现复杂空间计算的桥梁,是机器人学和计算机视觉领域的基石概念之一。

Read more

【C++】C++异常

【C++】C++异常

🎬 个人主页:MSTcheng · ZEEKLOG 🌱 代码仓库 :MSTcheng · Gitee 🔥 精选专栏: 《C语言》 《数据结构》 《算法学习》 《C++由浅入深》 💬座右铭:路虽远行则将至,事虽难做则必成! 在前面的文章中,我们已经介绍了C++11的一些新特性。本文将和下一篇一起为大家讲解C++的最后两个重要主题:异常处理和智能指针。 文章目录 * 一、异常的概念及使用 * 1.1异常的概念 * 1.2异常的分类 * 1.3异常的抛出与捕获 * 1.4栈展开 * 1.5 查找匹配的处理代码 * 1.6异常重新抛出 * 1.7异常的安全问题 * 1.8异常规范 * 二、总结 一、异常的概念及使用 1.1异常的概念 异常(Exception)是指在程序执行过程中发生的意外或错误情况,

By Ne0inhk
深入解剖STL map/multimap:接口使用与核心特性详解

深入解剖STL map/multimap:接口使用与核心特性详解

❤️@燃于AC之乐 来自重庆 计算机专业的一枚大学生 ✨专注 C/C++ Linux 数据结构 算法竞赛 AI 🏞️志同道合的人会看见同一片风景! 👇点击进入作者专栏: 《算法画解》 ✅ 《linux系统编程》✅ 《C++》 ✅ 🌟《算法画解》算法相关题目点击即可进入实操🌟 感兴趣的可以先收藏起来,请多多支持,还有大家有相关问题都可以给我留言咨询,希望希望共同交流心得,一起进步,你我陪伴,学习路上不孤单! 文章目录 * 前言(map系列容器概述) * 一、map类介绍 * 1.1 map的类模板声明 * 二、pair类型介绍 * 2.1 pair的结构定义 * 2.2 pair的使用要点 * 三、map的构造与迭代器 * 3.1 构造接口 * 3.2 迭代器接口 * 四、map的增删查操作

By Ne0inhk
怎么计算一个类的大小 (C++)

怎么计算一个类的大小 (C++)

怎么计算一个类的大小 (C++) 文章目录 * 怎么计算一个类的大小 (C++) * 图文版 * 文字版 * 核心结论速览 * 详细计算步骤与示例 * 1. 基础计算:空类 * 2. 只有成员变量(考虑内存对齐) * 3. 有虚函数(引入虚表指针) * 4. 继承关系 * 5. 特殊情况:虚继承 * 总结清单 * 总结 图文版 文字版 这是一个非常经典的C++面试题。在C++中,计算一个类的大小并不是简单地将成员变量的大小相加,而是涉及内存对齐、虚函数、继承等多个因素的影响。 以下是计算类大小的核心规则和详细步骤: 核心结论速览 1. 非静态成员变量 是影响大小的主体。 2. 静态成员变量 不属于类实例,存在全局数据区,不计入sizeof。 3. 成员函数 存在代码段,不计入sizeof。 4.

By Ne0inhk