【姿态解算初体验】(三)四元数姿态表示总结

简介

最近学习EKF,在看到四元数的坐标转换时碰到点疑问,最后慢慢也弄明白其使用方法,现做总结。
四元数使用中无非三种转换情况:
1、欧拉角 —— 四元数 之间互相转换;
2、旋转矩阵 —— 四元数 之间互相转换;
3、轴角 —— 四元数 之间互相转换,其中轴角转四元数用的最多。
PS:以下 N或e表示NED坐标系(N系), B或b表示Body机体坐标系(B系)

用法一:欧拉角——四元数

转换公式可以很容易查到,分为以下几种情况:

1、Euler2Quat:

最原始的公式
在这里插入图片描述
小角度假设前提下,无穷小化简后得到公式:
Euler2Quat = 【1 0.5*(roll,pitch,yaw)】
具体推到方法只要把sin(x)等价为x(二阶无穷小等价为0),cos(x)等价为1,就可以得到上述公式

2、Euler 2 Vect 2 Quat:

欧拉角旋转先转换为轴角,再由轴角转换为欧拉角,这种方式往往在不能小角度假设时使用,转换方式如下:
假设得到的转角为Euler = 【R , P,Y】,单位化得到旋转轴Vect,取向量的模得到旋转角θ,再通过下面的公式得到四元数:
Quat = 【cos(θ/2) Vect * sin(θ/2)】
注意代入的角度是θ/2,可以看出,如果使用小角度假设,等价无穷小后就和Euler2Quat = 【1 0.5*(roll,pitch,yaw)】这个公式相同了。
个人认为Euler 2 Vect 2 Quat这种方式可以用在IMU数据读取频率小的时候,得到的Δ角度比较大。

3、Quat 2 Euler:

这种方式往往就是需要从估计器中读取姿态角时需要的了,转换公式如下:
在这里插入图片描述

用法二:旋转矩阵——四元数

最开始,一直想不通为什么要用这么多种姿态表示方式,一直用四元数不就得了。后来发现,在进行同一向量在两个坐标系(N系和B系)间转换时,如果采用四元数计算,好像计算复杂度比旋转矩阵还要高,而且还需要把三维的向量在第一位补零成四维才可以进行计算,那不如就先转换成旋转矩阵,然后用旋转矩阵去乘。

1、Quat 2 R

因此最常用的转换是四元数 转 旋转矩阵,过程如下:
在这里插入图片描述
特别注意:可以看到,旋转矩阵R的上下角标和四元数q是相反的,这是因为q
表示的是坐标系的旋转,也就是把e系旋转到b系,而biaoshi在这里插入图片描述表示的是向量的旋转,也即把一个在B系下表示的向量转换到在e系下表示。这也就是转换后上下角标要反过来了。

2、R 2 Quat

说实话到现在好像还没见过那个地方有这个转换,好像不是很常用,公式如下:
假设R为:
在这里插入图片描述
则四元数为:
在这里插入图片描述
Q的符号确定如下:
在这里插入图片描述

用法三:轴角 —— 四元数

这个转换可能是最常用的一种,但是尤其需要区别出,这个轴角表示的是旋转了向量,还是旋转了坐标系

旋转坐标系Vect 2 Quat:

这种方式其实就是和上面“用法一”提到的Euler 2 Vect 2 Quat内容相同。就不再多赘述了。

旋转向量Vect 2 Quat:

这种方式用的最多的应该就是求姿态误差了,也是用的最多的一种。
举例如下:
在控制飞机自稳时,我们往往会优先保证飞机roll和pitch角为0,这个时候也就是加速度计为【0,0,n】的时候,这可以看成一个目标向量。
假设当前的加速度计数值为【a , b , c】,这就是当前的向量。
其实这两个向量的方向是相同的(如果飞机处于匀速或静止状态)。数值不同是同一个向量在不同坐标系下表示的结果。
【0,0,n】显然是N系坐标系下的表示,【a , b , c】是B系下的表示,如果把【a , b , c】的数值放到N系上,就有了两个方向不同的向量,其中【a,b,c】是倾斜的与NED的D方向有一定的夹角,这个夹角的值β = arctan(Ah ,-Az)
其中Ah = sqrt(a^2 + b^2), Az= c
有了这两个向量,我们可以找出怎么把向量【a,b,c】旋转到【0,0,n】,得到这个旋转,我们就能知道怎么把飞机旋转到水平位置了。现在我们已经知道旋转角了,其实就是β = arctan(Ah ,-Az),而旋转轴只需要通过向量的叉乘【a,b,c】x【0,0,n】便可以得到。
现在我们有了旋转轴和旋转角,也就是轴角,就可以通过公式**Quat = 【cos(θ/2) Vect * sin(θ/2)】**得到这个旋转的四元数。
好了,这里注意,这个四元数表示的是怎样的坐标系旋转呢?
根据上面提到的,现在旋转的是向量。我们是将倾斜向量旋转到与NED的D方向重合,使飞机水平。
那么得到的四元数表示的坐标系旋转就应为,把水平坐标系旋转到倾斜的坐标系。
因此,通过这种方式求误差角时,要格外注意四元数所表示的是坐标系从哪到哪的旋转

