【云台】开源版本SimpleBGC的传感器校准与姿态融合

news2025/1/13 17:38:36

传感器校准

俄版云台使用的是 MPU6050,磁力计使用的是 HMC5883

MPU6050校准

MPU6050校准包含两部分:加速度计与陀螺仪。校准过程想要校准出的数据也就是加速度计与陀螺仪的温漂与零漂。

正常来说,如果将 IMU 朝上静置,加速度计与陀螺仪的读数应该是这样:

MPU6050是按照14位计数的,加速度计最大范围记录2G,那么重力加速度1G就对应 8192

加速度 XY 轴应该是 0,Z 轴由于有重力影响,应该是重力加速度G,同时 XYZ 三轴的角速度也应该是0。但在实际中,总是会有误差的,静置时,加速度计与陀螺仪的读数相对上表中的标准读数是有偏差的,就是零偏,当温度上升时,这个零偏值也会变化,就是温漂。

俄版云台的做法是将温漂与零漂看作是一次函数的模型,分两次校准,刚开始记录一组数据求平均,记录零偏,之后再等待10分钟,等温度上升之后,再记录一组数据求平均,得到第二组温度升高时的零偏,之后按照 y = k * x + b 的方式,y 为零偏值,x 为温度值,求出 k 与 b。得到零漂与温漂的模型,在进行姿态解算时,需要带入零偏,就根据温度以及一次函数求解出对应温度下的零偏。

磁力计校准

磁力计校准需要绕多轴旋转,并且在1分钟内完成,在理想情况下,磁力计在水平方向上旋转 360 度之后,x 与 y 轴的读数是一个正圆形,在垂直方向上也是一样的,如果磁力计存在干扰与误差,那么旋转一周后,读数形成的圆就会偏离圆心的位置,三轴都旋转一周,读数就形成一个球体,磁力计校准就是需要记录偏离球心的位置。

俄版云台也是同样,在采集了多轴旋转的数据之后,通过最小二乘法拟合出数据形成的球体,计算球心,就是磁力计校准需要记录的数据。

姿态解算

俄版云台的姿态解算主要分为:

1)原始数据低通滤波

2)互补滤波计算姿态角(方位角)

3)四元数计算姿态角(航姿角)

云台中使用了两种方法计算姿态角,一种是互补滤波,一种是四元数,互补滤波的权重系数由于是固定的,因此不会发散,在云台中也一直计算,作为一个显示对比数据,通过四元数计算的姿态角加入了运动中的影响,估计的姿态角作为控制层的反馈状态。

使用两种方法在实际出问题时,做数据对比。

互补滤波计算方位角

互补滤波中计算方位角时,由于是直接使用转换为欧拉角进行计算,因此需要在融合陀螺仪的角速度数据时,需要区分欧拉角速度与机体角速度的区别,它们之间有转换矩阵需要进行转换。

欧拉角速度与机体角速度是不同的

欧拉角是相对地面而言的,对欧拉角求导的欧拉角速度也是相对地面的。而机体角速度是相对机体本身的,也就是相对于IMU的原点位置。当机体系与地面坐标系本身就有一定的偏差时,两者差异就会比较大,因此需要一个转换矩阵。

互补滤波得到俯仰角与横滚角

陀螺仪直接测量到的角速度是机体角速度,在转换为欧拉角速度后,乘以时间间隔,再加上上次的估计值,就得到一个陀螺仪积分计算的角度,作为预测值。

加速度计测量到的加速度值可以计算出pitch与roll,作为测量值。

在云台中,陀螺仪的角速度是短期可靠的,加速度计容易受到振动的影响,在长期是可靠的,互补滤波就是给陀螺仪积分得到的角度与加速度计得到的角度分别给权重,利用测量值(加速度计测量得到的角度)校正预测值(陀螺仪积分得到的角度)。

在云台中,权重给的比较简单:

orient[PITCH]   = (orient[PITCH] + gyroRate[PITCH] * dt) + 0.0002f * (smoothAcc[PITCH] - orient[PITCH]);

航向角融合

在方位角的估计中,直接使用欧拉航向角速度进行积分得到航向角。

四元数计算航姿角

与方位角的估算不同的是,使用四元数计算航姿角引入了两个概念来达到校正的目的:

1)使用重力分量作为参考量计算角速度积分得到的姿态与加速度计得到的姿态之间的误差

2)使用PI控制器消除误差

大致流程如下:

1.使用角速度以及龙格库塔积分更新四元数

q0i = (-q1 * gx - q2 * gy - q3 * gz) * halfT;
q1i = (q0 * gx + q2 * gz - q3 * gy) * halfT;
q2i = (q0 * gy - q1 * gz + q3 * gx) * halfT;
q3i = (q0 * gz + q1 * gy - q2 * gx) * halfT;
q0 += q0i;
q1 += q1i;
q2 += q2i;
q3 += q3i;

