三维空间的坐标变换及其应用

        三维空间的坐标变换分为绕固定轴的旋转平移变换和绕动态轴的旋转平移变换,假设我们有1个全局坐标系A和1个局部坐标系B,A为固定坐标系,B为动态坐标系,开始时两坐标系重合,对于局部坐标系B,其中有一点 p b p_b pb,我们求变换后 p b p_b pb在全局坐标系下的坐标 p a p_a pa,下面分别进行介绍:

绕固定轴的旋转平移变换

        此时我们让局部坐标系B整体绕世界坐标系各轴依次旋转,根据旋转顺序的不同,共有6种方式,分别是XYZ,XZY,YXZ,YZX,ZXY,ZYX,我们分别求每种方式变换后, p b p_b pb在全局坐标系下的坐标 p a p_a pa。这里先分别介绍绕各轴旋转和平移对应的变换矩阵。
  让局部坐标系B先绕全局坐标系A的X轴逆时针旋转 α \alpha α弧度,再沿着A坐标系的各轴分别平移 T x x , T x y , T x z Tx_x,Tx_y,Tx_z TxxTxy,Txz,则:
p a = [ 1 0 0 0 c o s ( α ) − s i n ( α ) 0 s i n ( α ) c o s ( α ) ] p b + [ T x x T x y T x z ] = R x p b + T x p_a=\left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & -sin(\alpha) \\ 0 & sin(\alpha) & cos(\alpha) \end{matrix} \right] p_b+ \left[ \begin{matrix}Tx_x\\Tx_y\\Tx_z \end{matrix} \right]= R_x p_b+Tx pa=1000cos(α)sin(α)0sin(α)cos(α)pb+TxxTxyTxz=Rxpb+Tx
  让局部坐标系B先绕全局坐标系A的Y轴逆时针旋转 β \beta β弧度,再沿着A坐标系的各轴分别平移 T y x , T y y , T y z Ty_x,Ty_y,Ty_z TyxTyy,Tyz,则:
p a = [ c o s ( β ) 0 s i n ( β ) 0 1 0 − s i n ( β ) 0 c o s ( β ) ] p b + [ T y x T y y T y z ] = R y p b + T y p_a=\left[ \begin{matrix} cos(\beta) & 0 & sin(\beta) \\ 0 & 1& 0 \\ -sin(\beta) &0 & cos(\beta) \end{matrix} \right] p_b+ \left[ \begin{matrix}Ty_x\\Ty_y\\Ty_z \end{matrix} \right]= R_y p_b+Ty pa=cos(β)0sin(β)010sin(β)0cos(β)pb+TyxTyyTyz=Rypb+Ty
 让局部坐标系B先绕全局坐标系A的Z轴逆时针旋转 γ \gamma γ弧度,再沿着A坐标系的各轴分别平移 T z x , T z y , T z z Tz_x,Tz_y,Tz_z TzxTzy,Tzz,则:
p a = [ c o s ( γ ) − s i n ( γ ) 0 s i n ( γ ) c o s ( γ ) 0 0 0 1 ] p b + [ T z x T z y T z z ] = R z p b + T z p_a=\left[ \begin{matrix} cos(\gamma) & -sin(\gamma) & 0 \\sin(\gamma) & cos(\gamma) & 0 \\ 0 & 0 & 1 \end{matrix} \right] p_b+ \left[ \begin{matrix}Tz_x\\Tz_y\\Tz_z \end{matrix} \right]= R_z p_b+Tz pa=cos(γ)sin(γ)0sin(γ)cos(γ)0001pb+TzxTzyTzz=Rzpb+Tz

XYZ变换方式

        即局部坐标系B先绕世界坐标系A的X轴进行旋转,然后在A中做平移,之后依次绕A的Y和Z轴做类似操作,3个旋转平移合在一起如下所示:
p a = R z ( R y ( R x p b + T x ) + T y ) + T z . . . . = R z ( R y R x p b + R y T x + T y ) + T z . . . . = R z R y R x p b + R z R y T x + R z T y + T z . . . . = R x y z ∗ p b + T x y z \begin{matrix}p_a = &R_z(R_y(R_x p_b+Tx)+Ty)+Tz \\ ....=&R_z(R_yR_x p_b+R_yTx+Ty)+Tz \\ ....=&R_zR_yR_x p_b+R_zR_yTx+R_zTy+Tz \\ ....=&Rxyz*p_b+Txyz \end{matrix} pa=....=....=....=Rz(Ry(Rxpb+Tx)+Ty)+TzRz(RyRxpb+RyTx+Ty)+TzRzRyRxpb+RzRyTx+RzTy+TzRxyzpb+Txyz
从上式可知,合成后的变换也对应一个旋转矩阵和平移向量,旋转矩阵是3次旋转对应的旋转矩阵的乘积,按左乘顺序结合,而平移向量是3次平移向量的组合。

X Z Y变换方式

        即局部坐标系B先绕世界坐标系A的X轴进行旋转,然后在A中做平移,之后依次绕A的Z和Y轴做类似操作,3个旋转平移合在一起如下所示:
p a = R y ( R z ( R x p b + T x ) + T z ) + T y . . . . = R y ( R z R x p b + R z T x + T z ) + T y . . . . = R y R z R x p b + R y R z T x + R y T z + T y . . . . = R x z y ∗ p b + T x z y \begin{matrix}p_a = &R_y(R_z(R_x p_b+Tx)+Tz)+Ty \\ ....=&R_y(R_zR_x p_b+R_zTx+Tz)+Ty \\ ....=&R_yR_zR_x p_b+R_yR_zTx+R_yTz+Ty \\ ....=&Rxzy*p_b+Txzy \end{matrix} pa=....=....=....=Ry(Rz(Rxpb+Tx)+Tz)+TyRy(RzRxpb+RzTx+Tz)+TyRyRzRxpb+RyRzTx+RyTz+TyRxzypb+Txzy

YXZ变换方式

        即局部坐标系B先绕世界坐标系A的Y轴进行旋转,然后在A中做平移,之后依次绕A的X和Z轴做类似操作,3个旋转平移合在一起如下所示:
p a = R z ( R x ( R y p b + T y ) + T x ) + T z . . . . = R z ( R x R y p b + R x T y + T x ) + T z . . . . = R z R x R y p b + R z R x T y + R z T x + T z . . . . = R y x z ∗ p b + T y x z \begin{matrix}p_a = &R_z(R_x(R_y p_b+Ty)+Tx)+Tz \\ ....=&R_z(R_xR_y p_b+R_xTy+Tx)+Tz \\ ....=&R_zR_xR_y p_b+R_zR_xTy+R_zTx+Tz \\ ....=&Ryxz*p_b+Tyxz \end{matrix} pa=....=....=....=Rz(Rx(Rypb+Ty)+Tx)+TzRz(RxRypb+RxTy+Tx)+TzRzRxRypb+RzRxTy+RzTx+TzRyxzpb+Tyxz

YZX变换方式

        即局部坐标系B先绕世界坐标系A的Y轴进行旋转,然后在A中做平移,之后依次绕A的Z和X轴做类似操作,3个旋转平移合在一起如下所示:
p a = R x ( R z ( R y p b + T y ) + T z ) + T x . . . . = R x ( R z R y p b + R z T y + T z ) + T x . . . . = R x R z R y p b + R x R z T y + R x T z + T x . . . . = R y z x ∗ p b + T y z x \begin{matrix}p_a = &R_x(R_z(R_y p_b+Ty)+Tz)+Tx \\ ....=&R_x(R_zR_y p_b+R_zTy+Tz)+Tx \\ ....=&R_xR_zR_y p_b+R_xR_zTy+R_xTz+Tx \\ ....=&Ryzx*p_b+Tyzx \end{matrix} pa=....=....=....=Rx(Rz(Rypb+Ty)+Tz)+TxRx(RzRypb+RzTy+Tz)+TxRxRzRypb+RxRzTy+RxTz+TxRyzxpb+Tyzx

ZXY变换方式

        即局部坐标系B先绕世界坐标系A的Z轴进行旋转,然后在A中做平移,之后依次绕A的X和Y轴做类似操作,3个旋转平移合在一起如下所示:
