(1)n?o?0
(2)n?a?0 (3)a?o?0
(4)n?1(向量的长度必须为1) (2.10) (5)o?1
(6)a?1
因此,只有前述方程成立时,坐标系的值才能用矩阵表示。否则,坐标系将不正确。式(2.10)中前三个方程可以换用如下的三个向量的叉积来代替:
n?o?a (2.11)
例2.3 对于下列坐标系,求解所缺元素的值,并用矩阵来表示这个坐标系。
0??5???0.707???3?F?????0?2??0001 ??
解:
显然,表示坐标系原点位置的值5,3,2对约束方程无影响。注意在三个方向向量中只有三个值是给定的,但这也已足够了。根据式(2.10),得: nxox?nyoy?nzo??0.70oy7(?n)( )z0 或 nx(0)zoz? nxax?nyay?nzaz?0 或 nx(ax)?0.70a7y(?n)z axox?ayoy?azoz?0 或 ax(0?)ay(oy?)?( 0)0o(z?)
nx2?ny2?nz2?1 或 nx2?0.7027?nz2? 1 ox2?oy2?oz2?1 或 02?oy2?oz2?1 ax2?ay2?az2?1 或 ax2?ay2?02?1
将这些方程化简得:
0.707oy?nzoz?0nxax?0.707ay?0
ayoy?0
nx2?nz2?0.5
oy2?oz2?1
ax2?ay2?1
解这六个方程得:nx??0.707,nz?0,oy?0,oz?1,ax??0.707和ay??0.707。应注意,nx和ax必须同号。非唯一解的原因是由于给出的参数可能得到两组在相反方向上相互垂直的向量。最终得到的矩阵如下:
?0.70?0.70700.70?7??0.7070?7?0.7070?73?0.7070?73?0.70?0.70??F??F???0?2?0?21010????00010001?? 或 ??
由此可见,两个矩阵都满足约束方程的要求。但应注意三个方向向量所表述的值不是任意的,而是受这些约束方程的约束,因此不可任意给矩阵赋值。
同样,可通过n与o叉乘并令其等于a,即n?o?a来求解,表示如下:
inxoxjnyoyknz?axi?ayj?azkoz
或表示为:i(nyoz?nzoy)?j(nxoz?nzox)?k(nxoy?nyox)?axi?ayj?azk 将值代入方程得:
i(0.70o?n(o(nyo?)x?aiy?a jz7zoy?)jnxz?)kx 同时解下面这三个方程:
0.70o7oy?az?nz ?nxoz?anxoy?0ykx
以此来代替三个点乘方程。联立三个单位向量长度的约束方程,便得到六个方程,求解这六个方程,
可得到相同的未知参数的解。
2.4 齐次变换矩阵
由于各种原因,变换矩阵应写成方型形式,3?3或4?4均可。首先,如后面看到的,计算方形矩
阵的逆要比计算长方形矩阵的逆容易得多。其次,为使两矩阵相乘,它们的维数必须匹配,即第一矩阵的列数必须与第二矩阵的行数相同。如果两矩阵是方阵则无上述要求。由于要以不同顺序将许多矩阵乘在一起得到机器人运动方程,因此,应采用方阵进行计算。 为保证所表示的矩阵为方阵,如果在同一矩阵中既表示姿态又表示位置,那么可在矩阵中加入比例因子使之成为4?4矩阵。如果只表示姿态,则可去掉比例因子得到3?3矩阵,或加入第四列全为0的位置数据以保持矩阵为方阵。这种形式的矩阵称为齐次矩阵,它们写为:
?nx?n F??y?nz??0oxoyoz0axayaz0p?x?p?y (2.12) ?zp?1?2.5 变换的表示
变换定义为空间的一个运动。当空间的一个坐标系(一个向量、一个物体或一个运动坐标系)相
对于固定参考坐标系运动时,这一运动可以用类似于表示坐标系的方式来表示。这是因为变换本身就
是坐标系状态的变化(表示坐标系位姿的变化),因此变换可以用坐标系来表示。变换可为如下几种形式中的一种: ?纯平移
?绕一个轴的纯旋转 ?平移与旋转的结合
为了解它们的表示方法,我们将逐一进行探讨。 2.5.1 纯平移变换的表示
如果一坐标系(它也可能表示一个物体)在空间以不变的姿态运动,那么该坐标就是纯平移。在这种情况下,它的方向单位向量保持同一方向不变。所有的改变只是坐标系原点相对于参考坐标系的变化,如图2.9所示。相对于固定参考坐标系的新的坐标系的位置可以用原来坐标系的原点位置向量加上表示位移的向量求得。若用矩阵形式,新坐标系的表示可以通过坐标系左乘变换矩阵得到。由于在纯平移中方向向量不改变,变换矩阵T可以简单地表示为:
?1?0 T???0??001000dx?0dy?? (2.13) 1dz??01?
图2.9 空间纯平移变换的表示
其中dx,dy,dz是纯平移向量d相对于参考坐标系x,y,z轴的三个分量。可以看到,矩阵的前三列表示没有旋转运动(等同于单位阵),而最后一列表示平移运动。新的坐标系位置为:
?1?0 Fnew???0??00dx??nxoxaxpx??nxoxax?pxd?x???n?0dy?noapoa?pdyyyyyyyy?????? ? y (2.14)
?z1dz??nzozazpz??nzozaz?pzd?????01001?0001??0??这个方程也可用符号写为:
Fnew?Trans(dx,dy,dz)?Fold (2.15) 首先,如前面所看到的,新坐标系的位置可通过在坐标系矩阵前面左乘变换矩阵得到,后面将看到,无论以何种形式,这种方法对于所有的变换都成立。其次可以注意到,方向向量经过纯平移后保持不变。但是,新的坐标系的位置是d和P向量相加的结果。最后应该注意到,齐次变换矩阵与矩阵乘法的关系使得到的新矩阵的维数和变换前相同。
例2.4 坐标系F沿参考坐标系的x轴移动9个单位,沿z轴移动5个单位。求新的坐标系位置。
0100?0.527?0.5740.6285??0.3690.8190.4393??F????0.76600.6438???001? ?0解:由式(2.14)或式(2.15)得:
Fnew?Trans(dx,dy,dz)?FoldTrans(9,0,5)?Fold= 和 ?10?01F???00??00?0.527?0.369????0.766??009??0.527?0.5270.6285??0.3690.8190.4393?00?????15???0.76600.6438????01??0001??0.5740.62814?0.8190.4393??00.64313??001?
2.5.2 绕轴纯旋转变换的表示
为简化绕轴旋转的推导,首先假设该坐标系位于参考坐标系的原点并且与之平行,之后将结果推广到其他的旋转以及旋转的组合。
假设坐标系(n,o,a)位于参考坐标系(x,y,z)的原点,坐标系(n,o,a)绕参考坐标系的x轴旋转一个角度?,再假设旋转坐标系(n,o,a)上有一点P相对于参考坐标系的坐标为Px,Py,Pz,相对于运动坐标系的坐标为Pn,Po,Pa。当坐标系绕x轴旋转时,坐标系上的点P也随坐标系一起旋转。在旋转之前,P点在两个坐标系中的坐标是相同的(这时两个坐标系位置相同,并且相互平行)。旋转后,该点坐标Pn,Po,Pa在旋转坐标系(x ,y ,z)中保持不变,但在参考坐标系中Px,Py,Pz却改变了(如图2.10
所示)。现在要求找到运动坐标系旋转后P相对于固定参考坐标系的新坐标。
让我们从x轴来观察在二维平面上的同一点的坐标,图2.10显示了点P在坐标系旋转前后的坐标。点P相对于参考坐标系的坐标是Px,Py,Pz,而相对于旋转坐标系(点P所固连的坐标系)的坐标仍为Pn,Po,Pa。
由图2.11可以看出,Px不随坐标系统x轴的转动而改变,而Py和Pz却改变了,可以证明:
Px?PnPy?l1?l2?P0cos??Pasin? (2.16) Pz?l3?l4?P0sin??Pacos?写成矩阵形式为:
0?Px??1??? Py?0cos??????Pz????0sin???Pn??P? (2.17)
?sin????o?cos?????Pa??0
图2.10 在坐标系旋转前后的点的坐标
图2.11 相对于参考坐标系的点的坐标和从x轴上观察旋转坐标系
可见,为了得到在参考坐标系中的坐标,旋转坐标系中的点P(或向量P)的坐标必须左乘旋转矩阵。这个旋转矩阵只适用于绕参考坐标系的x轴做纯旋转变换的情况,它可表示为:
Pxyz?Rot(x,?)?Pnoa (2.18)
注意在式(2.17)中,旋转矩阵的第一列表示相对于x轴的位置,其值为1,0,0,它表示沿x轴的坐标没有改变。
为简化书写,习惯用符号C?表示cos?以及用S?表示sin?。因此,旋转矩阵也可写为:
?10 Rot(x,?)???0C???0S??10? Rot(x,?)?0C????0S?0??S??? (2.19) C???0??S??? (2.20) C???u可用同样的方法来分析坐标系绕参考坐标系y轴和z轴旋转的情况,可以证明其结果为:
0??10??S?? 和 Rot(x,?)?0C????C????0S?式(2.18)也可写为习惯的形式,以便于理解不同坐标系间的关系,为此,可将该变换表示为TR
RP
(读作坐标系R相对于坐标系U(Universe)的变换),将Pnoa表示为P(P相对于坐标系R),将xyz表