其中 gx,gy,gz 是机体坐标系下的融合角速度

2.将当前四元数转化为方向余弦矩阵(机体坐标系)并提取出重力分量,得到在机体坐标系下角速度积分得到的姿态(四元数可以看作是经过加速度计修正的角速度积分得到的位姿)中的重力分量向量vg

重力加速度向量是以 [0,0,-g],在云台中,进行了归一化处理,也就是重力加速度向量为 [0,0,-1],因此在俄版云台中,得到角速度积分的位姿的重力分量的实现为:

vx = 2.0f * (q1q3 - q0q2);//计算方向余弦矩阵
vy = 2.0f * (q0q1 + q2q3);
vz = q0q0 - q1q1 - q2q2 + q3q3;

3.加速度计就是实测出来的在机体坐标系下的重力加速度,归一化后作为重力向量的测量值 ag ,但由于可能处于运动状态,此时就不单单是重力加速度了,因此计算了一个可信度参数,叠加到 Kp 参数上

calculateAccConfidence(norm);//由于处于运动状态,所有要计算加速度数据归一化后的可信度
kpAcc = eepromConfig.KpAcc * accConfidence; //加速度比例系数 * 可信度
kiAcc = eepromConfig.KiAcc * accConfidence;//加速度积分系数 * 可信度
normR = 1.0f / norm; //加速度归一化
ax *= normR;
ay *= normR;
az *= normR;

4.计算 vg 与 ag 的叉积,得到两者的偏差向量,可以理解为通过积分得到的姿态与加速度计得到的姿态的角度偏差

exAcc = vy * az - vz * ay; 
eyAcc = vz * ax - vx * az;
ezAcc = vx * ay - vy * ax;

5.偏差经过 Kp,相当于是互补滤波中的加速度计计算的角度的权重,第4步计算出来的叉积,相当于是向量 vg,绕某轴,旋转n度,就可以旋转到向量 ag ,向量 vg 相当于是通过角速度积分得到的角度,向量 ag 相当于是加速度计测量得到的角度,如果 Kp = 0,那么相当于不旋转,以 vg 向量为准,如果 Kp 比较大,那相当于旋转的角度比较大,以 ag 为准。

gx += exAcc * kpAcc;//比例增益控制加速度计的收敛速度
gy += eyAcc * kpAcc;
gz += ezAcc * kpAcc;

同时,也增加了积分项,逐步消除两种测量方式之间的误差:

exAccInt += exAcc * kiAcc;
eyAccInt += eyAcc * kiAcc;
ezAccInt += ezAcc * kiAcc;
gx += exAccInt;
gy += eyAccInt;
gz += ezAccInt;

上述相当于是,角度误差->PI控制器->校正角速度。也就是 gx,gy,gz 就是校正角速度。

6.将校正角速度代入四元数,更新四元数

    q0i = (-q1 * gx - q2 * gy - q3 * gz) * halfT;
    q1i = (q0 * gx + q2 * gz - q3 * gy) * halfT;
    q2i = (q0 * gy - q1 * gz + q3 * gx) * halfT;
    q3i = (q0 * gz + q1 * gy - q2 * gx) * halfT;
    q0 += q0i;
    q1 += q1i;
    q2 += q2i;
    q3 += q3i;

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

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

相关文章

SSM框架学习-Spring Framework系统架构

Spring是一个用来管理对象的技术; 上层需要依赖下层的支持; 面向切面编程:在不影响原始程序的基础上,增强功能; 提供数据访问与集成:说明兼容其它方式访问数据; Transactions:事务控…

第四十章 Unity 按钮 (Button) UI

本章节我们介绍一下按钮UI。首先,我们创建一个新的场景“SampleScene3.unity”。然后,在菜单栏中点击“GameObject”->“UI”->“Button”,截图如下 我们选中刚刚创建的Button,然后查看它的Inspector检视面板,如…

SonarQube Api调用指南

好几年前写过一篇sonar api调用的文档,很多人看,但是当时写的比较简陋,很多小伙伴在下方留言,也答应过一些小伙伴些一篇示例,本文主要目的是一篇扫盲贴。 一、接口文档 要使用sonarqube的api接口,你首先要…

递归递推练习题答案

1.用递归的方法123…N的值(in:5,out:15) def dg(n):if n1:return 1else:return dg(n-1)n nint(input()) print(dg(n))2.输出斐波那契数列的第N项,0,1,1,2,3,5,8&#xf…

GIT:git 教程

1. 版本控制 版本控制(Revision Control)用于在开发过程中管理文件修改历史,方便查看和备份。 它的作用如下: 实现跨区域多人协同开发。追踪和记载一个或者多个文件的历史记录。组织和保护你的源代码和文档。统计工作量。并行开…

Java EE企业级应用开发(SSM)第9章