p a = R y ( R x ( R z p b + T z ) + T x ) + T y . . . . = R y ( R x R z p b + R x T z + T x ) + T y . . . . = R y R x R z p b + R y R x T z + R y T x + T y . . . . = R z x y ∗ p b + T z x y \begin{matrix}p_a = &R_y(R_x(R_z p_b+Tz)+Tx)+Ty \\ ....=&R_y(R_xR_z p_b+R_xTz+Tx)+Ty \\ ....=&R_yR_xR_z p_b+R_yR_xTz+R_yTx+Ty \\ ....=&Rzxy*p_b+Tzxy \end{matrix} pa=....=....=....=Ry(Rx(Rzpb+Tz)+Tx)+TyRy(RxRzpb+RxTz+Tx)+TyRyRxRzpb+RyRxTz+RyTx+TyRzxypb+Tzxy

ZYX变换方式

        即局部坐标系B先绕世界坐标系A的Z轴进行旋转,然后在A中做平移,之后依次绕A的Y和X轴做类似操作,3个旋转平移合在一起如下所示:
p a = R x ( R y ( R z p b + T z ) + T y ) + T x . . . . = R x ( R y R z p b + R y T z + T y ) + T x . . . . = R x R y R z p b + R x R y T z + R x T y + T x . . . . = R z y x ∗ p b + T z y x \begin{matrix}p_a = &R_x(R_y(R_z p_b+Tz)+Ty)+Tx \\ ....=&R_x(R_yR_z p_b+R_yTz+Ty)+Tx \\ ....=&R_xR_yR_z p_b+R_xR_yTz+R_xTy+Tx \\ ....=&Rzyx*p_b+Tzyx \end{matrix} pa=....=....=....=Rx(Ry(Rzpb+Tz)+Ty)+TxRx(RyRzpb+RyTz+Ty)+TxRxRyRzpb+RxRyTz+RxTy+TxRzyxpb+Tzyx

绕动态轴的旋转平移变换

        此时我们让局部坐标系B整体绕自身坐标系的各个轴依次旋转和平移,由于自身坐标系姿态是随着每一步的旋转和平移发生变化的,故称为绕动态轴的旋转平移变换,同样,根据旋转顺序的不同,共有6种方式,分别是XYZ,XZY,YXZ,YZX,ZXY,ZYX,我们分别求每种方式变换后, p b p_b pb在全局坐标系下的坐标 p a p_a pa。这里先分别介绍绕各轴旋转和平移对应的变换矩阵。
  让局部坐标系B先绕自身坐标系的X轴逆时针旋转 α \alpha α弧度,再沿着旋转后的坐标系的各轴分别平移 T x x , T x y , T x z Tx_x,Tx_y,Tx_z TxxTxy,Txz,则:
p a = [ 1 0 0 0 c o s ( α ) − s i n ( α ) 0 s i n ( α ) c o s ( α ) ] ( p b + [ T x x T x y T x z ] ) = R x ( p b + T x ) p_a=\left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & -sin(\alpha) \\ 0 & sin(\alpha) & cos(\alpha) \end{matrix} \right]( p_b+ \left[ \begin{matrix}Tx_x\\Tx_y\\Tx_z \end{matrix} \right])= R_x ( p_b+Tx) pa=1000cos(α)sin(α)0sin(α)cos(α)(pb+TxxTxyTxz)=Rx(pb+Tx)
  让局部坐标系B先绕自身坐标系的Y轴逆时针旋转 β \beta β弧度,再沿着旋转后的坐标系的各轴分别平移 T y x , T y y , T y z Ty_x,Ty_y,Ty_z TyxTyy,Tyz,则:
