SH3001姿态解算

news2024/11/25 13:41:24

姿态角,机体坐标系相对于参考坐标系的角度

旋转的非交换性

姿态角指的是载体坐标系与参考系之间的关系,

欧拉角是描述物体与某个轴(X,Y,Z)的关系,欧拉角属于姿态角的一种常见描述形式,另外两种描述形式就是四元数和和旋转矩阵

飞控绕各个轴旋转的角度相同但顺序不同,最终的姿态通常是不同的。这是因为旋转顺序对最终姿态有重要影响。这种现象在数学上被称为“旋转的非交换性”(non-commutativity of rotations)。

旋转的非交换性

在三维空间中,绕不同轴的旋转顺序会影响最终的姿态。具体来说,绕X轴、Y轴和Z轴的旋转顺序不同,会导致不同的最终姿态。这可以通过旋转矩阵或四元数来直观地理解。

示例说明

假设我们有一个初始姿态为单位矩阵 II 的物体,我们需要绕X轴、Y轴和Z轴各旋转 θθ 角度。我们来看看不同旋转顺序的结果。

1. 绕X轴 → 绕Y轴 → 绕Z轴
  1. 绕X轴旋转 θθ 角度

    Rx(θ)=(1000cos⁡(θ)−sin⁡(θ)0sin⁡(θ)cos⁡(θ))Rx​(θ)=​100​0cos(θ)sin(θ)​0−sin(θ)cos(θ)​​

  2. 绕Y轴旋转 θθ 角度

    Ry(θ)=(cos⁡(θ)0sin⁡(θ)010−sin⁡(θ)0cos⁡(θ))Ry​(θ)=​cos(θ)0−sin(θ)​010​sin(θ)0cos(θ)​​

  3. 绕Z轴旋转 θθ 角度

    Rz(θ)=(cos⁡(θ)−sin⁡(θ)0sin⁡(θ)cos⁡(θ)0001)Rz​(θ)=​cos(θ)sin(θ)0​−sin(θ)cos(θ)0​001​​

最终的旋转矩阵为:

R=Rz(θ)⋅Ry(θ)⋅Rx(θ)R=Rz​(θ)⋅Ry​(θ)⋅Rx​(θ)

2. 绕Y轴 → 绕Z轴 → 绕X轴
  1. 绕Y轴旋转 θθ 角度

    Ry(θ)=(cos⁡(θ)0sin⁡(θ)010−sin⁡(θ)0cos⁡(θ))Ry​(θ)=​cos(θ)0−sin(θ)​010​sin(θ)0cos(θ)​​

  2. 绕Z轴旋转 θθ 角度

    Rz(θ)=(cos⁡(θ)−sin⁡(θ)0sin⁡(θ)cos⁡(θ)0001)Rz​(θ)=​cos(θ)sin(θ)0​−sin(θ)cos(θ)0​001​​

  3. 绕X轴旋转 θθ 角度

    Rx(θ)=(1000cos⁡(θ)−sin⁡(θ)0sin⁡(θ)cos⁡(θ))Rx​(θ)=​100​0cos(θ)sin(θ)​0−sin(θ)cos(θ)​​

最终的旋转矩阵为:

R′=Rx(θ)⋅Rz(θ)⋅Ry(θ)R′=Rx​(θ)⋅Rz​(θ)⋅Ry​(θ)

比较结果

尽管每个单独的旋转矩阵都是相同的,但由于矩阵乘法的非交换性,RR 和 R′R′ 通常是不同的。这意味着最终的姿态也会不同。

四元数表示

同样的道理也适用于四元数表示。四元数 qq 表示旋转时,旋转顺序的不同也会导致不同的最终姿态。例如:

  1. 绕X轴旋转 θθ 角度

    qx=cos⁡(θ/2)+sin⁡(θ/2)iqx​=cos(θ/2)+sin(θ/2)i

  2. 绕Y轴旋转 θθ 角度

    qy=cos⁡(θ/2)+sin⁡(θ/2)jqy​=cos(θ/2)+sin(θ/2)j

  3. 绕Z轴旋转 θθ 角度

    qz=cos⁡(θ/2)+sin⁡(θ/2)kqz​=cos(θ/2)+sin(θ/2)k

最终的四元数为:

q=qz⋅qy⋅qxq=qz​⋅qy​⋅qx​

q′=qx⋅qz⋅qyq′=qx​⋅qz​⋅qy​

这两个四元数 qq 和 q′q′ 也是不同的,因此最终的姿态也会不同。