第9章MyBatis入门 一.预习笔记 1.MyBatis框架的特点 1-1.简单易学 1-2.灵活 1-3.提供映射标签 2.MyBatis核心类 2-1.Configuration 2-2.SqlSessionFactory 2-3.SqlSession 2-4.Exector 2-5.MappedStatement 3.MyBatis工作流程 4.Mybatis入门程序 4-0:导…

RFID安全的三次认证

一.RFID介绍 RFID是Radio Frequency Identification的缩写,即射频识别。它是一种通过用电磁场收集数据并从远距离自动识别物体的技术。它使用无线电波来将信息从一个电子标签传输到读卡器中,而不需要直接接触。这些标签可以嵌入到物品中或附加到物品表面…

用Python给模板邮件加彩蛋

需求是这样来的,笔者写了很多的邮件通知模板,里面的内容都是千篇一律的,比如说,***你好,请查收附件什么什么报告,然后在署名,结束。这样的模板邮件会一直发下去,用户看久了会很单调。…

基于C#制作的锁屏小工具,点击图片内容解锁

自己制作的一个无厘头电脑锁屏工具被同事发现了,纷纷要求给他们量身定制安排一套 一、开发步骤1.1 创建项目1.2 窗体设置1.3 键盘钩子事件1.4 解锁按钮设置 一、开发步骤 1.1 创建项目 打开Visual Studio,右侧选择创建新项目。 搜索框输入winform&#…

makefile 结构规则,依赖,伪目标

文章目录 前言一、Makefile 规则格式二、依赖示例:依赖的规则 三、伪目标1. makefile 中的伪目标:2. 伪目标的语法3. 伪目标的规则调用4. 绕开 .PHONY关键字定义伪目标 四、小技巧:1. 命令无回显。2. 可执行文件 和 all 同时作为 makefie 中的…

MOS管常见的故障分析

MOS在控制器电路中的工作状态:开通过程(由截止到导通的过渡过程)、导通状态、关断过程(由导通到截止的过渡过程)、截止状态。MOS主要损耗也对应这几个状态,开关损耗(开通过程和关断过程&#xf…

学java注解,看这一篇文章就够了

一、注解的概念 Annotation(注解)是一种标记,使类或接口附加额外信息,帮助编译器和 JVM 完成一些特定功能。 Annotation(注解)也被称为元数据(Metadata)是JDK1.5及以后版本引入的,用于修饰包、类、接口、字段、方法参数、局部变量等。 常见…

Powered by 平行云 | 我们与大有艺术一起,在玩儿一种很新的戏剧

可以用VR看的,才是真元宇宙! 平行云赋能大有艺术,开启孟京辉导演的元宇宙「沉浸式」戏剧《浮士德》。"全球第一场可以用VR看的元宇宙戏剧"是什么的体验? 让我们一起一探究竟! 你慢慢地走进了一片无边无际的…

巧用千寻位置GNSS软件| 铁路放样必备技巧

铁路放样是在铁路测量施工前的一项重要工作,千寻位置GNSS软件可轻松实现铁路放样,本期就和大家分享具体操作步骤。 点击【测量】->【铁路放样】,在线路库中选择一条线路点击【确定】直接进入线路中 心线放样,如图 5.16-1所示。…

实现方法、构造器位置的自动装配

1.Autowired注解概述 Autowired注解的源码 package org.springframework.beans.factory.annotation;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPoli…

Uint8Array文件下载

vue项目,自己调用了阿里云OSS的SDK,进行文件的上传以及下载,有个功能是列表中的附件需要支持点击下载,这里就用到阿里云oss的文件下载,使用了Nodejs的SDK const OSS require(ali-oss); const client new OSS({...op…

nodejs+vue网上学生社团管理系统

并运用Photoshop CS6技术美化网页,辅之以CSS技术。系统是基于面向对象编程的web应用程序。本系统主要实现的功能有系统用户管理、社团信息管理、社团类别管理、社团活动管理、社团论坛管理、系统管理、个人资料管理、学生入团管理、社团公告管理、社团活动管理、社团…

Ubuntu22.04安装opencv依赖包libjasper-dev出现unable to locate libjasper-dev的终极解决办法

执行 sudo apt install libjasper-dev 提示 执行 sudo apt install libjasper1 libjasper-dev 仍然提示 更换软件源: sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" sudo apt-get update提示 该仓库没有数…

tiechui_lesson05_内核小文件拷贝

主要学习在内核中的文件操作,包括文件的打开,创建,读取,写入,查询文件属性等。 涉及的API和宏函数 ZwOpenFileZwCreateFileZwQueryInformationFileZwReadFileZwWriteFileZwCloseInitializeObjectAttributes 1.文件的…

学习日记,java学习

题目 生病了,可能是羊了,喉咙好干,好难受 每日一题 1010. 总持续时间可被 60 整除的歌曲 难度中等268收藏分享切换为英文接收动态反馈 在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持续时间(以秒为单位)可被 60 整除的…