当前位置: 首页> 科技> 数码 > 【IMU】 温度零偏标定

【IMU】 温度零偏标定

时间:2025/8/5 21:58:09来源:https://blog.csdn.net/weixin_68880273/article/details/140305727 浏览次数:0次

温度标定

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 惯性测量组件的温度误差补偿模型研究

关键字:【IMU】 温度零偏标定

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: