四元数与其微分方程

注:这里讨论的是旋转过程的,也可以理解为两个坐标系之间的旋转关系。而不是单独地描述一个坐标系,这是不可能实现的。

四元数

这里要说明,四元数可以理解为四维超球面上的一个点,点坐标用四维坐标轴表示。
在这里插入图片描述
四元数是空间旋转的轴角表示法的进一步理解

四元数的三角表示法

上面介绍了四元数的定义,实际上是四元数的复数表示法。四元数还可以用三角法表示,其更能表达其物理含义。

推导

在这里插入图片描述
参考文献:范奎武. 用四元数描述飞行器姿态时的几个基本问题[J]. 航天控制, 2012, 30(4):49-53.

也可以分开来写:
在这里插入图片描述

几何含义

在这里插入图片描述

扩展:轴角表示法

旋转的轴角表示用两个值参数化了旋转: 一个轴或直线,和描述绕这个轴的旋转量的一个角。
在这里插入图片描述

四元数微分方程

构造目的

陀螺仪测量的是三轴的角速度,根据时间积分得到的是三轴欧拉角。那么现在问题来了,我们要计算总的姿态角,假如初始值是R0,P0,Y0,现在姿态角增量是δR,δP,δY。我们知道R0,P0,Y0是按照ZYX欧拉角描述法,机体依次绕自己的坐标系ZYX进行旋转的,而δR,δP,δY则可以理解为相对于前一个时间的坐标系按照XYZ固定角进行旋转的(也可以理解为机体依次绕自己的坐标系ZYX进行旋转,这两者是等效的)。
因此要积分求最终的姿态角,我们要么就对R0,P0,Y0按照ZYX顺序进行三次旋转,要么就得想其他办法。按照ZYX顺序进行三次旋转显然是十分繁琐的,据说还会遇到万向节死锁的问题。因此有了解四元数的方法。
解四元数的方法本质上就是利用δR,δP,δY按照XYZ固定角进行旋转来求解的。方法是导出δR,δP,δY与四元数的关系:
在这里插入图片描述

其中
在这里插入图片描述

推导过程:微分方程

首先定义坐标系:n系为导航坐标系,b系为载体坐标系,则n系到b系的旋转四元数可以表示为:

上式中为旋转轴,为旋转角,对两边求导可得:

根据哥氏定理可得:

由于刚体绕μ轴旋转,与刚体固联的b坐标系的各个轴在旋转的过程中分别位于三个不同的圆锥面上,三个圆锥面的定点即为b系的原点,μ为其共同的对称轴,这块大家可以想象一下,还是挺容易想象的,这样μ到b坐标系三个轴上的投影不变,长度为各自圆锥底面半径,所以有:

又有:

上式中的意思是:R系到b系的角速度在R系上的投影。

所以:

因此

又因为:

上面公式中是纯单位四元数相乘,根据四元数乘法法则容易推出,详细证明可见附录,所以

可得:

上面公式中的是在导航坐标系下的角速度,而IMU中的陀螺仪测量得到的角速度是在载体坐标系的,所以还需要一个转换关系,根据坐标变换的四元数乘法表示法:

上式中的共轭四元数,所以

带入的公式得:

由于为单位四元数,所以

为陀螺仪的测量值,记

根据四元数的乘法定义, 有两种表示形式,第一种如下所示:

或者也可以写成如下形式:

即为:

数值解法

实际上就是四元数微分方程的解法,常用的有欧拉方法、中值法,毕卡算法,龙格库塔法。

常用的是经典4阶龙格库塔法,公式如下所示:

上面公式中的都是微分方程的一阶导数,即为微分方程中的,同时可以看到一阶导数是关于的函数,即,所以在计算时,只需要更新就可以了,是陀螺仪数据更新周期。

参考代码如下:

% 四元数微分方程的4阶龙格库塔法
% q0:4*1
% gyro:陀螺仪数据
% T:更新周期
function [ q ] = Quaternion_RungeKutta4( q0,gyro,T)
    q0=Norm_Quaternion(q0); %归一化
    K1= Quaternion_Diff( gyro,q0);
    q1=Norm_Quaternion(q0+T/2*K1);
    K2 = Quaternion_Diff(gyro,q1);
    q2=Norm_Quaternion(q0+T/2*K2);
    K3 = Quaternion_Diff(gyro,q2);
    q3=Norm_Quaternion(q0+T*K3);
    K4 = Quaternion_Diff(gyro,q3);
    q = q0 + T/6*(K1+2*K2+2*K3+K4);
    q = Norm_Quaternion(q);
end
 
% 函数功能:四元数微分方程
% 输    出:四元数的一阶导数
% 备    注:连续域
function [ q_diff ] = Quaternion_Diff( gyro,q)
 
A = [       0, -gyro(1)/2, -gyro(2)/2, -gyro(3)/2;
    gyro(1)/2,          0,  gyro(3)/2, -gyro(2)/2;
    gyro(2)/2, -gyro(3)/2,          0,  gyro(1)/2;
    gyro(3)/2,  gyro(2)/2, -gyro(1)/2,         0];
 
q_diff = A*q;
end
 
 
function [ q ] = Norm_Quaternion( q )
 q = q/norm(q,2);
end
 

参考博客

https://blog.csdn.net/qq_45467083/article/details/107082439
https://zhuanlan.zhihu.com/p/101101455
https://blog.csdn.net/waihekor/article/details/103297840
https://blog.csdn.net/sinat_38245860/article/details/80036340

  • 11
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
捷联姿态算法是一种基于惯性测量单元(IMU)数据的姿态估计算法。其中,四元数法是一种常用的捷联姿态算法。以下是四元数法的基本原理和实现方法: 四元数是一种四维复数,可以用来表示三维空间中的旋转。四元数由一个实部和三个虚部组成,通常表示为q = q0 + q1 i + q2 j + q3 k。其中,q0为实部,q1、q2和q3为虚部。 在捷联姿态算法中,四元数可以用来表示IMU测量的姿态。具体地,IMU的数据包括加速度计和陀螺仪的测量值。通过将这些测量值转换为四元数,可以得到IMU的姿态。 四元数法的实现方法主要包括以下步骤: 1. 初始化四元数:在运行算法之前,需要初始化四元数。通常将四元数的实部初始化为1,虚部初始化为0。 2. 计算旋转增量:根据IMU的陀螺仪数据,可以计算出每个时间段内的旋转增量。这可以通过积分陀螺仪的测量值得到。 3. 更新四元数:根据旋转增量和当前的四元数,可以更新四元数。具体地,可以使用四元数微分方程:dq/dt = 0.5 * q * w,其中w为旋转增量对应的四元数。 4. 归一化四元数:为了保证四元数的单位长度,需要在更新后对四元数进行归一化,即将四元数除以其模长。 5. 计算姿态:通过将四元数转换为欧拉角或方向余弦矩阵,可以得到IMU的姿态。 需要注意的是,四元数法需要考虑四元数的奇异性问题,即当四元数的模长为0时,无法更新四元数。因此,在实现过程中需要考虑奇异性的检测和处理。此外,还需要进行误差补偿和积分漂移校准等处理,以提高姿态估计的精度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朽木白露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值