【机器人学与计算机视觉基础】(二) 二维空间位姿描述

【机器人学与计算机视觉基础】(一)位置与姿态描述 1 位姿的抽象符号表示

(二) 二维空间位姿描述

讨论2维空间通常要用到笛卡儿坐标系,笛卡儿坐标系是以 x x x轴和 y y y轴为正交轴的坐标系,通常绘制成 x x x轴水平、 y y y轴竖直,两轴的交点称为原点。在笛卡尔坐标系中,平行于坐标轴的单位向量 x ^ \hat{x} x^ y ^ \hat{y} y^表示。一个点用其在 x x x轴和 y y y轴上的坐标 ( x , y ) (x,y) (x,y)表示,或者写成向量:
p = x x ^ + y y ^ \boldsymbol{p}=x \hat{\boldsymbol{x}}+y \hat{\boldsymbol{y}} p=xx^+yy^

在这里插入图片描述

在上图中的一个坐标系 { B } \{B\} {B},我们希望用参照系 { A } \{A\} {A}来描述它。可以清楚地看到, { B } \{B\} {B}的原点可以被向量 t = ( x , y ) t =( x,y) t=(xy)所取代,其姿态可以由 θ \theta θ表示。

因此,位姿的一个具体表示就是三维向量 A ξ B ∼ ( x , y , θ ) ^{A} \xi_{B} \sim(x, y, \theta) AξB(x,y,θ),我们使用符号~表示这两种表示是等价的。遗憾的是,这种表示方法不方便位姿合成,因为 ( x 1 , y 1 , θ 1 ) ⊕ ( x 2 , y 2 , θ 2 ) \left(x_{1}, y_{1}, \theta_{1}\right) \oplus\left(x_{2}, y_{2}, \theta_{2}\right) (x1,y1,θ1)(x2,y2,θ2)两边的位姿都是复杂的三角函数。所以,我们将使用一种不同的方法来表示旋转。

该方法是考虑一个任意点 Р Р Р相对于每个坐标系的向量,并确定 A p ^Ap Ap B p ^Bp Bp之间的关系。

再次回到上图,我们将问题分成两部分:旋转,然后平移

2.1 旋转

先只考虑旋转的情况,我们创建一个新坐标系 { V } \{V\} {V},其坐标轴平行于坐标系 { A } \{A\} {A}的轴,但其原点与坐标系 { B } \{B\} {B}的原点重合,如下图所示。点 P P P可以分别看作在 { V } \{V\} {V} { B } \{B\} {B}坐标系中的点。
在这里插入图片描述

我们可以将点 P P P { V } \{V\} {V}中定义坐标轴的单位向量表示为
v p = V x x ^ V + V y y ^ V = ( x ^ V y ^ V ) ( V x V y ) \begin{aligned}^v{p} &={ }^{V} x \hat{x}_{V}+{ }^{V} y \hat{y}_{V} \\&=\left(\begin{array}{ll}\hat{x}_{V} & \hat{y}_{V}\end{array}\right)\left(\begin{array}{l}^V{x} \\^V{y}\end{array}\right)\end{aligned} vp=Vxx^V+Vyy^V=(x^Vy^V)(VxVy)

上式被写作一个行向量和一个列向量的点积。

坐标系 { B } \{B\} {B}|可以用它的两个正交轴表示,这里用两个单位向量代表:
x ^ B = cos ⁡ θ x ^ V + sin ⁡ θ y ^ V y ^ B = − sin ⁡ θ x ^ V + cos ⁡ θ y ^ V \begin{array}{l}\hat{x}_{B}=\cos \theta \hat{x}_{V}+\sin \theta \hat{y}_{V} \\\hat{y}_{B}=-\sin \theta \hat{x}_{V}+\cos \theta \hat{y}_{V}\end{array} x^B=cosθx^V+sinθy^Vy^B=sinθx^V+cosθy^V

