机器人学中的物体变换与逆变换
物体变换
齐次坐标的复合变换
{B}相对于{A}:
B
A
T
^{A}_{B}T
BAT;
{C}相对于{B}:
C
B
T
^{B}_{C}T
CBT;
则{C}相对于{A}:
C
A
T
=
B
A
T
C
B
T
=
[
B
A
R
A
p
B
O
0
1
]
=
[
C
B
R
B
A
R
B
p
C
O
+
A
p
B
O
0
1
]
\begin{aligned} ^{A}_{C}T &= ^{A}_{B}T^{B}_{C}T \\ &= \begin{bmatrix} ^{A}_{B}R & ^{A}p_{BO} \\ 0 & 1 \end{bmatrix} \\ &= \begin{bmatrix} ^{B}_{C}R & ^{A}_{B}R^{B}p_{CO}+^{A}p_{BO} \\ 0 & 1 \end{bmatrix} \end{aligned}
CAT=BATCBT=[BAR0ApBO1]=[CBR0BARBpCO+ApBO1]
注意:有对角相消的规则
齐次坐标的逆变换
{B}相对于{A}:
B
A
T
^{A}_{B}T
BAT;
{A}相对于{B}:
A
B
T
^{B}_{A}T
ABT;
两者互为逆矩阵.求逆的办法:
1.直接求
B
A
T
−
1
^{A}_{B}T^{-1}
BAT−1
2.简化方法
A
B
T
=
[
B
A
R
T
−
B
A
R
T
A
p
B
O
0
1
]
=
B
A
T
−
1
^{B}_{A}T =\begin{bmatrix} ^{A}_{B}R^{T} & {-^{A}_{B}R^{T} }{^{A}p_{BO}} \\ 0 & 1 \end{bmatrix} =^{A}_{B}T^{-1}
ABT=[BART0−BARTApBO1]=BAT−1
变换方程步骤:
B}:基坐标系
{T}:工具坐标系
{S}:工作台坐标系
{G}:目标坐标系或工件坐标系
T
B
T
G
T
T
=
S
B
T
G
S
T
^{B}_{T}T^{T}_{G}T = ^{B}_{S}T^{S}_{G}T
TBTGTT=SBTGST
矩阵的左乘和右乘
坐标系之间多步齐次变换矩阵等与每次单独变换的齐次变换矩阵的乘积,而相对变换则决定这些矩阵相乘的顺序,有左乘和右乘之分。
左乘:若坐标系之间的变换是始终相对于原来的参考坐标系,则齐次坐标变换矩阵左乘(固定坐标系)。
右乘:若坐标系之间的变换是相对于当前新的坐标系,则齐次坐标变换矩阵右乘(移动坐标系)。
机械臂坐标变换使用右乘。
示例:
通用旋转变换
原理:找到一个转轴坐标以及旋转的角度,然后使用通用旋转矩阵计算算出旋转矩阵。
其他姿态表示方法
1.旋转矩阵:绕坐标系xyz轴旋转
2.欧拉角:用三次旋转来表示姿态
3.四元数:用一次旋转来表示姿态
欧拉角
形式上是三维向量,其值分别代表物体绕坐标系三个轴(x,y,z轴)的旋转角度,表示旋转三次。任何两个独立的正交坐标系都可以通过一系列(不超过3次)相对于坐标轴的旋转联系起来,但是其中两次旋转不能绕同一轴线
欧拉角有两种:
• 静态:即绕世界坐标系(xyz,全局坐标系)三个轴的旋转(左乘)。
• 动态:即绕刚体自身坐标系(XYZ,局部坐标系)三个轴的旋转(右乘)。
使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题(自由度消失的问题,矩阵行列式为0,秩不满)。
四元数
使用最多的方式。三个数字是方向余弦,用来设定特征矢量(固定轴);第四个数字是绕着固定轴旋转的角度值。
q
=
q
0
+
q
1
i
+
q
2
j
+
q
3
k
q = q_{0} + q_{1}i + q_{2}j + q_{3}k
q=q0+q1i+q2j+q3k
q = [ w , x , y , z ] T q = \begin{bmatrix} w, x, y,z\end{bmatrix} ^{T} q=[w,x,y,z]T
∣ q ∣ 2 = w 2 + x 2 + y 2 + z 2 = 1 |q|^{2} = w^{2} + x^{2} + y^{2} + z^{2} = 1 ∣q∣2=w2+x2+y2+z2=1
轴角(Axis-Angle)表示方法:
三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示。即:(θ,x,y,z) 通过旋转轴和绕该轴旋转的角度可以构造一个四元数。
w
=
c
o
s
(
α
/
2
)
x
=
s
i
n
(
α
/
2
)
c
o
s
(
β
x
)
y
=
s
i
n
(
α
/
2
)
c
o
s
(
β
y
)
z
=
s
i
n
(
α
/
2
)
c
o
s
(
β
z
)
α
:
旋转角
c
o
s
(
β
x
)
,
c
o
s
(
β
y
)
,
c
o
s
(
β
z
)
:旋转轴在
x
y
z
的“方向余弦”
w = cos(\alpha/2) \\ x = sin(\alpha/2)cos(\beta_{x}) \\ y = sin(\alpha/2)cos(\beta_{y}) \\ z = sin(\alpha/2)cos(\beta_{z}) \\ \alpha:旋转角 \\ cos(\beta_{x}),cos(\beta_{y}),cos(\beta_{z}):旋转轴在xyz的“方向余弦”
w=cos(α/2)x=sin(α/2)cos(βx)y=sin(α/2)cos(βy)z=sin(α/2)cos(βz)α:旋转角cos(βx),cos(βy),cos(βz):旋转轴在xyz的“方向余弦”