结论

飞控绕各个轴旋转的角度相同但顺序不同,最终的姿态通常是不同的。这是因为旋转的非交换性,即旋转矩阵或四元数的乘法顺序不同会导致不同的结果。因此,在设计和实现飞控系统时,必须明确旋转顺序,以确保达到预期的姿态。

atan的,反正切,atan(0.75) = 37度, 常见三角形状勾3股4玄5

矩阵相乘顺序导致结果不同

根据方向余弦矩阵得到roll(横滚角)pitch(俯仰角)解算不出来偏航角

单纯用加速度计有缺陷

用陀螺仪检测姿态角

角速度进行积分得到角度,角速度有误差,一直积分会放大误差

角度融合

计算角度:

角速度积分-》积分漂移 (低频误差)   

加速度正交-》震动误差     (高频误差) 

所以有了互补滤波(向量外积补偿) 

PI比例,积分项进行陀螺仪误差补偿

姿态的表现形式之一 四元数 和 旋转矩阵     欧拉角表示姿态会出现万向节死锁

万向节死锁

万向节死锁(Gimbal Lock)是使用欧拉角表示旋转时可能出现的一种问题。当两个旋转轴对齐时,系统会失去一个自由度,导致无法唯一确定某些姿态。这个问题在航空、航天和机器人等领域中尤其重要,因为它们依赖于精确的姿态控制。

万向节死锁的成因

万向节死锁发生在使用欧拉角表示旋转时,当两个旋转轴对齐时,系统会失去一个自由度。具体来说,当俯仰角(Pitch Angle) θθ 接近 ±90∘±90∘(即 θ=±π2θ=±2π​)时,滚转角(Roll Angle) ϕϕ 和偏航角(Yaw Angle) ψψ 的旋转轴会重合,导致无法唯一确定某些姿态。

图解说明