分解为矩阵形式:
( x ^ B y ^ B ) = ( x ^ V y ^ V ) ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) \left(\begin{array}{lll}\hat{x}_{B} & \hat{y}_{B}\end{array}\right)=\begin{array}{ll}(\hat{x}_{V} & \hat{y}_{V})\end{array}\left(\begin{array}{cc}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta\end{array}\right) (x^By^B)=(x^Vy^V)(cosθsinθsinθcosθ)

P P P在坐标系 { B } \{B\} {B}中表示为:
B p = B x x ^ B + B y y ^ B = ( x ^ B y ^ B ) ( B x B y ) { }^{B} p={ }^{B} x \hat{x}_{B}+{ }^{B} y \hat{y}_{B}=\left(\begin{array}{ll}\hat{x}_{B} & \hat{y}_{B}\end{array}\right)\left(\begin{array}{l}^B{{x}} \\^B{{y}}\end{array}\right) Bp=Bxx^B+Byy^B=(x^By^B)(BxBy)

根据上面两个式子,可以得到:
B p = ( x ^ V y ^ V ) ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( B x B y ) { }^{B} p=(\begin{array}{lll}\hat{x}_{V} & \left.\hat{y}_{V}\right)\end{array}\left(\begin{array}{cc}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta\end{array}\right)\left(\begin{array}{c}^B{x} \\^B{y}\end{array}\right) Bp=(x^Vy^V)(cosθsinθsinθcosθ)(BxBy)
再对照
V p = V x x ^ V + V y y ^ V = ( x ^ V y ^ V ) ( V x V y ) \begin{aligned}^V{p} &={ }^{V} x \hat{x}_{V}+{ }^{V} y \hat{y}_{V} \\&=\left(\begin{array}{ll}\hat{x}_{V} & \hat{y}_{V}\end{array}\right)\left(\begin{array}{l}^V{x} \\^V{y}\end{array}\right)\end{aligned} Vp=Vxx^V+Vyy^V=(x^Vy^V)(VxVy)
可以发现上面两个式子中同一个点 p p p都由单位向量 ( x ^ V , y ^ V ) (\hat{x}_V,\hat{y}_V) (x^V,y^V)表示,故其右边的系数也应该相同。即:
( V x V y ) = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( B x B y ) \left(\begin{array}{c}^V{x} \\^V{y}\end{array}\right)=\left(\begin{array}{cc}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta\end{array}\right)\left(\begin{array}{c}^B{x} \\^B{y}\end{array}\right) (VxVy)=(cosθsinθsinθcosθ)(BxBy)

上式描述了点如何通过坐标系旋转从坐标系 { B } \{B\} {B}变换到坐标系 { V } \{V\} {V}。这种类型的矩阵被称为旋转矩阵,记作 V R B ^VR_B VRB
( V x V y ) = V R B ( B x B y ) \left(\begin{array}{c}^V{x} \\^V{y}\end{array}\right)=^V{R_{B}}\left(\begin{array}{c}^B{x} \\^B{y}\end{array}\right) (VxVy)=VRB(BxBy)

旋转矩阵有一些特殊的属性:

  • 正规化(标准正交):每列都是单位向量且相互正交
  • 行列式为+1:一个向量被旋转矩阵变换后的长度是不变的
  • 逆矩阵和转置矩阵相同 R − 1 = R T R^{-1}=R^T R1=RT,因此有:
    ( B x B y ) = ( V R B ) − 1 ( V x V y ) = ( V R B ) T ( V x V y ) = B R V ( V x V y ) \left(\begin{array}{c}^Bx \\^B{y}\end{array}\right)=\left({ }^{V} R_{B}\right)^{-1}\left(\begin{array}{c}^V{x} \\^V{y}\end{array}\right)=\left({ }^{V} R_{B}\right)^{T}\left(\begin{array}{l}^V{x} \\^V{y}\end{array}\right)={ }^{B} R_{V}\left(\begin{array}{c}^V{x} \\^V{y}\end{array}\right) (BxBy)=(VRB)1(VxVy)=(VRB)T(VxVy)=BRV(VxVy)
    我们注意到,该矩阵的求逆就是将矩阵的上、下标交换位置,并可以得出恒等式
    R ( − θ ) = R ( θ ) T \boldsymbol{R}(-\boldsymbol{\theta})=\boldsymbol{R}(\boldsymbol{\theta})^{\mathrm{T}} R(θ)=R(θ)T

