位置、方向和坐标变换

为了表示一个刚体相对于另一个刚体的相对位姿(位置和方向),需要将坐标系附加到每个刚体上,然后规定了这两个坐标系之间的几何关系。

位置

一个帧的原点相对于另一个帧的位置可以 用 translation vector (3x1),即平移向量来表述:

t=[xyz]

方向

一个坐标系相对于另一个坐标系的方向可以 用 rotation matrix (3x3),即旋转矩阵来表述:

R=[r11r12r13r21r22r23r31r32r33]

位姿

一 个 homogeneous transformation matrix (4x4),即齐次变换矩阵,可同时表示一个坐标系相对于另一个坐标系的位置和方向:

H=[Rt01]=[r11r12r13xr21r22r23yr31r32r33z0001]

Roll-Pitch-Yaw

一个刚体最多具有三个旋转自由度。换句话说,只需要三个独立的量足以描述任意刚体方向。一种表示方法 为 roll-pitch-yaw representation,由Roll(ϕ),Pitch(θ)和Yaw(ψ)角度定义:

R(ϕ,θ,ψ)

Roll-pitch-yaw表示方法的优点是它只需要三个值。与其他表示方法相比,这些值在几何上也很容易理解。缺点是:

  • 这些值不是连续的。

  • 最终方向取决于:

    • 旋转的顺序。

    • 围绕移动轴(内部旋转)还是固定轴(外部旋转)旋转。

机器人厂家常使用Roll-Pitch-Yaw表示方法。但是,并非所有机器人供应商都采用相同的惯例。了解旋转顺序以及它们是内部旋转还是外部旋转,这些是将Roll-Pitch-Yaw角度转换为其他表示形式的必要条件。

轴-角/旋转矢量

Axis-angle 表示方法描述了以下内容:

  • 一个代表旋转方向轴的单位矢量 (u)。

  • 一个描述绕轴旋转的角度(θ

一共有四个参数。为了最大程度地减少参数数量,通常将单位向量的每个元素乘以角度,其结果就是旋转向量 (r):

r=[rxryrz]=[uxθuyθuzθ]

轴-角表示方法相对于roll-pitch-yaw表示方法的优点在于它没有连续性和旋转顺序的问题。但是很难在物理方向和旋转矢量的数值之间进行匹配。另一个缺点是不能将旋转直接应用于3D点,而需要转换为其它表示方法。

单位四元数

Unit quaternions 是一种简单但具有鲁棒性的方法,用四个参数对轴-角表示方法进行编码。

q=[qwqxqyqz]

单位四元数被认为是表示两个坐标系之间方向的最佳方法,因为它们比旋转矩阵更紧凑、数值更稳定且更高效。与roll-pitch-yaw表示方法相比,单位四元数不会受到万向节死锁的影响(不可能唯一地表示方向)。此外,与轴-角表示不同,可以将单位四元数直接应用于3D点。

坐标转换

3D 中刚体的任何坐标变换都可以用旋转和平移来描述。例如,可以将一个点(或点云)从一个坐标系( b )变换到另一个坐标系( a )。这可以通过 旋转矩阵平移向量 来实现:

pa=Rbapb+ta

也可以使用描述两个坐标系之间的位姿的 齐次变换矩阵 来实现:

p~a=Hbap~b

其中 p~ap~b 分别是向量 papb 的同质表示。

上式中的齐次变换矩阵 Hba 表示:

  • 坐标系 b 中的点 pb b 转换到坐标系 pa a (坐标变换矩阵)

  • 表示相对于坐标系 :math: pb b` 定义的点 b 操作,就像相对于坐标系 a 定义的操作一样(坐标变换矩阵)

  • 坐标系 b 相对于坐标系 a 的位姿(位置和方向)

  • 从坐标系 a 到坐标系 b 的变换(位置和方向)表示为齐次变换矩阵

在代码示例中,我们使用以下符号表示该变换矩阵: a_to_b_transform 或者 b_pose_in_a_frame