p a = [ c o s ( β ) 0 s i n ( β ) 0 1 0 − s i n ( β ) 0 c o s ( β ) ] ( p b + [ T y x T y y T y z ] ) = R y ( p b + T y ) p_a=\left[ \begin{matrix} cos(\beta) & 0 & sin(\beta) \\ 0 & 1& 0 \\ -sin(\beta) &0 & cos(\beta) \end{matrix} \right] (p_b+ \left[ \begin{matrix}Ty_x\\Ty_y\\Ty_z \end{matrix} \right])= R_y (p_b+Ty) pa=cos(β)0sin(β)010sin(β)0cos(β)(pb+TyxTyyTyz)=Ry(pb+Ty)
  让局部坐标系B先绕自身坐标系的Z轴逆时针旋转 γ \gamma γ弧度,再沿着旋转后的坐标系的各轴分别平移 T z x , T z y , T z z Tz_x,Tz_y,Tz_z TzxTzy,Tzz,则:
p a = [ c o s ( γ ) − s i n ( γ ) 0 s i n ( γ ) c o s ( γ ) 0 0 0 1 ] ( p b + [ T z x T z y T z z ] ) = R z ( p b + T z ) p_a=\left[ \begin{matrix} cos(\gamma) & -sin(\gamma) & 0 \\sin(\gamma) & cos(\gamma) & 0 \\ 0 & 0 & 1 \end{matrix} \right]( p_b+ \left[ \begin{matrix}Tz_x\\Tz_y\\Tz_z \end{matrix} \right])= R_z (p_b+Tz) pa=cos(γ)sin(γ)0sin(γ)cos(γ)0001(pb+TzxTzyTzz)=Rz(pb+Tz)

X YZ变换方式

        即局部坐标系B先绕自身坐标系的X轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的Y和Z轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R x ( R y ( R z ( p b + T z ) + T y ) + T x ) . . . . = R x ( R y ( R z p b + R z T z + T y ) + T x ) . . . . = R x ( R y R z p b + R y R z T z + R y T y + T x ) . . . . = R x R y R z p b + R x R y R z T z + R x R y T y + R x T x . . . . = R x y z ∗ p b + T x y z \begin{matrix}p_a = &R_x(R_y(R_z(p_b+Tz)+Ty)+Tx) \\ ....=& R_x(R_y(R_zp_b+R_zTz+Ty)+Tx) \\ ....=& R_x(R_yR_zp_b+R_yR_zTz+R_yTy+Tx) \\ ....=& R_xR_yR_zp_b+R_xR_yR_zTz+R_xR_yTy+R_xTx\\ ....=&Rxyz*p_b+Txyz \end{matrix} pa=....=....=....=....=Rx(Ry(Rz(pb+Tz)+Ty)+Tx)Rx(Ry(Rzpb+RzTz+Ty)+Tx)Rx(RyRzpb+RyRzTz+RyTy+Tx)RxRyRzpb+RxRyRzTz+RxRyTy+RxTxRxyzpb+Txyz
从上式可知,合成后的变换同样对应一个旋转矩阵和平移向量,旋转矩阵是3次旋转对应的旋转矩阵的乘积,注意这里按右乘顺序结合,而绕固定轴旋转后的旋转矩阵是按左乘顺序结合,平移向量仍是3次平移向量的组合。

X Z Y变换方式

        即局部坐标系B先绕自身坐标系的X轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的Z和Y轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R x ( R z ( R y ( p b + T y ) + T z ) + T x ) . . . . = R x ( R z ( R y p b + R y T y + T z ) + T x ) . . . . = R x ( R z R y p b + R z R y T y + R z T z + T x ) . . . . = R x R z R y p b + R x R z R y T y + R x R z T z + R x T x . . . . = R x z y ∗ p b + T x z y \begin{matrix}p_a = &R_x(R_z(R_y(p_b+Ty)+Tz)+Tx) \\ ....=& R_x(R_z(R_yp_b+R_yTy+Tz)+Tx) \\ ....=& R_x(R_zR_yp_b+R_zR_yTy+R_zTz+Tx) \\ ....=& R_xR_zR_yp_b+R_xR_zR_yTy+R_xR_zTz+R_xTx\\ ....=&Rxzy*p_b+Txzy \end{matrix} pa=....=....=....=....=Rx(Rz(Ry(pb+Ty)+Tz)+Tx)Rx(Rz(Rypb+RyTy+Tz)+Tx)Rx(RzRypb+RzRyTy+RzTz+Tx)RxRzRypb+RxRzRyTy+RxRzTz+RxTxRxzypb+Txzy

YXZ变换方式

        即局部坐标系B先绕自身坐标系的Y轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的X和Z轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R y ( R x ( R z ( p b + T z ) + T x ) + T y ) . . . . = R y ( R x ( R z p b + R z T z + T x ) + T y ) . . . . = R y ( R x R z p b + R x R z T z + R x T x + T y ) . . . . = R y R x R z p b + R y R x R z T z + R y R x T x + R y T y . . . . = R y x z ∗ p b + T y x z \begin{matrix}p_a = &R_y(R_x(R_z(p_b+Tz)+Tx)+Ty) \\ ....=&R_y(R_x(R_zp_b+R_zTz+Tx)+Ty) \\ ....=& R_y(R_xR_zp_b+R_xR_zTz+R_xTx+Ty) \\ ....=& R_yR_xR_zp_b+R_yR_xR_zTz+R_yR_xTx+R_yTy\\ ....=&Ryxz*p_b+Tyxz \end{matrix} pa=....=....=....=....=Ry(Rx(Rz(pb+Tz)+Tx)+Ty)Ry(Rx(Rzpb+RzTz+Tx)+Ty)Ry(RxRzpb+RxRzTz+RxTx+Ty)RyRxRzpb+RyRxRzTz+RyRxTx+RyTyRyxzpb+Tyxz

YZ X变换方式

        即局部坐标系B先绕自身坐标系的Y轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的Z和X轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R y ( R z ( R x ( p b + T x ) + T z ) + T y ) . . . . = R y ( R z ( R x p b + R x T x + T z ) + T y ) . . . . = R y ( R z R x p b + R z R x T x + R z T z + T y ) . . . . = R y R z R x p b + R y R z R x T x + R y R z T z + R y T y . . . . = R y z x ∗ p b + T y z x \begin{matrix}p_a = &R_y(R_z(R_x(p_b+Tx)+Tz)+Ty) \\ ....=&R_y(R_z(R_xp_b+R_xTx+Tz)+Ty) \\ ....=& R_y(R_zR_xp_b+R_zR_xTx+R_zTz+Ty) \\ ....=& R_yR_zR_xp_b+ R_yR_zR_xTx+ R_yR_zTz+ R_yTy\\ ....=&Ryzx*p_b+Tyzx \end{matrix} pa=....=....=....=....=Ry(Rz(Rx(pb+Tx)+Tz)+Ty)Ry(Rz(Rxpb+RxTx+Tz)+Ty)Ry(RzRxpb+RzRxTx+RzTz+Ty)RyRzRxpb+RyRzRxTx+RyRzTz+RyTyRyzxpb+Tyzx

ZXY变换方式

        即局部坐标系B先绕自身坐标系的Z轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的X和Y轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R z ( R x ( R y ( p b + T y ) + T x ) + T z ) . . . . = R z ( R x ( R y p b + R y T y + T x ) + T z ) . . . . = R z ( R x R y p b + R x R y T y + R x T x + T z ) . . . . = R z R x R y p b + R z R x R y T y + R z R x T x + R z T z . . . . = R z x y ∗ p b + T z x y \begin{matrix}p_a = &R_z(R_x(R_y(p_b+Ty)+Tx)+Tz) \\ ....=&R_z(R_x(R_yp_b+R_yTy+Tx)+Tz) \\ ....=& R_z(R_xR_yp_b+R_xR_yTy+R_xTx+Tz) \\ ....=& R_zR_xR_yp_b+R_zR_xR_yTy+R_zR_xTx+R_zTz\\ ....=&Rzxy*p_b+Tzxy \end{matrix} pa=....=....=....=....=Rz(Rx(Ry(pb+Ty)+Tx)+Tz)Rz(Rx(Rypb+RyTy+Tx)+Tz)Rz(RxRypb+RxRyTy+RxTx+Tz)RzRxRypb+RzRxRyTy+RzRxTx+RzTzRzxypb+Tzxy

ZY X变换方式

        即局部坐标系B先绕自身坐标系的Z轴进行旋转,然后在旋转后的坐标系中平移,之后依次绕自身坐标的Y和X轴做类似操作,3个旋转平移合在一起如下所示,注意旋转的先后顺序:
p a = R z ( R y ( R x ( p b + T x ) + T y ) + T z ) . . . . = R z ( R y ( R x p b + R x T x + T y ) + T z ) . . . . = R z ( R y R x p b + R y R x T x + R y T y + T z ) . . . . = R z R y R x p b + R z R y R x T x + R z R y T y + R z T z . . . . = R z y x ∗ p b + T z y x \begin{matrix}p_a = &R_z(R_y(R_x(p_b+Tx)+Ty)+Tz) \\ ....=&R_z(R_y(R_xp_b+R_xTx+Ty)+Tz) \\ ....=& R_z(R_yR_xp_b+R_yR_xTx+R_yTy+Tz) \\ ....=& R_zR_yR_xp_b+R_zR_yR_xTx+R_zR_yTy+R_zTz\\ ....=&Rzyx*p_b+Tzyx \end{matrix} pa=....=....=....=....=Rz(Ry(Rx(pb+Tx)+Ty)+Tz)Rz(Ry(Rxpb+RxTx+Ty)+Tz)Rz(RyRxpb+RyRxTx+RyTy+Tz)RzRyRxpb+RzRyRxTx+RzRyTy+RzTzRzyxpb+Tzyx

综上,对于绕固定轴旋转平移后的变换,我们采用左乘法则结合,对于绕动态轴旋转平移后的变换,我们采用右乘法则结合,不同的旋转和平移顺序将对应不同的旋转和平移向量。当给定一个旋转和平移的顺序后,我们可以根据上面的式子求出局部坐标系中的点在全局坐标系中的坐标。

应用

        设IMU启动时其3轴分别与世界坐标系的3轴平行,IMU自身的坐标系为局部坐标系,世界坐标系为全局坐标系,随着IMU的旋转,其朝向将改变,我们假定IMU是按照roll—>pitch—>yaw的旋转方式达到新的姿态的,并且中间过程是绕固定轴旋转的,roll是绕X轴旋转,pitch是绕Y轴旋转,yaw是绕Z轴旋转,对应上面绕固定轴旋转的XYZ方式,IMU在运动过程中会受到外力,此时的3轴加速度由重力和外力的合力产生,我们可以根据roll—>pitch—>yaw,将重力分解到加速度计的各轴上,然后用实际加速度减去分解后的加速度,得到外力沿3轴的加速度,我们再根据roll—>pitch—>yaw将其重新变换成世界坐标系中沿各轴的加速度,用此来估计IMU在瞬态的位移。
  重写绕固定轴旋转的XYZ方式:
p a = R z R y R x p b + R z R y T x + R z T y + T z p_a=R_zR_yR_x p_b+R_zR_yTx+R_zTy+Tz pa=RzRyRxpb+RzRyTx+RzTy+Tz
  此时不考虑平移,设 p a = [ 0 , 0 , g ] T p_a=[0,0,g]^T pa=[0,0,g]T为世界坐标系中重力加速速沿各轴的分量,只有垂直方向有值, p b = [ a x , a y , a y ] T p_b=[a_x,a_y,a_y]^T pb=[ax,ay,ay]T为重力在IMU各轴上的分量, r e a l a = [ r a x , r a y , r a y ] T real_a=[ra_x,ra_y,ra_y]^T reala=[rax,ray,ray]T为实际测得IMU各轴的加速度值,包含外力, e x t r a a = [ e a x , e a y , e a y ] T extra_a=[ea_x,ea_y,ea_y]^T extraa=[eax,eay,eay]T为外力在IMU各轴产生的加速度, w o r l d a = [ w a x , w a y , w a y ] T world_a=[wa_x,wa_y,wa_y]^T worlda=[wax,way,way]T为外力在世界坐标系各轴产生的加速度,是我们要求解的,则:
p a = R z R y R x p b p_a=R_zR_yR_x p_b pa=RzRyRxpb
⇒ [ 0 0 g ] = [ c o s ( γ ) − s i n ( γ ) 0 s i n ( γ ) c o s ( γ ) 0 0 0 1 ] [ c o s ( β ) 0 s i n ( β ) 0 1 0 − s i n ( β ) 0 c o s ( β ) ] [ 1 0 0 0 c o s ( α ) − s i n ( α ) 0 s i n ( α ) c o s ( α ) ] [ a x a y a z ] \Rightarrow \left[ \begin{matrix}0\\0\\g \end{matrix} \right]=\left[ \begin{matrix} cos(\gamma) & -sin(\gamma) & 0 \\sin(\gamma) & cos(\gamma) & 0 \\ 0 & 0 & 1 \end{matrix} \right]\left[ \begin{matrix} cos(\beta) & 0 & sin(\beta) \\ 0 & 1& 0 \\ -sin(\beta) &0 & cos(\beta) \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & -sin(\alpha) \\ 0 & sin(\alpha) & cos(\alpha) \end{matrix} \right] \left[ \begin{matrix}a_x\\a_y\\a_z \end{matrix} \right] 00g=cos(γ)sin(γ)0sin(γ)cos(γ)0001cos(β)0sin(β)010sin(β)0cos(β)1000cos(α)sin(α)0sin(α)cos(α)axayaz
⇒ [ 0 0 g ] = [ c o s ( γ ) c o s ( β ) − s i n ( γ ) c o s ( α ) + c o s ( γ ) s i n ( β ) s i n ( α ) s i n ( γ ) s i n ( α ) + c o s ( γ ) s i n ( β ) c o s ( α ) s i n ( γ ) c o s ( β ) c o s ( γ ) c o s ( α ) + s i n ( γ ) s i n ( β ) s i n ( α ) − c o s ( γ ) s i n ( α ) + s i n ( γ ) s i n ( β ) c o s ( α ) − s i n ( β ) c o s ( β ) s i n ( α ) c o s ( β ) c o s ( α ) ] [ a x a y a z ] \Rightarrow\left[ \begin{matrix}0\\0\\g \end{matrix} \right]=\left[ \begin{matrix} cos(\gamma)cos(\beta) & -sin(\gamma)cos(\alpha)+cos(\gamma)sin(\beta)sin(\alpha) & sin(\gamma)sin(\alpha)+cos(\gamma)sin(\beta)cos(\alpha) \\sin(\gamma)cos(\beta) & cos(\gamma)cos(\alpha)+sin(\gamma)sin(\beta)sin(\alpha) & -cos(\gamma)sin(\alpha)+sin(\gamma)sin(\beta)cos(\alpha) \\ -sin(\beta) & cos(\beta)sin(\alpha) & cos(\beta)cos(\alpha) \end{matrix} \right] \left[ \begin{matrix}a_x\\a_y\\a_z \end{matrix} \right] 00g=cos(γ)cos(β)sin(γ)cos(β)sin(β)sin(γ)cos(α)+cos(γ)sin(β)sin(α)cos(γ)cos(α)+sin(γ)sin(β)sin(α)cos(β)sin(α)sin(γ)sin(α)+cos(γ)sin(β)cos(α)cos(γ)sin(α)+sin(γ)sin(β)cos(α)cos(β)cos(α)axayaz
⇒ [ a x a y a z ] = [ c o s ( γ ) c o s ( β ) s i n ( γ ) c o s ( β ) − s i n ( β ) − s i n ( γ ) c o s ( α ) + c o s ( γ ) s i n ( β ) s i n ( α ) c o s ( γ ) c o s ( α ) + s i n ( γ ) s i n ( β ) s i n ( α ) c o s ( β ) s i n ( α ) s i n ( γ ) s i n ( α ) + c o s ( γ ) s i n ( β ) c o s ( α ) − c o s ( γ ) s i n ( α ) + s i n ( γ ) s i n ( β ) c o s ( α ) c o s ( β ) c o s ( α ) ] [ 0 0 g ] \Rightarrow \left[ \begin{matrix}a_x\\a_y\\a_z \end{matrix} \right] =\left[ \begin{matrix}cos(\gamma)cos(\beta)& sin(\gamma)cos(\beta)&-sin(\beta) \\-sin(\gamma)cos(\alpha)+cos(\gamma)sin(\beta)sin(\alpha) &cos(\gamma)cos(\alpha)+sin(\gamma)sin(\beta)sin(\alpha)& cos(\beta)sin(\alpha)\\sin(\gamma)sin(\alpha)+cos(\gamma)sin(\beta)cos(\alpha)&-cos(\gamma)sin(\alpha)+sin(\gamma)sin(\beta)cos(\alpha)&cos(\beta)cos(\alpha) \end{matrix} \right] \left[ \begin{matrix}0\\0\\g \end{matrix} \right] axayaz=cos(γ)cos(β)sin(γ)cos(α)+cos(γ)sin(β)sin(α)sin(γ)sin(α)+cos(γ)sin(β)cos(α)sin(γ)cos(β)cos(γ)cos(α)+sin(γ)sin(β)sin(α)cos(γ)sin(α)+sin(γ)sin(β)cos(α)sin(β)cos(β)sin(α)cos(β)cos(α)00g
故求出重力在各轴上的分量为:
{ a x = − g s i n ( β ) a y = g c o s ( β ) s i n ( α ) a z = g c o s ( β ) c o s ( α ) \left\{ \begin{aligned} a_x & = & -gsin(\beta) \\ a_y & = & gcos(\beta)sin(\alpha)\\ a_z & = &gcos(\beta)cos(\alpha) \end{aligned} \right. axayaz===gsin(β)gcos(β)sin(α)gcos(β)cos(α)
用实际的加速值减去重力在各轴上的加速度分量,将得到外力在IMU各轴上的分量:
{ e a x = r a x − a x e a y = r a y − a y e a z = r a z − a z \left\{ \begin{aligned} ea_x & = & ra_x - a_x \\ ea_y & = & ra_y - a_y\\ ea_z & = & ra_z - a_z \end{aligned} \right. eaxeayeaz===raxaxrayayrazaz
再根据公式 p a = R z R y R x p b p_a=R_zR_yR_x p_b pa=RzRyRxpb,求外力沿世界坐标系各轴的分量:
⇒ [ w a x w a y w a z ] = [ c o s ( γ ) c o s ( β ) − s i n ( γ ) c o s ( α ) + c o s ( γ ) s i n ( β ) s i n ( α ) s i n ( γ ) s i n ( α ) + c o s ( γ ) s i n ( β ) c o s ( α ) s i n ( γ ) c o s ( β ) c o s ( γ ) c o s ( α ) + s i n ( γ ) s i n ( β ) s i n ( α ) − c o s ( γ ) s i n ( α ) + s i n ( γ ) s i n ( β ) c o s ( α ) − s i n ( β ) c o s ( β ) s i n ( α ) c o s ( β ) c o s ( α ) ] [ e a x e a y e a z ] \Rightarrow\left[ \begin{matrix}wa_x\\wa_y\\wa_z \end{matrix} \right]=\left[ \begin{matrix} cos(\gamma)cos(\beta) & -sin(\gamma)cos(\alpha)+cos(\gamma)sin(\beta)sin(\alpha) & sin(\gamma)sin(\alpha)+cos(\gamma)sin(\beta)cos(\alpha) \\sin(\gamma)cos(\beta) & cos(\gamma)cos(\alpha)+sin(\gamma)sin(\beta)sin(\alpha) & -cos(\gamma)sin(\alpha)+sin(\gamma)sin(\beta)cos(\alpha) \\ -sin(\beta) & cos(\beta)sin(\alpha) & cos(\beta)cos(\alpha) \end{matrix} \right] \left[ \begin{matrix}ea_x\\ea_y\\ea_z \end{matrix} \right] waxwaywaz=cos(γ)cos(β)sin(γ)cos(β)sin(β)sin(γ)cos(α)+cos(γ)sin(β)sin(α)cos(γ)cos(α)+sin(γ)sin(β)sin(α)cos(β)sin(α)sin(γ)sin(α)+cos(γ)sin(β)cos(α)cos(γ)sin(α)+sin(γ)sin(β)cos(α)cos(β)cos(α)eaxeayeaz
 当时间很短时,假定IMU在此期间加速度恒定,此时我们可以算出IMU在此期间的沿各轴的位移,可用于在相机高速运动时,估计其位移。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值