这里我们可以观察到:我们描述一个旋转的时候,不是用代表旋转角度的一个标量,而是用了一个有4个元素的2×2矩阵。但这4个元素并不是独立的,矩阵的每一列都是一个单位的大小,这提供了两个约束列与列之间还都是正交的,这提供了另一种约束。4个元素加上3个约束,这样还是只剩下1个真正独立的值

旋转矩阵是一个非最小化表示的典型例子,虽然这种表示有一些缺点,诸如需要增加内存等,但它具备的优势更加突出,如可复合性

2.2 平移

接下来讨论坐标系原点的平移

在这里插入图片描述在这里插入图片描述

由于坐标系 { V } \{V\} {V}与坐标系 { A } \{A\} {A}是平行的,所以平移量可以直接相加。

( A x A y ) = ( V x V y ) + ( x y ) = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( B x B y ) + ( x y ) = ( cos ⁡ θ − sin ⁡ θ x sin ⁡ θ cos ⁡ θ y ) ( B x B y 1 ) \begin{aligned}\left(\begin{array}{l}^A{x} \\^A{y}\end{array}\right) &=\left(\begin{array}{l}^V{x} \\^V{y}\end{array}\right)+\left(\begin{array}{l}x \\y\end{array}\right) \\&=\left(\begin{array}{cc}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta\end{array}\right)\left(\begin{array}{l}^B{x} \\^B{y}\end{array}\right)+\left(\begin{array}{l}x \\y\end{array}\right) \\&=\left(\begin{array}{cc}\cos \theta & -\sin \theta & x \\\sin \theta & \cos \theta & y\end{array}\right)\left(\begin{array}{c}^B{x} \\^B{y} \\1\end{array}\right)\end{aligned} (AxAy)=(VxVy)+(xy)=(cosθsinθsinθcosθ)(BxBy)+(xy)=(cosθsinθsinθcosθxy) BxBy1

或简写成:
( A x A y 1 ) = ( A R B t 0 1 × 2 1 ) ( B x B y 1 ) \left(\begin{array}{c}^A{x} \\^A{y} \\1\end{array}\right)=\left(\begin{array}{ll}^A{R_{B}} & t \\0_{1 \times 2} & 1\end{array}\right)\left(\begin{array}{l}^B{x} \\^B{y} \\1\end{array}\right) AxAy1 =(ARB01×2t1) BxBy1

其中, t = ( x , y ) t =(x,y) t=(x,y)代表坐标系的平移变换,而坐标系旋转变换用 A R B ^AR_B ARB表示。因为 { A } \{A\} {A} { V } \{V\} {V}的轴是平行的,所以 A R B = V R B ^AR_B= ^VR_B ARB=VRB。将 P P P点的坐标向量用齐次形式表达为
A p ~ = ( V R B t 0 1 × 2 1 ) B p ~ = A T B B p ~ \begin{aligned}{ }^{A} \tilde{p} &=\left(\begin{array}{ll}{ }^{V} \boldsymbol{R}_{B} & \boldsymbol{t} \\\boldsymbol{0}_{1 \times 2} & 1\end{array}\right){ }^{B} \tilde{\boldsymbol{p}} \\&={ }^{A} \boldsymbol{T}_{B}{ }^{B} \tilde{\boldsymbol{p}}\end{aligned} Ap~=(VRB01×2t1)Bp~=ATBBp~

