惯性导航算法(一)-预备知识+欧拉角法(上)

惯性导航算法

前言:对于姿态、速度和位置的解算,我们一般都是先推出连续时间的微分方程,然后对其进行数值求解,然后得到一个离散化的,可用计算机执行的,更新算法

惯导机械编排算法

预备知识

惯性导航中的常用坐标系

地心惯性坐标系(i),地心地固坐标系(e),导航坐标系(n),载体坐标系(b)

地球表面导航的主要状态量

位置:地心->载体
速度:地速
姿态:b系相对于n系(或e系)

导航状态量的表示

位置、速度、加速度和角速度等状态量用向量来表示,准确的
表达涉及三种坐标系
在这里插入图片描述
1.要注意,不能混淆向量与向量的坐标,向量的坐标只是向量的一种表示/描述;而向量是唯一的。
2.姿态不能用向量表示

位置向量

在这里插入图片描述

速度向量

在这里插入图片描述

姿态

欧拉角
方向余弦矩阵
四元数
旋转矢量(描述姿态变化)

角速度向量

任意坐标系b 相对于参考坐标系R 的转动角速度向量,在坐标
系p 下的投影,可写成如下向量符号
在这里插入图片描述

反对称矩阵

反对称矩阵是向量的另一种表达形式
在这里插入图片描述

IMU 的增量输出

实际的中高精度的惯导,输出的不是陀螺输出角速度和加速度计输出比力,而是陀螺输出角增量,加速度计输出速度增量,是一个短时间内的积分
速度增量和角度增量输出
采样定理: 带宽vs. 数据率(香农采样定律,也就是采样率fs要大于被测信号带宽的2倍2*BW,否则就不能用离散化的采样来恢复原来的信号;这样就能在把连续时间变化的信号离散化的过程中的损失降到最小)
连续时间vs. 离散时间
在这里插入图片描述
上图(纵轴为角速度)表示,采样率增大(加密)就可以降低在离散化中的精度损失,因此必须要极高采样率,但是这样会极大的增加工作量(而且对硬件和功耗要求也很高);因此,前辈们就想到了,在采集的时候,就先把那一段时间的角增量,也就是那一小块的面积计算出来(把积分的过程提前),然后后面处理的时候直接相加,就能得到姿态,因此,惯导的输出一般都采用增量的形式

圆锥效应(对应姿态计算补偿), 划桨效应(对应速度计算补偿),涡卷效应(对应位置计算补偿)
上面三个效应补偿,可以应对,由于离散化,造成的三维解算的损失
在这里插入图片描述
有些厂家,在实际应用时,用到的确实是增量,但是为了输出数据信息的直观性,就将增量除以了时间t,表示成了平均角速度和平均比力,这个需要注意。本质上仍然是增量。

惯导机械编排原理

捷联惯导利用陀螺的原始测量值计算载体姿态矩阵,通
过姿态矩阵把加速度计测量的载体的沿载体坐标系轴向
的比力信息转换到特定的坐标系中(如导航坐标系),
然后进行导航解算。
在这里插入图片描述

惯性导航姿态算法

欧拉角
姿态及其作用

1.姿态(attitude)描述的是一个坐标系的轴系相对于另一
个坐标系的轴系之间的角度关系(方向)
2.坐标系可以看成刚体,而姿态是描述刚体的六参数(三
个坐标和三个轴向角度)中的三个。描述姿态需要三个
独立参数
3.在惯性导航中,姿态主要用于比力、角速度及其它向量
投影变换(例如从载体坐标系变换到导航坐标系)

欧拉角

欧拉证明任意两个正交坐标系之间的相对朝向关系可以通过一组不少于3的角度来描述。这三次旋转的转角称为一组欧拉角,因最早由欧拉(Leonhard Euler )提出而得名。
注:三个姿态角就是一组欧拉角

欧拉旋转定理

在运动学里,欧拉旋转定理表明,在三维空间里,假设一个刚体在做一个旋转的时候,刚体内部至少有一点固定不动,则此位移等价于一个绕着包含那固定点的固定轴(这个固定轴所在的矢量,就是等效旋转矢量)的旋转。
注:等效旋转矢量就是基于欧拉旋转定理提出的

欧拉角组

1.在三维欧氏空间里,任何两个正交坐标系都可以用坐标变换
把它们联系起来,而坐标变换又可以用坐标旋转来得到。
2.一个动坐标系相对参考坐标系的方位,可以完全由动坐标系
依次绕三个不同的转轴的转角来确定。
在这里插入图片描述

3.在给定一组欧拉角表示两个坐标系间的姿态关系时,一定要同时指定对应的转轴顺序才有意义。

常用姿态角的定义

在这里插入图片描述

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
计算姿态角的方有多种,其中一种基于陀螺仪和加速度计的融合方如下: 1. 读取陀螺仪和加速度计的原始数据。 2. 对加速度计数据进行归一化处理并计算出当前姿态下的重力加速度分量。 3. 对陀螺仪数据进行积分得到角速度,并用四元数表示当前姿态下的旋转量。 4. 对四元数进行更新,其中旋转增量由陀螺仪积分得到,旋转轴由加速度计得到。 5. 将更新后的四元数转换为欧拉角表示姿态角。 下面是用Matlab实现的代码示例: ```matlab % 读取陀螺仪和加速度计数据 gyro = read_gyro_data(); accel = read_accel_data(); % 归一化加速度计数据并计算重力加速度分量 g = [0; 0; norm(accel)]; a_norm = accel / norm(accel); % 初始化四元数,初始姿态为平躺 q = [1; 0; 0; 0]; % 设置采样时间和陀螺仪噪声标准差 dt = 0.01; gyro_noise_std = 0.1; for i = 1:length(gyro) % 计算旋转增量和旋转轴 w = gyro(i,:)'; w_noise = w + gyro_noise_std * randn(3,1); theta = norm(w_noise) * dt; if theta ~= 0 axis = w_noise / norm(w_noise); q_delta = [cos(theta/2); sin(theta/2)*axis]; else q_delta = [1; 0; 0; 0]; end % 更新四元数 q = quatmultiply(q, q_delta); q = q / norm(q); % 将四元数转换为欧拉角 yaw = atan2(2*(q(2)*q(3) + q(1)*q(4)), q(1)^2 + q(2)^2 - q(3)^2 - q(4)^2); pitch = asin(-2*(q(2)*q(4) - q(1)*q(3))); roll = atan2(2*(q(3)*q(4) + q(1)*q(2)), q(1)^2 - q(2)^2 - q(3)^2 + q(4)^2); end ``` 上述代码仅作为参考,具体实现需要根据具体硬件和数据格式进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十八与她

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

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

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

打赏作者

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

抵扣说明:

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

余额充值