点和向量
向量是一个线性空间的元素,是从原点或某点指向空间另一点处的一个箭头。例如,三维空间中的某个向量的坐标可以用 R3 当中的三个数来表示。同时也可以得到某个点的坐标,设一个线性空间的基(e1,e2,e3),这时我们可以得到这个向量在这个基的坐标:
a
=
[
e
1
,
e
2
,
e
3
]
[
a
1
a
2
a
3
]
=
a
1
e
1
+
a
2
e
2
+
a
3
e
3
a= \begin{bmatrix} e~1~ ,e~2~ ,e~3~ \\ \end{bmatrix} \begin{bmatrix} a~1~ \\ a~2~ \\ a~3~ \\ \end{bmatrix}=a~1~ e~1~+a~2~ e~2~+a~3~ e~3~
a=[e 1 ,e 2 ,e 3 ]⎣⎡a 1 a 2 a 3 ⎦⎤=a 1 e 1 +a 2 e 2 +a 3 e 3
所以可以知道坐标的实际取值,一是和向量本身有关系,而是和坐标系的基有关系。坐标系一般由三个正交的坐标轴组成。
向量的内积
向量的内积主要是描述向量之间的投影关系,例如a · b = aT b = |a||b|cos⟨a,b⟩,如果此处b为单位向量,可以看出a · b为a到b方向的投影
向量的外积
向量的外积的方向垂直于两个向量,并且大小为 |a||b|sin⟨a,b⟩,然后方向用右手法则确定
坐标系的变换
当一个机器人在实际的运动过程中,其自身当前的坐标系(移动坐标系)相对于原来的坐标(一般定义一个世界坐标系)是在不断变换的(平移或者旋转)。同样在相机中某个向量为p,坐标为pc,但在世界坐标系下看,坐标为pw 。所以实现以上的转换我们需要一个转换矩阵T
这里使用欧式变换,对于世界坐标系我们设其基为(e 1 ,e2 ,e 3 ),然后对于相机的坐标系的基为(e’1 ,e’2 ,e’3),然后向量a在两个坐标系的坐标为**[a1,a2,a3]T,[a’1, a’2,a’3]T**,因为向量是不会改变的所以:
之后整理下可以得到:
其中矩阵R就是旋转矩阵,但在实际情况下我们还需要一个平移矩阵 T得到 a’=Ra+T
单独看对于x轴的旋转时,坐标系的变化为:
x′=x
y′=ycosθ−zsinθ
z′=ysinθ+zcosθ
所以可以整理为矩阵:
R
x
=
[
1
,
0
,
0
0
,
c
o
s
θ
,
−
s
i
n
θ
0
,
s
i
n
θ
,
c
o
s
θ
]
R~x~ = \begin{bmatrix} 1 ,0 ,0 \\ 0 ,cosθ ,-sinθ \\ 0 ,sinθ ,cosθ \\ \end{bmatrix}
R x =⎣⎡1,0,00,cosθ,−sinθ0,sinθ,cosθ⎦⎤
同理可以整理得到对y轴和对z轴的旋转矩阵:
R
y
=
[
c
o
s
θ
,
0
,
s
i
n
θ
0
,
1
,
0
−
s
i
n
θ
,
0
,
c
o
s
θ
]
R~y~ = \begin{bmatrix} cosθ ,0 ,sinθ \\ 0 ,1,0 \\ -sinθ ,0,cosθ \\ \end{bmatrix}
R y =⎣⎡cosθ,0,sinθ0,1,0−sinθ,0,cosθ⎦⎤
R
z
=
[
c
o
s
θ
,
−
s
i
n
θ
,
0
s
i
n
θ
,
c
o
s
θ
,
0
0
,
0
,
1
]
R~z~ = \begin{bmatrix} cosθ ,-sinθ ,0\\ sinθ ,cosθ ,0 \\ 0 ,0,1\\ \end{bmatrix}
R z =⎣⎡cosθ,−sinθ,0sinθ,cosθ,00,0,1⎦⎤
R
=
R
x
⋅
R
y
⋅
R
z
R=R~x~·R~y~·R~z~
R=R x ⋅R y ⋅R z
齐次坐标
在不使用齐次化的时候,对于坐标之间的变化
但是对于a到c时就比较复杂了:
所以这里我们对其进行齐次化:
这样就方便了我们对于坐标的变化过程:
变换矩阵求逆
我们这里能够很容易得到旋转矩阵的逆,因为旋转矩阵为正交矩阵所以 R1=R’1=RT
但是平移矩阵却不同 不是单单的t1=-t’1,因为t1是像对于前一个坐标系下的平移矩阵,而t2是相对于当前坐标系下的平移矩阵。所以应该是t1=-R’1·t’1
T ′ = [ R T , − R T t ′ 1 0 , 1 ] T' = \begin{bmatrix} R^T,-R^T t'~1~ \\ 0 ,1 \\ \end{bmatrix} T′=[RT,−RTt′ 1 0,1]