无人机姿态解算_互补滤波(1)

2023-05-16

一、 基础知识

1. 坐标系:遵循右手定则

1.1 大地坐标系(地球坐标系):北(x轴)东(y轴)地(z轴),就是向下指向地
1.2 机体坐标系: 前(x轴)右(y轴)下(z轴)
1.3 IMU坐标系:该坐标系就是IMU本身的坐标系,一般无人机的IMU都是在飞控的中间,因此,IMU坐标系和机体坐标系可以看做有相同的原点,只需要简单的改变一下坐标轴的正负号就能和机体坐标系一致了,并不需要复杂的旋转。
在这里插入图片描述

在这里插入图片描述

2.姿态: 横滚(roll)俯仰(pitch) 偏航(yaw)

在这里插入图片描述
如果所示:
横滚(roll): 绕x轴旋转的动作叫横滚,向右横滚为正方向,向左横滚为负方向;
俯仰(pitch):绕y轴旋转的动作叫做俯仰,向上(抬头)为正方向,向下为负方向;
偏航(yaw): 绕z轴旋转的动作叫做偏航,向右偏航为正方向,向下偏航为负方向。

3. 旋转矩阵

一般定义旋转矩阵为
在这里插入图片描述
然后欧拉角和四元数都可以表示旋转矩阵,欧拉角和四元数可以互换。然后一般在无人机上,都是用四元数来表示欧拉角的。

4. 欧拉角:横滚角(roll angle)俯仰角(pitch angle) 偏航角(yaw angle)

3.1 姿态角也叫欧拉角。
横滚角(roll angle): 绕x轴横滚的角度,向右横滚为正方向,向左横滚为负方向;
俯仰角(pitch angle):绕y轴俯仰的角度,向上(抬头)为正方向,向下为负方向;
偏航角(yaw angle): 绕z轴偏航的角度,向右(顺时针)偏航为正方向,向左(逆时针)偏航为负方向。

3.2 欧拉角表示旋转,旋转顺序是Z-Y-X。
下面的矩阵是机体系到地球系的旋转矩阵。
在这里插入图片描述

在这里插入图片描述

如果将一个机体系转到地球系就是用上面的矩阵。

下面是地球系到机体系的旋转矩阵。

在这里插入图片描述
下面的意思就是将地球系vg通过地球系到机体系的旋转矩阵旋转至机体系。
在这里插入图片描述

5. 四元数

4.1 四元数:q0,q1,q2,q3,软件中默认初值分别是0,1,1,1。
四元数的更新(即q0,q1,q2,q3怎么来):根据陀螺仪的数据来更新四元数
△t : 是读取陀螺仪的时间,也是调用姿态解算的时间。
wx,wy,wz:分别是陀螺仪测量到的值,单位是弧度每秒,rad/s. 如果用的是度每秒,那么最终的姿态是:你稍微动一下,姿态就变化很大。
在这里插入图片描述

4.2 四元数表示的矩阵

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

6. 用四元数表示欧拉角

欧拉角是地球系下的表示;传感器的数值是在机体系上表示的,因此,需要将机体系转换到地球系。所以要用到下面的旋转矩阵。

在这里插入图片描述

在这里插入图片描述
对比红框的内容就可以用四元数表示欧拉角了:
在这里插入图片描述

二、Mahony 互补滤波算法

开源代码位置:https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
源文件在 《四、代码 》 Algorithm/madgwick_algorithm_c的压缩包中。
在这里插入图片描述

传入的数据:校准且滤波后的九轴数据。其中,陀螺仪的单位要从度转换成弧度,不然的话,稍微动一动IMU,姿态就变换很大。

	gyro.x = gyro.x * DEG2RAD;	/* 度转弧度 */
	gyro.y = gyro.y * DEG2RAD;
	gyro.z = gyro.z * DEG2RAD;

三、 PID控制:Mahony互补滤波中只用到了P和I。

代码中的下面三个参数是需要根据实际来进行修改的。
在这里插入图片描述
这里我只用到了比例调节。下面是根据横滚角输出的PID图,可以看到姿态到达目标姿态还是很快的。

在这里插入图片描述

四、代码

gitee 搜索 stm32_minidrone

如果错误,请指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无人机姿态解算_互补滤波(1) 的相关文章