A T B ^AT_B ATB称为齐次转换矩阵。这个矩阵有一个非常特殊的结构,并且属于特殊的二维欧几里得群,即 T ∈ S E ( 2 ) ⊂ R 3 × 3 T \in S E(2) \subset \mathbb{R}^{3 \times 3} TSE(2)R3×3


背景材料:一个向量 ( x , y ) (x, y) (x,y)可以写成齐次形式 p ~ ∈ P , p ~ = ( x 1 , x 2 , x 3 ) \tilde{p} \in \mathbb{P}, \tilde{p}=\left(x_{1}, x_{2}, x_{3}\right) p~P,p~=(x1,x2,x3),其中 x = x 1 / x 3 , y = x 2 / x 3 , x 3 ≠ 0 x=x_{1} / x_{3}, y=x_{2} / x_{3}, x_{3} \neq 0 x=x1/x3,y=x2/x3,x3=0。这里齐次向量的维度增加了一个,在平面上的点就用三维向量表示。为了将点转换为齐次形式,我们通常会附加一个1,变为 p ˉ = ( x , y , 1 ) \bar{p}=(x, y, 1) pˉ=(x,y,1)。字母上的波浪线表示该向量是齐次形式的。

齐次向量具有一个重要的属性,即 p ~ \tilde{p} p~等价于入 λ p ~ , ∀ λ ≠ 0 \lambda \tilde{p}, \forall \lambda \neq 0 λp~,λ=0,记作 p ~ ≃ λ p ~ \tilde{p} \simeq \lambda \tilde{p} p~λp~。这意味着 p ~ \tilde{p} p~在平面中代表相同的点,而与比例系数无关。


A T B ^AT_B ATB代表了相对位姿:
ξ ( x , y , θ ) ∼ ( cos ⁡ θ − sin ⁡ θ x sin ⁡ θ cos ⁡ θ y 0 0 1 ) \xi(x, y, \theta) \sim\left(\begin{array}{ccc}\cos \theta & -\sin \theta & x \\\sin \theta & \cos \theta & y \\0 & 0 & 1\end{array}\right) ξ(x,y,θ) cosθsinθ0sinθcosθ0xy1

相对位姿 ξ \xi ξ的一种具体表示是 ξ ∼ T ∈ S E ( 2 ) \xi \sim T \in S E(2) ξTSE(2)

对应于【机器人学与计算机视觉基础】(一)位置与姿态描述 1 位姿的抽象符号表示 中提到的代数运算规则,有:
T 1 ⊕ T 2 ↦ T 1 T 2 \boldsymbol{T}_{1} \oplus \boldsymbol{T}_{2} \mapsto \boldsymbol{T}_{1} \boldsymbol{T}_{2} T1T2T1T2
T 1 T 2 = ( R 1 t 1 0 1 × 2 1 ) ( R 2 t 2 0 1 × 2 1 ) = ( R 1 R 2 t 1 + R 1 t 2 0 1 × 2 1 ) T_{1} T_{2}=\left(\begin{array}{cc}R_{1} & t_{1} \\0_{1 \times 2} & 1\end{array}\right)\left(\begin{array}{cc}R_{2} & t_{2} \\0_{1 \times 2} & 1\end{array}\right)=\left(\begin{array}{cc}R_{1} R_{2} & t_{1}+R_{1} t_{2} \\0_{1 \times 2} & 1\end{array}\right) T1T2=(R101×2t11)(R201×2t21)=(R1R201×2t1+R1t21)
这是标准的矩阵乘法。

ξ ⊕ 0 = ξ ↦ T I = T \xi \oplus 0=\xi\mapsto T I=T ξ0=ξTI=T

其中 I I I为单位矩阵。

ξ ⊖ ξ = 0 ↦ T T − 1 = I \xi \ominus \xi=0\mapsto T T^{-1}=I ξξ=0TT1=I