Quat 2 Vect:

目前为止,好像这种转换用的也少,也是需要格外注意以下,得到的转换后得到的轴角是旋转坐标系还是向量,不能搞反了。
转换公式可以通过Quat 2 Euler 2 Vect获得。

总结

1、四元数与欧拉角的转换较为简单,一般都表示坐标系的旋转;
2、旋转矩阵与四元数转换时,需要交换上下角标;
3、轴角与四元数的转换要格外注意轴角是用来旋转的向量还是坐标系,如果是坐标系则跟1相同,如果是向量则跟2相同。

好了,这些乱七八糟的姿态表示和旋转求误差什么的总算理清楚了

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 捷联惯导姿态是指利用惯性测量单元(IMU)的数据,通过计,得出装备的朝向姿态姿态的结果是一个四元数。MATLAB是一种常用的科学计软件,被广泛应用于数学建模、数据处理、信号处理、工程仿真等领域。 在MATLAB中进行捷联惯导姿态四元数需要先收集IMU从加速度计和陀螺仪获取的数据。然后将这些数据输入到MATLAB中的姿态法里,从而得到四元数。 MATLAB有很多集成的工具箱,可以用于实现姿态法,如机器人工具箱(Robotics Toolbox)、惯性测量单元工具箱(IMU Toolbox)等。在使用这些工具箱时,需要按照相应的接口规范来传递IMU数据,进行姿态。比如,在IMU Toolbox中,可以使用函数imufilter()来进行姿态,该函数需要传递IMU数据、采样率等参数,并返回四元数。 总之,MATLAB提供了多种工具和法,可以方便地进行捷联惯导姿态四元数。通过合理的数据处理和输入参数,可以得到精确的姿态结果,为其他领域的应用提供支持。 ### 回答2: 捷联惯导姿态是航空、航天、船舶等应用领域中的重要技术,其中四元数是姿态中常用的表达方式之一。Matlab是一种常用的计机编程语言,其强大的数学计和图形化界面使其成为捷联惯导姿态四元数的理想工具。 在Matlab中,可以使用矩阵运和插值法来实现捷联惯导姿态四元数。首先需要收集传感器输出的角速度和加速度数据,并进行预处理和滤波以减小误差。然后,使用基于四元数的姿态法计出当前时刻的四元数,以及四元数随时间变化的微积分方程。最后,使用插值法将四元数转化为欧拉角或其他形式的姿态表示,以提供更方便的应用接口。 值得注意的是,捷联惯导姿态四元数的精确度和稳定性受到多种因素的影响,如传感器精度、坐标系转换、噪声和温度等因素。因此,在实际应用过程中,需要对数据进行充分的分析和校准,以提高精度并降低误差。同时,使用Matlab进行仿真和验证是一种有效的方法,可以帮助设计和优化捷联惯导姿态四元数的法和系统。 ### 回答3: 捷联惯导姿态四元数Matlab是一种计方法,在机械、航空、导航等领域中常用的姿态方法之一。此方法将加速度计、陀螺仪等传感器的读数转换成四元数表示姿态信息,从而得出物体在三维空间中的方向、位置等参数。通过MATLAB软件,可以非常方便地实现捷联惯导姿态四元数。 捷联惯导姿态四元数MATLAB程序主要包括数据输入、四元数始化、姿态、最优化处理等步骤。数据输入部分将传感器读数导入程序,经过处理和滤波后得到用于姿态的信息。四元数始化通过将始状态的旋转矩阵与四元数之间的转换得到,以及确定四元数的始值。姿态部分则是将传感器读数转换成四元数,再将四元数与前一时刻的状态始值进行微调,最终得到当前时刻的姿态信息。最优化处理部分则是对姿态信息进行优化,提高其精度和准确性。 总之,捷联惯导姿态四元数MATLAB程序是一种非常有用和实用的姿态方法。在机械、航空、导航等领域中得到广泛应用,可大大提高相关工作的效率和精度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yoldfish

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

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

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

打赏作者

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

抵扣说明:

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

余额充值