平移齐次坐标变换:
空间某点由矢量 描述。其中, 为轴 上的单位矢量。此点可用平移齐次变换表示为:
旋转齐次坐标变换:
表 , 表 ,非齐次去掉第四行第四列就行了。
绕x轴作转角为的旋转变换:
绕y轴作转角为的旋转变换:
绕z轴作转角为的旋转变换:
如果先让物体绕z轴旋转90°,接着绕y轴旋转90°,再沿x轴方向平移4个单位,则:
eul2rotm() (MatlabR2016a)
eul=[angle1 angle2 angle3] 时
eul2rotm(eul,'ZYX') 是先绕X旋转angle3,再绕Y旋转angle2,再绕Z旋转angle1。( eul2rotm中为弧度)
如:
eul = [pi pi/2 pi/2];
rotm = eul2rotm(eul,'ZYX'); a=rotm*[0 1 0]'
eul = [pi pi/2 pi/2];
rotm = eul2rotm(eul,'ZYX'); a=rotm*[0 1 0]'
表示 [0;1;0] 即y轴单位向量,先绕X旋转90°,再绕Y旋转90°,最后绕Z旋转180°,结果 a=[-1;0;0]。
也可以:
eul2 = rad2deg([pi pi/2 pi/2]);
rotm2 = rotz(eul2(1)) * roty(eul2(2)) * rotx(eul2(3)); b=rotm2*[0 1 0]'
eul2 = rad2deg([pi pi/2 pi/2]);
rotm2 = rotz(eul2(1)) * roty(eul2(2)) * rotx(eul2(3)); b=rotm2*[0 1 0]'
b也为[-1;0;0](rotx,y,z 中为角度)。
坐标系间的旋转
: P在c1坐标系下的坐标(列向量)
: P在c2坐标系下的坐标(列向量)
: c2坐标系相对于c1坐标系的方位,即 c1坐标系到c2坐标系的旋转
(若此时还有c3坐标系,且知道 ,,则 )
则:
若还有 t: c1坐标系到c2坐标系的平移(如 t=[1,0,0]' 表示c1坐标系沿x轴向前移动一个单位即为c2坐标系),则
(此时Pc1,Pc2皆为齐次坐标)
例:假设坐标系c1和坐标系c2(右手坐标系,右手定则旋转), c1坐标系下的点 Pc1 (0,1,0) ,经 R=rotz(90°),t=[1;0;0] 变换后在c2坐标系下的坐标是 Pc2 (1,1,0) 。
Matlab(R2016a) 程序如下:
>> pc1=[0;1;0];
R=rotz(90);
t=[1;0;0];
T=[R,t;0,0,0,1];
pc2=inv(T)*[pc1;1]
pc2 =
1
1
0
1
T表示 c1坐标系先 绕z轴旋转90° 再在原c1坐标系下沿x轴平移一个单位 到c2坐标系;
也可表示为 c1坐标系 先沿x轴平移一个单位 再绕z轴旋转90° 到c2坐标系。
那么 是什么呢?
Pc1 此时可以理解为c1坐标系下的y轴方向向量。
这个结果表示:c1坐标系的y轴方向向量 经旋转后 在c1坐标系下的新坐标。
注:
右手坐标系:右手拇指、食指和中指分别代表x,y,z轴的正方向。
右手定则:右手的大拇指指向轴的正方向,弯曲其余手指,那么手指所指示的方向即是轴的正旋转方向。