这意味着
⊖ T ↦ T − 1 \ominus \boldsymbol{T} \mapsto \boldsymbol{T}^{-1} TT1
且:
T − 1 = ( R t 0 1 × 2 1 ) − 1 = ( R T − R T t 0 1 × 2 1 ) \boldsymbol{T}^{-1}=\left(\begin{array}{cc}\boldsymbol{R} & \boldsymbol{t} \\\boldsymbol{0}_{1 \times 2} & 1\end{array}\right)^{-1}=\left(\begin{array}{cc}\boldsymbol{R}^{T} & -\boldsymbol{R}^{T} \boldsymbol{t} \\\boldsymbol{0}_{1 \times 2} & 1\end{array}\right) T1=(R01×2t1)1=(RT01×2RTt1)

对于点 p ~ ∈ P 2 \tilde{p} \in \mathbb{P}^{2} p~P2,有 T ⋅ p ~ ↦ T p ~ \boldsymbol{T} \cdot \tilde{\boldsymbol{p}} \mapsto T \tilde{\boldsymbol{p}} Tp~Tp~,这是一个标准的矩阵-向量积。

下面我们将使用MATLAB机器人工具箱(关注微信公众号二进制人工智能回复robot获取)展示一些具体数值化的例子。用函数se2创建一个齐次变换

T1=se2(1,2,30*pi/180)
T1 =

    0.8660   -0.5000    1.0000
    0.5000    0.8660    2.0000
         0         0    1.0000

代表(1,2)的平移和30度的旋转。

相对世界坐标系,我们可以将变换用绘图函数绘制如下:

trplot2(T1,'frame','1','color','b');
axis([0,5,0,5]);

绘图函数中的参数规定该坐标系标签为 { 1 } \{1\} {1},且绘制成蓝色。
在这里插入图片描述

我们再绘制另一个平移(2,1),零旋转的位姿。在图中用红色绘制出来

T2=se2(2,1,0);
hold on
trplot2(T2,'frame','2','color','r');

在这里插入图片描述

现在,我们将两个相对位姿复合

T3=T1*T2;
trplot2(T3,'frame','3','color','g');

在这里插入图片描述
我们可以看到复合中,坐标系{2}的平移(2,1)是相对于坐标系{1}的。

要注意的是,最终坐标系{3}相对于世界坐标系的平移量并不是(3,3),因为它是相对于旋转后的坐标系{1}再平移的。

复合运算的不可逆性可用以下例子证明:

T4=T2*T1;
trplot2(T4,'frame','4','color','c');

在这里插入图片描述

可以看出坐标系{4}和坐标系{3}是不同的。

现在我们相对于世界坐标系定义一个点(3,2),并把它标到图中

P=[3;2];
plot_point(P,'*');

在这里插入图片描述

确定该点相对于坐标系{1}的坐标:

0 p = 0 ξ 1 ⋅ 1 p { }^{0} \boldsymbol{p}={ }^{0} \xi_{1} \cdot{ }^{1} \boldsymbol{p} 0p=0ξ11p
得到:
1 p = 1 ξ 0 ⋅ 0 p = ( 0 ξ 1 ) − 1 ⋅ 0 p { }^{1} \boldsymbol{p}={ }^{1} \xi_{0} \cdot{ }^{0} \boldsymbol{p}=\left({ }^{0} \xi_{1}\right)^{-1} \cdot{ }^{0} \boldsymbol{p} 1p=1ξ00p=(0ξ1)10p

P1=inv(T1)*[P;1] % [P,1]:附加一个1将欧几里得点转换为齐次形式
P1 =

    1.7321
   -1.0000
    1.0000

对齐次形式进行反变换,变为欧几里得坐标点

h2e(inv(T1)*e2h(P))
ans =

    1.7321
   -1.0000

这里又变回了欧几里得坐标点结果。辅助函数e2h将欧几里得坐标点转换为齐次形式,而h2e则进行逆转换。更简洁的表达方式可写成

上面更加简洁的表达可写成:

homtrans(inv(T1),P)
ans =

    1.7321
   -1.0000

THE END.
感谢阅读。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制人工智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值