方向余弦阵、四元数、等效旋转矢量的关系和不可交换误差的分析

四元数、等效旋转矢量意义及其原理

四元数:因为旋转轴的位置(定轴或不定轴)、旋转角度是四个数,故而矩阵的变换可以由四个数表示,即四元数的表达矩阵旋转形式
在这里插入图片描述
等效旋转矢量:矩阵沿着旋转轴u(定轴或不定轴)旋转一定的角度(白phi)的到新的矩阵,进而可以的到一种新的矩阵变化的关系表达式,即等效旋转矢量(黑phi)
在这里插入图片描述

u为旋转轴,白phi为旋转的角度,黑phi为等效旋转矢量。对上面两个公式进行分析:
1.当u为定轴时,此时不存在不可交换误差,此时的黑phi为角速度的变化值。
2.当u为不定轴时,此时的存在不可交换误差,u和四元数Q都是变化值,而非常数

欧拉角A、变换矩阵、四元数、等效旋转矢量关系

假设:欧拉角A、变换矩阵、四元数、等效旋转矢量为:

在这里插入图地方片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

则有:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

故而可以通过三者任意一个可以求得其他两个的

function Cnb = q2mat(qnb)  % 四元数转换为姿态阵
    q11 = qnb(1)*qnb(1); q12 = qnb(1)*qnb(2); q13 = qnb(1)*qnb(3); q14 = qnb(1)*qnb(4); 
    q22 = qnb(2)*qnb(2); q23 = qnb(2)*qnb(3); q24 = qnb(2)*qnb(4);     
    q33 = qnb(3)*qnb(3); q34 = qnb(3)*qnb(4);  
    q44 = qnb(4)*qnb(4);
    Cnb = [ q11+q22-q33-q44,  2*(q23-q14),     2*(q24+q13);
            2*(q23+q14),      q11-q22+q33-q44, 2*(q34-q12);
            2*(q24-q13),      2*(q34+q12),     q11-q22-q33+q44 ];
end

function rv = q2rv(q) % 变换四元数转换为等效旋转矢量
	if q(1)<0,  q = -q;  end
    nmhalf = acos(q(1));  % 等效旋转矢量模值的一半
    if nmhalf>1e-20,   b = 2*nmhalf/sin(nmhalf);
    else             b = 2;    end
    rv = b*q(2:4);   % q = [ cos(|rv|/2); sin(|rv|/2)/|rv|*rv ];
end


function m = rv2m(rv)   % 等效旋转矢量转换为变换矩阵
	nm2 = rv'*rv;  % 旋转矢量的模方
    if nm2<1.e-8   % 如果模方很小,则可用泰勒展开前几项求三角函数
        a = 1-nm2*(1/6-nm2/120); b = 0.5-nm2*(1/24-nm2/720);  % a->1, b->0.5
    else
        nm = sqrt(nm2);
        a = sin(nm)/nm;  b = (1-cos(nm))/nm2;
    end
    VX = askew(rv);
    m = eye(3) + a*VX + b*VX^2;
end

function q = rv2q(rv)  % 等效旋转矢量转换为变换四元数
    nm2 = rv'*rv;  % 旋转矢量的模方
    if nm2<1.0e-8  % 如果模方很小,则可用泰勒展开前几项求三角函数
        q0 = 1-nm2*(1/8-nm2/384); s = 1/2-nm2*(1/48-nm2/3840);
    else
        nm = sqrt(nm2);
        q0 = cos(nm/2); s = sin(nm/2)/nm;
    end
    q = [q0; s*rv];
end

Bortz方程和不可交换误差

利用四元数微分方程可以的得到
在这里插入图片描述
定义广义转动矢量:
在这里插入图片描述
将其两边微分
在这里插入图片描述
当f(phi)=phi时,可以得到Bortz,即g=黑phi
在这里插入图片描述
在利用将bortz方程微分,同时线性化w即可得到二子样的不可交换误差表达式
在这里插入图片描述
可以分析出,等效旋转矢量变化值是角速度的积分值和不可交换误差组成。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欧拉角、方向余弦四元数等效旋转矢量都是描述旋转的方式。它们之间的相互转换可以通过学计算来实现。下面是Python代码实现这些转换的示例: 1. 将欧拉角转换为方向余弦 ``` import numpy as np # 定义欧拉角 roll = np.radians(30) pitch = np.radians(45) yaw = np.radians(60) # 计算方向余弦 R_x = np.array([[1, 0, 0], [0, np.cos(roll), -np.sin(roll)], [0, np.sin(roll), np.cos(roll)]]) R_y = np.array([[np.cos(pitch), 0, np.sin(pitch)], [0, 1, 0], [-np.sin(pitch), 0, np.cos(pitch)]]) R_z = np.array([[np.cos(yaw), -np.sin(yaw), 0], [np.sin(yaw), np.cos(yaw), 0], [0, 0, 1]]) R_xyz = np.dot(R_z, np.dot(R_y, R_x)) ``` 2. 将方向余弦转换为欧拉角 ``` import math # 定义方向余弦 R_xyz = np.array([[0.866, -0.354, 0.354], [0.354, 0.866, -0.354], [0.354, 0.354, 0.866]]) # 计算欧拉角 pitch = -math.asin(R_xyz[2, 0]) roll = math.atan2(R_xyz[2, 1], R_xyz[2, 2]) yaw = math.atan2(R_xyz[1, 0], R_xyz[0, 0]) pitch_deg = math.degrees(pitch) roll_deg = math.degrees(roll) yaw_deg = math.degrees(yaw) ``` 3. 将方向余弦转换为四元数 ``` # 定义方向余弦 R_xyz = np.array([[0.866, -0.354, 0.354], [0.354, 0.866, -0.354], [0.354, 0.354, 0.866]]) # 计算四元数 q_w = math.sqrt(1 + R_xyz[0, 0] + R_xyz[1, 1] + R_xyz[2, 2]) / 2 q_x = (R_xyz[2, 1] - R_xyz[1, 2]) / (4 * q_w) q_y = (R_xyz[0, 2] - R_xyz[2, 0]) / (4 * q_w) q_z = (R_xyz[1, 0] - R_xyz[0, 1]) / (4 * q_w) ``` 4. 将四元数转换为方向余弦 ``` # 定义四元数 q_w = 0.866 q_x = -0.354 q_y = 0.354 q_z = 0.354 # 计算方向余弦 R_xyz = np.array([[1 - 2 * (q_y ** 2 + q_z ** 2), 2 * (q_x * q_y - q_w * q_z), 2 * (q_x * q_z + q_w * q_y)], [2 * (q_x * q_y + q_w * q_z), 1 - 2 * (q_x ** 2 + q_z ** 2), 2 * (q_y * q_z - q_w * q_x)], [2 * (q_x * q_z - q_w * q_y), 2 * (q_y * q_z + q_w * q_x), 1 - 2 * (q_x ** 2 + q_y ** 2)]]) ``` 5. 将四元数转换为等效旋转矢量 ``` # 定义四元数 q_w = 0.866 q_x = -0.354 q_y = 0.354 q_z = 0.354 # 计算等效旋转矢量 theta = 2 * math.acos(q_w) sin_theta = math.sin(theta / 2) v_x = q_x / sin_theta v_y = q_y / sin_theta v_z = q_z / sin_theta ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值