【IMU】 温度零偏标定

温度标定

IMU的零偏随着温度的变化而变化,在全温范围内形状各异,有些可能是单调的,有些可能出现拐点。

多项式误差温度标定

目的是对估计的参数进行温度补偿,获取不同温度时的参数值(零偏、尺度、正交),绘制成曲线。

  • soak method:控制恒温室的温度,然后读取传感器数据进行标定。
  • ramp method:记录一段时间内线性升温、降温时传感器的数据进行标定

温度误差模型,B是bias,T是温度, ∆T 是变温率(温度变化快慢)

B=f(T,∆T)

f靠尝试,通常多项式即可

 

通过改变温度,得到对应温度下的标定参数,用上面的多项式模型进行拟合即可。或者这些数据绘制曲线,用最小二乘多项式去拟合。如果曲线不规则,也可以分段拟合。

拟合是解方程的过程。构建方程时,各未知量的系数要提供足够的变化,这个方程才可解,才能解的好,或者说,才能正确辨识。

如果模型里有变温率的因素存在,而拟合时只提供一组升温的数据,那效果不会太好,因为提供的数据里,每一个温度点只对应一个变温率。

因此,要反复升温降温,而且使用不同的升降温速率,提供丰富变化的数据,才是一个好的样本数据。

图 1为bias在0~60摄氏度温度区间的变化情况。红色线为rawdata,蓝色线为多项式拟合值。

图 1

图2为温漂补偿后的输出:

参考matlab代码如下:

clear;								% 删除工作区中项目,释放系统内存
clc;								% 清空命令行窗口
close all;							% 关闭句柄可见的所有图窗
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y = tFun(a,X)y = a(1)*X(:,1).^2+a(2)*X(:,1)+a(3)*X(:,2).^2+a(4)*X(:,2)+a(5)*X(:,2).*X(:,1)+a(6);;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Read in our toolboxes
addpath('tool');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%mat_path = './IMUDATA/03#/20240408am1101_static_3#_0.csv';fprintf('opening the mat file.\n')
data_imu = csvread(mat_path);imu_wy = data_imu(:,5);
imu_T = data_imu(:,7);
time = data_imu(:,8);
deta_T = data_imu(:,9);x = imu_T(1:1:end);
y = deta_T(1:1:end);
z = imu_wy(1:1:end);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
aveX = ImuDataSum(x, 500)';
N = length(aveX);
aveX = aveX(1:1:N-1);
aveY = ImuDataSum(y, 500)';
aveY = aveY(1:1:N-1);
aveZ = ImuDataSum(z, 500)';
aveZ = aveZ(1:1:N-1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
input = [aveX,aveY] ;
output = aveZ;a0=rand(1,6);
func=@(a,X)a(1)*X(:,1).^2+a(2)*X(:,1)+a(3)*X(:,2).^2+a(4)*X(:,2)+a(5)*X(:,2).*X(:,1)+a(6);;
a=lsqcurvefit(func,a0,input,output);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
testVal = tFun(a,input);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[aveXX,aveYY]=meshgrid(aveX, aveY);%三维绘图
testValZZ = a(1)*aveXX.^2+a(2)*aveXX+a(3)*aveYY.^2+a(4)*aveYY+a(5)*aveYY.*aveXX+a(6);
##figure;
mesh(aveXX, aveYY, testValZZ);
hold on;%散点图
plot3(aveX,aveY,aveZ,"b-",'LineWidth',1);
hold on;
plot3(aveX,aveY,testVal,"r*",'LineWidth',1);
hold on;M = length(testVal);
##% 计算均方根误差
RMSE = sqrt(sum((aveZ - testVal).^2) / M);
fprintf('RMSE:  %d\n', RMSE);

tool

%Purpose:average
%Author name:Yanjh
%date:2024.02.06function aveData = ImuDataSum(data, fs)leng = length(data);%%aveData=zeros(floor(leng/200));for i=1:floor(leng/fs)aveData(i) = sum(data(fs*(i-1)+1:fs*i))/fs;% 每200行取一次平均
endendl = floor(leng/fs) + 1;aveData = [aveData, mean(data(endl:end))];
end

多项误差温度标定

考虑到将加速度计、陀螺的零偏和标度因数统一进行温度建模,那么可以认为加速度、角速度测量误差为陀螺输出电压 V、器件温度 Ti、器件温度变化率 Ti、环境温度 To 和环境温度变化率 ∆To 的函数,即 ω=g(Vg,Ti,∆Ti,To,∆To);加速度测量误差为加速度计输出电压和温度的函数 a=g(Va,Ti,∆Ti,To,∆To),假设二者都是四输入一输出的高阶多项式,这样就可以转化为多因素回归问题标定. 如果多项式中温度和加速度计、陀螺输出电压和温度最高都取二阶,则多因素回归模型中有21 个因素,加速度计和陀螺相应的模型为:

每个惯性元件温度误差模型中需要标定的参数恰巧为 21 项,总共需要做 21 次完整的标定编排。因此,温度误差模型中温度 T 和输出电压 V 都取二阶。 至于 21 次试验数据是否足够能辨识出 21 项参数,这需要通过试验的结果来验证. 如果标定结果发散,那只能再降低 T 和 V 的阶次。

在处理陀螺、加速度计测量数据时,大多按经验直接选择模型变量进行建模,从统计意义而言这样的模型并不一定是最优的. 一般来说,系统所要求的精度不同,需要的误差模型也不同,随着要求精度的提高,需要考虑的误差模型项数也得增多. 因此,需要对模型方程进行优化,从而使 MIMU 的测量模型更趋合理. 从统计学角度出发,对实验数据的处理,应采用 一种有效的方法从众多的影响因素中,挑选对响应 变量贡献大的因素,从而建立最优模型. 由于复相关系数反映了响应变量与回归变量之间的密切程度,因此可以把 R2值最大作为寻优条件来选择自变量,以此选择最优变量,从而建立最优回归方程。

在对加速度计、陀螺温度误差模型进行优化时,考虑到程序设计的简便性和计算量等因素采用逐步回归分析方法,得IMU的加速度计和陀螺分段优化模型(以X轴为例)。

该方法利用R2值来裁剪参数,是一个可以借鉴的方法,具体还未测试过。

参考文献:

MEMS 惯性测量组件的温度误差补偿模型研究

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Study--Oracle-06-Oracler网络管理

一、ORACLE的监听管理 1、ORACLE网络监听配置文件 cd /u01/app/oracle/product/12.2.0/db_1/network/admin 2、在Oracle数据库中,监听器(Listener)是一个独立的进程,它监听数据库服务器上的特定端口上的网络连接请求&#xff0c…

HTML5表单的自动验证、取消验证、自定义错误信息

1、自动验证 通过在元素中使用属性的方法,该属性可以实现在表单提交时执行自动验证的功能。下面是关于对元素内输入内容进行限制的属性的指定。 属性说明required输入内容是否不为空pattern输入的内容是否符合指定格式min、max输入的数值是否在min~max范围step判断…

【机器学习】基于密度的聚类算法:DBSCAN详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 基于密度的聚类算法:DBSCAN详解引言DBSCAN的基本概念点的分类聚类过…

计算机图形学入门24:材质与外观

1.前言 想要得到一个漂亮准确的场景渲染效果,不只需要物理正确的全局照明算法,也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思,不同的材质在光照下就会表现出不同的外观,所以外观…

idea推送到gitee 401错误

在idea上推送时遇到这样的问题,解决方法如下: 在https://的后面加上 用户名:密码 然后再提交就ok啦!

在vue3中,手写父子关联,勾选子级父级关联,取消只取消当前子级,父节点不动

树形控件选择子级勾选父级,以及所有子级, 取消勾选仅取消子级 在项目中,可能会遇到这种场景,比如权限配置的时候,页面权限和菜单权限以tree的形式来配置,而且不用半选,菜单在页面的下面&#xf…

在AvaotaA1全志T527开发板上使用AvaotaOS 部署 Docker 服务

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 准备…

小白轻松上手,Python编程常用的30个经典操作以及代码演示

当谈到经典的Python编程案例时,通常涉及各种基础和进阶的编程任务. 30个常见的案例,涵盖了从基本操作到稍复杂的应用: 基础操作 1.Hello World: 打印"Hello, World!"到控制台。 print("Hello, World!")2.变量和数据…

【LLM】三、open-webui+ollama搭建自己的聊天机器人

系列文章目录 往期文章回顾: 【LLM】二、python调用本地的ollama部署的大模型 【LLM】一、利用ollama本地部署大模型 目录 前言 一、open-webui是什么 二、安装 1.docker安装 2.源码安装 三、使用 四、问题汇总 总结 前言 前面的文章,我们已经…

一些关于C++的基础知识

引言&#xff1a;C兼容C的大部分内容&#xff0c;但其中仍有许多小细节的东西需要大家注意 一.C的第一个程序 #include <iostream> using namespace std;int main() {cout << "hello world!" << endl;return 0; } 第一次看这个是否感觉一头雾水…

【运维】磁盘满了怎么办?如何快速找到占用空间的文件和腾出空间

机器用久了&#xff0c;很容易生成很多临时或者无用的文件&#xff0c;占用大量空间造成磁盘不够用。尤其是服务器&#xff0c;当磁盘不够用时&#xff0c;系统会出现莫名其妙的问题&#xff0c;数据库可能会造成数据损坏。此时快速定位可以删除的大文件并及时释放空间&#xf…

Python深度学习

原文链接&#xff1a;Python深度学习https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608512&idx1&sn16e2a0bb6b0a1f6b513be173730090c0&chksmfa826927cdf5e031b702deb04eef5cb0055f65b0d6e4c33588949ee81c7380ee044caeafd8c7&token2068755524&am…

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 问题概述 📒📒 解决方案 📒🔖 方法一🔖 方法二🔖 方法三⚓️ 相关链接 🚓️📖 介绍 📖 在群晖(Synology)NAS设备上使用Docker时,我们可能会遇到查询Docker注册表失败,无法拉取Docker镜像的问题。这种情况…

nvm安装报错(镜像问题)

一、问题报错 安装的时候如果跟着网上早些时候的配置&#xff0c;调整了setting文件&#xff0c;配置镜像的话&#xff0c;可能报这个错误。 这个是因为他没检索到后面的链接地址&#xff0c;因为镜像的地址新的已经更换了。使用这个吧&#xff1a; node_mirror: https://npm…

【1】A-Frame整体介绍

1.A-Frame是什么&#xff1f; A-Frame 是一个用于构建虚拟现实 (VR) 体验的 Web 框架。 A-Frame 基于 HTML 之上&#xff0c;因此上手简单。但 A-Frame 不仅仅是 3D 场景图或标记语言&#xff1b;它还是一种标记语言。其核心是一个强大的实体组件框架&#xff0c;为 Three.js …

倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分

CommunityOverCode 是 Apache 软件基金会&#xff08;ASF&#xff09;的官方全球系列大会&#xff0c;其前身为 ApacheCon。自 1998 年以来&#xff0c;在 ASF 成立之前&#xff0c;ApacheCon 已经吸引了各个层次的参与者&#xff0c;在 300 多个 Apache 项目及其不同的社区中探…

【操作与配置】VSCode配置Python及Jupyter

Python环境配置 可以参见&#xff1a;【操作与配置】Python&#xff1a;CondaPycharm_pycharmconda-CSDN博客 官网下载Python&#xff1a;http://www.python.org/download/官网下载Conda&#xff1a;Miniconda — Anaconda documentation VSCode插件安装 插件安装后需重启V…

刷代码随想录有感(130):动态规划——编辑距离

题干&#xff1a; 代码&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>>dp(word1.size() 1, vector<int>(word2.size() 1));for(int i 0; i < word1.size(); i)dp[i][0] i;for(int j 0; j …

Doris数仓的最佳拍档ETLCloud数据集成平台

在大数据时代&#xff0c;企业在日常运营和决策中依赖于大量的数据分析与处理工具。而Apache Doris&#xff0c;以其高性能的分析能力和易用性&#xff0c;成为众多企业的数据分析利器。然而&#xff0c;要充分发挥Doris的潜力&#xff0c;企业还需要一个强大的数据集成平台&am…

matlab 花瓣线绘制

matlab 花瓣线绘制 clc,clear,close all; % 创建一个范围内的 x 和 y 值 x linspace(-1.5, 1.5, 100); y linspace(-1.5, 1.5, 100);% 创建一个网格来表示 x 和 y 值的组合 [X, Y] meshgrid(x, y);% 计算方程的左边和右边的值 LHS1 X.^2 Y.^2; RHS1 X.^4 Y.^4;LHS2 X.…