随机推荐

  • idea修改maven镜像

    https jingyan baidu com article c33e3f482455d2ea15cbb526 html https blog csdn net qq 32588349 article details 51461182 阿
  • Error:(1, 1) java: 非法字符: ‘\ufeff‘

    一 问题 用IDEA打开eclipse java项目编译时 xff0c 出现以下错误 xff1a Error 1 1 java 非法字符 ufeff Error 1 10 java 需要class interface或enum 二 原因分析
  • Zemax学习笔记(4)- 设计单透镜实例_1,设置

    Zemax学习笔记 xff08 4 xff09 设计单透镜 1 xff0c 设置 简介镜头分类参数和设计约束镜头数据编辑器定义系统设置定义视场设置波长插入表面输入镜头数据求解 设计单透镜分为3个部分 xff0c 设置 分析和优化 xff0c
  • libnet安装配置

    安装编译 1 下载安装包 http sourceforge net projects libnet dev 2 解压 tar zxvf libnet 1 2 rc3 tar gz 3 进去编译 configure make make ins
  • idea 创建Spring第一个项目

    1 知道什么是maven 网上一般说maven是一个构建工具 xff0c 其实是说得很准确的 xff0c 不过我觉得更准确的说法应该是一个自动化的构建工具 你可以这样说 xff1a 不用maven的时候所有的jar都不是你家的 xff0c
  • anconda 安装dlib

    pip install CMake pip install Boost 前面两个不知道有没有用 xff0c 我是直接安装了 pip install dlib 会直接报错 xff0c 所以要到网上下载whl文件来安装 xff0c 就可以了 用
  • nodejs学习五:sequelize数据库查询的Op方法

    span class token comment 查找users表数据name span span class token keyword const span op span class token operator span model
  • 使用diskpart修复EFI分区变主分区的问题

    diskgenius有时操作EFI分区会把EFI变成主分区 xff0c 太弱智了 xff0c 呵呵 xff0c 但是这个EFI分区本身有可能会变成主分区 xff0c 这样的话系统就无法识别了 xff0c Win8 1系统的diskpart可
  • 程序员会设计后是一种什么样的感觉

    我是一个iOS开发的程序员 xff0c 也是一个自由职业者 平时靠接一些外包和做自己的产品为生 做了这么多年 xff0c 给我的感觉是 xff1a 如果你只会写程序 xff0c 那么做自由职业者的空间要小很多 01 我为什么要学设计 做自己
  • win10笔记本使用virtualbox鼠标失灵

    win10笔记本使用virtualbox6时 xff0c 发现鼠标移动偏差极大 xff0c 完全无法操作虚拟机 解决方法 xff1a 虚拟机设置中将指点设备切换为USB触控板 xff0c 运行虚拟机后右下角鼠标处右键 xff0c 勾选鼠标集
  • SpringMVC的常用注解

    SpringMVC的常用注解 1 64 Controller 64 Controller 用于标记在一个类上 xff0c 使用它标记的类就是一个SpringMVC Controller 对象 2 64 RequestMapping 用于处理
  • Hive学习之修改表、分区、列

    修改表的语句允许改变现有表的结构 通过该语句可以增加列 分区 修改SerDe 增加表和SerDe的属性或者重命名表 与之类似 修改分区的语句可以改变指定分区的属性 重命名表 重命名表的语句如下 ALTER TABLE table name
  • sftp通过秘钥上传,修改文件

    sftp是通过openssh与服务端建立连接的 xff0c 默认端口为22 1 新建一个sftp的用户 xff0c 这里就叫sftp useradd span class hljs operator s span sbin nologin
  • 说说win32 控制台应用程序、win32 项目、mfc项目、空项目那些事儿

    首先 xff0c 说一下空项目 xff0c 大多数想单纯创建c 43 43 工程的新同学 xff0c 打开vs后很可能不知道选择创建什么工程 xff0c 这时候请相信我 xff0c 空项目是你最好的选择 因为空工程不包含任何的源代码文件 x
  • Docker常用命令,使用脚本在线或者离线安装Docker

    查看 停止 删除container 查看运行的容器 docker ps 查看所有容器 docker ps a 查看所有容器id docker ps aq 先停止运行container xff0c 再删除container xff0c 再删除
  • Spring配置数据源(XML)

    1 数据源 xff08 连接池 xff09 的作用 数据源 连接池 是提高程序性能如出现的 事先实例化数据源 xff0c 初始化部分连接资源 使用连接资源时从数据源中获取 使用完毕后将连接资源归还给数据源 常见的数据源 连接池 xff1a
  • Python开发GUI工具介绍,实战:将图片转化为素描画!

    阳光普照好刺眼 7月华为云社区与csdn联合举办了黑马程序员的征文活动 xff0c 由于规则简单 xff08 保证原创文章 内容为技术类为主 且文章篇幅1000字 43 即可 xff09 xff0c 所以兴高采烈的参加了活动 本来是抱着打酱
  • spring boot配置加载不出来?

    新建一个项目发现不能用 xff0c maven依赖加载不出来 xff0c 问题界面如下 xff1a 可以明确是maven依赖出了问题 xff0c 检查配置 1 xff09 检查本地仓库是否配置正确 xff1a span class toke
  • iOS NSAttributedString(属性字符串)

    NSAttributedString实际上就是一个字符串和一本字典 字典包含每一个字符的属性 xff1a 包括字体 大小 下划线 颜色等等 关键是要知道字典中每个key的含义以及相应value的取值范围 Character Attribut
  • 无人机姿态解算_互补滤波(1)

    一 基础知识 1 坐标系 xff1a 遵循右手定则 1 1 大地坐标系 xff08 地球坐标系 xff09 xff1a 北 xff08 x轴 xff09 东 xff08 y轴 xff09 地 xff08 z轴 xff09 xff0c 地就是