假设我们使用 Z-Y-X 欧拉角顺序(航向-俯仰-滚转)来描述旋转:

  1. 初始状态

    • 物体的初始姿态为 OXYZOXYZ。
  2. 绕Z轴旋转 ψψ 角度

    • 物体绕Z轴旋转 ψψ 角度,新的姿态为 ( OX'Y'Z' \)。
  3. 绕Y'轴旋转 θθ 角度

    • 物体绕新的Y'轴旋转 θθ 角度,新的姿态为 ( OX''Y''Z'' \)。
  4. 绕X''轴旋转 ϕϕ 角度

    • 物体绕新的X''轴旋转 ϕϕ 触度,最终姿态为 ( OX'''Y'''Z''' \)。

当 θ=±π2θ=±2π​ 时,新的Y'轴与Z轴对齐,此时X''轴和Z轴重合,导致无法区分滚转角 ϕϕ 和偏航角 ψψ 的旋转效果。

数学解释

使用旋转矩阵表示 Z-Y-X 欧拉角顺序的旋转:

解决方法

  1. 使用四元数(Quaternions)

    • 四元数是一种用于表示旋转的数学工具,由四个分量组成:一个实部和三个虚部。
    • 四元数可以避免欧拉角中的奇异点问题(如万向节死锁)。
    • 四元数通常表示为 q=[w,x,y,z]q=[w,x,y,z],其中 ww 是实部,x,y,zx,y,z 是虚部。
  2. 使用旋转矩阵(Rotation Matrices)

    • 旋转矩阵是一个3x3的矩阵,用于表示从一个坐标系到另一个坐标系的旋转。
    • 旋转矩阵可以直接用于坐标变换,且易于理解和实现。

示例代码

以下是一个简单的示例代码,展示如何使用四元数表示旋转并避免万向节死锁:

 
 

python

深色版本

import numpy as np

def euler_to_quaternion(roll, pitch, yaw):
    cy = np.cos(yaw * 0.5)
    sy = np.sin(yaw * 0.5)
    cp = np.cos(pitch * 0.5)
    sp = np.sin(pitch * 0.5)
    cr = np.cos(roll * 0.5)
    sr = np.sin(roll * 0.5)
    
    w = cr * cp * cy + sr * sp * sy
    x = sr * cp * cy - cr * sp * sy
    y = cr * sp * cy + sr * cp * sy
    z = cr * cp * sy - sr * sp * cy
    
    return np.array([w, x, y, z])

def quaternion_to_rotation_matrix(q):
    w, x, y, z = q
    return np.array([
        [1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w],
        [2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w],
        [2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y]
    ])

# 示例:绕Z轴旋转45度,绕Y轴旋转90度,绕X轴旋转30度
roll = np.radians(30)
pitch = np.radians(90)
yaw = np.radians(45)

# 将欧拉角转换为四元数
q = euler_to_quaternion(roll, pitch, yaw)

# 将四元数转换为旋转矩阵
R = quaternion_to_rotation_matrix(q)

print("四元数:", q)
print("旋转矩阵:\n", R)

总结

  1. 万向节死锁:当使用欧拉角表示旋转时,如果俯仰角 θθ 接近 ±90∘±90∘,系统会失去一个自由度,导致无法唯一确定某些姿态。
  2. 解决方法:使用四元数或旋转矩阵可以避免万向节死锁问题,确保姿态的唯一性和准确性。

2.姿态融合理论和代码部分

四元数求得欧拉角

载体的姿态解算需要实时更新四元数,通过构建四元数和时间的微分方程

得到这4个q就能得到欧拉角

运用一阶龙格库塔法求解微分方程

代入矩阵,求解

想要数值更精确,就需要更高阶次的龙格库塔法

校准                

理想情况, XY轴输出的应该是0,而Z轴输出的应该是1g,所以

陀螺仪水平放置的时候各轴输出应该也是为0,所以也需要对陀螺仪进行三维校准

校准方法:

开发板水平静止放置的时候,采集一两百次求个平均作为校准值保存起来,然后工作状态下各轴的输出就是采集的数据减去各轴的校准值

第三行和代码对应

误差

加速度计得到实际重力加速度和理论重力加速度分量沿X,Y,Z轴的分量的误差

误差的积分的解算对应中间的代码

所以补偿误差通过构建PI(比例-积分)控制器来控制补偿值的大小与精度补偿到陀螺仪代码如下

对于四元数的求解,采用的是二阶龙格库塔法

网址详解互补滤波四元数中向量叉积与陀螺仪角速度补偿问题(Mahony算法)_陀螺仪陀螺仪 互补滤波程序c语言-CSDN博客

采用的是一阶龙格库塔法,如下

通过得到的姿态修正融合得到的四元数来求解欧拉角

由于加速度的数据容易受电机等高频干扰,所以这里进行了一阶低通滤波

加权

加权(Weighting) 是一种在数据分析和处理中常用的技术,通过赋予不同数据点不同的权重来反映它们在整体中的重要性或可信度。加权可以用于各种场景,如统计分析、机器学习、信号处理和决策制定等。

加权的基本概念

  1. 权重(Weight)

    • 权重是一个数值,表示某个数据点在整体中的相对重要性或可信度。
    • 权重通常是非负的,且所有权重之和通常为1(归一化)。
    • 加权的应用场景

    • 统计分析

      • 加权平均:在计算平均值时,某些数据点可能比其他数据点更重要。例如,计算学生的综合成绩时,不同科目的权重可能不同。
      • 加权回归:在回归分析中,某些数据点的误差可能更大,可以赋予这些数据点较小的权重。
    • 机器学习

      • 加权损失函数:在训练模型时,某些样本的重要性可能更高,可以通过加权损失函数来反映这一点。
      • 加权投票:在集成学习中,不同模型的预测结果可以赋予不同的权重,以提高整体预测的准确性。
    • 信号处理

      • 加权滤波:在滤波器设计中,可以赋予不同频率成分不同的权重,以突出或抑制某些频率。
    • 决策制定

      • 加权评分:在多准则决策中,不同准则的重要程度不同,可以通过加权评分来综合评估备选方案。

一阶低通滤波用到的公式如下,让采样值和上次滤波输出按照滤波系数进行加权,使输出对输入有反馈作用

对加速度计做一阶低通滤波的函数如下

新值权值*本次采样值+久值权值*上次滤波输出值 = 这次滤波输出 

这就是一阶惯性滤波算法(一阶低通滤波)如下,对加速度计的高频干扰(滤除),理论上是这样

权值,    新值权值+久值权值 = 1  

将加速度经过一阶低通滤波和角速度转换得弧度表示的角速度后    就是数据解算,然后再经过姿态解算出四元数,最后得到三个角度(也就是欧拉角)

AD值对应的灵敏度   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-19

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后,也许会疑惑整形数组要如何拷贝,而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数,可以按字节拷贝任意类型的数组,比如整形数组。 …

【数据分享】1901-2023年我国省市县镇四级的逐年降水数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月降水栅格数据和Shp和Excel格式的省市县四级逐月降水数据,原始的逐月降水栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据!基于逐月数据我们采用求年累计值的方法得到逐年降水栅格数据&#…

【Qt问题】解决 Cannot retrieve debugging output

【Qt问题】解决 Cannot retrieve debugging output Chapter1 【Qt问题】解决 Cannot retrieve debugging output方案1 关闭其他Qt工程实例(等于没说)方案2 在PRO文件中,加上CONFIG console Chapter1 【Qt问题】解决 Cannot retrieve debuggi…

软考中级 软件设计师 上午考试内容笔记(个人向)Part.3

软考上午考试内容 7. 网络安全 威胁名称描述恶意攻击(ARP)所截获的合法通信数据拷贝,出于非法的目的而被重新发送。拒绝服务(DOS)对信息或其它资源的合法访问被无条件地阻止。窃听用户可利用合法或非法的手段窃取系统中…

第四十章 Vue之使用ESLint修正代码规范

目录 一、引言 二、前端开发规范 三、ESLint规范工具 四、ESLint规范错误解决方式 4.1. 手动修正 4.2. 自动修正 JavaScript Standard Style 规范说明地址: https://standardjs.com/rules-zhcn.html 一、引言 在我们实际项目的开发过程中,统一标…

力扣题目解析--删除链表的倒数第n个节点

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…

web实操5——http数据详解,request对象功能

http请求数据 现在我们浏览器f12的那些是浏览器给http格式数据整理之后便于我们阅读的。 原始的http格式信息: 就是按照一定格式和符号的字符串: 请求行:格式如下图 请求头:一个个key,value数据,用,分割…

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 相比其他学科,医学AI,是发表学术成果最多的领域。 医学数据的多样性和复杂性(包括文本、图像、基因组数据等),使得…

React的概念以及发展前景如何?

React是一个由Facebook开发的用于构建用户界面的的开源JavaScript库,它主要用于构建大型、动态的Web应用程序。React的主要特点是使用VirtualDOM(虚拟DOM)来优化性能,并使用声明式的编程方式来编写UI。 React的主要概念包括&#…

计算机课程管理:Spring Boot与工程认证的协同

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

【Linux系列】命令行中的文本处理:从中划线到下划线与大写转换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

不一样的CSS(一)

目录 前言: 一、规则图形 1.介绍: 2.正方形与长方形(实心与空心) 2.1正方形: 2.2长方形 3.圆形与椭圆形(空心与实心) 3.1圆形与椭圆形 4.不同方向的三角形 4.1原理 4.2边框属性 5.四…

HPM6750EVK2开发板程序烧录测试

对于HPM6750EVK2开发板,官方板子上没有板载调试器,从淘宝上购买了一个,据说配套的调试器,进行测试,仅此进行记录。 开发板HPM6750EVK2 openocd调试器图片 openocd调试器,淘宝链接 http://e.tb.cn/h.TZH7b…

斐波那契数的第n个数代码分享(c基础)

1&#xff1a;迭代 //斐波那契数的第n个数 #include<stdio.h> //unsigned long long Fib(n) //{ // // if (1 n || 2 n) // return 1; // else return Fib((n - 1) Fib((n - 2); // // //} unsigned long long Fib(n) {if (n 1 || n 2)return 1;else{int j 3;u…

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…

私域流量圈层在新消费时代的机遇与挑战:兼论开源 AI 智能名片、2 + 1 链动模式、S2B2C 商城小程序的应用

摘要&#xff1a;本文剖析了私域流量圈层在新消费时代呈现出的独特温度与信任优势&#xff0c;阐述了从传统销售到新消费转型中用户心理的变化。同时&#xff0c;强调了内容对于私域流量的关键作用&#xff0c;并分析开源 AI 智能名片、2 1 链动模式、S2B2C 商城小程序在私域流…

WPF之iconfont(字体图标)使用

1&#xff0c;前文&#xff1a; WPF的Xaml是与前端的Html有着高度相似性的标记语言&#xff0c;所以Xaml也可同Html一般轻松使用阿里提供的海量字体图标&#xff0c;从而有效的减少开发工作度。 2&#xff0c;下载字体图标&#xff1a; 登录阿里图标库网iconfont-阿里巴巴矢量…

[Meachines] [Medium] MonitorsThree SQLI+Cacti-CMS-RCE+Duplicati权限提升

信息收集 IP AddressOpening Ports10.10.11.30TCP:22&#xff0c;80 $ nmap -p- 10.10.11.30 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0) | …