之前一直在忙项目,今天趁着程序员日,浅浅谈一下自己这段时间对IMU标定的一些见解吧。

目录

九轴传感器标定

1.1 IMU误差

1.2 IMU简单校准

1.2.1 加速度计校准零偏与尺度误差

1.2.2 校准陀螺仪零偏

1.2.3 椭球拟合流程

1.2.4 椭球拟合加速度计校准步骤

1.2.5 椭球拟合磁力计校准步骤


九轴传感器标定

1.1 IMU误差

随机误差我们一般通过均值、方差、Allan方差来评价,但是由于随机误差不是这篇文章的侧重点,所以关于随机误差大家,可以打开matlab运行下面这段代码,浅浅看一下高斯白噪声和随机游走噪声具体长什么样子。

rng(0); % 随机数种子
n1 = randn(10000,1); % 高斯白噪声1
n2 = randn(10000,1); % 高斯白噪声2
n3 = randn(10000,1); % 高斯白噪声3
w1 = cumsum(n1); % 随机游走1
w2 = cumsum(n2); % 随机游走2
w3 = cumsum(n3); % 随机游走3
figure(1);plot([n1 n2 n3], '.');
title('高斯白噪声');
legend('$n_1$','$n_2$','$n_3$', 'interpreter', 'latex');
figure(2);plot([w1 w2 w3]);
title('随机游走');
legend('$w_1$', '$w_2$', '$w_3$', 'interpreter', 'latex');

运行结果也可以给大家贴出来做一下参考。

然后就是重点,我们来分析一下IMU的确定性误差,这里因为我目前接触到的大多数IMU基本很少出现XYZ轴不正交和加速度计与陀螺仪坐标轴不重合的问题,所以这两个问题我们就不谈了。

关于温飘,一般我们会用温度及温度变化率多项式拟合温度产生的误差,这个式子就是:

上面这几个都不是我们这次讨论的重点,现在我们来好好讨论一下怎么解决零偏和尺度误差。

1.2 IMU简单校准

1.2.1 加速度计校准零偏与尺度误差

最简单的校准步骤如下:

  1. 将六个面朝上,分别获取每个面的最值为:
  2. 计算各个面的零偏与尺度误差,以x轴为例:
  3. 则校准后的值为:

1.2.2 校准陀螺仪零偏

最简单的校准步骤如下:

  1. 静止一段时间,采集N组数据,求其平均值,为初始零偏:
  2. 将采集的数据减去初始零偏为校准后的值:

上述校准过程我们可以发现,陀螺仪我们是可以做到这样校准的,但是加速度计的校准我们在实际生活中无法保证每次只有固定一个面朝上而其他面不受影响,所以针对加速度计和磁力计,我们一般采用椭球拟合去校准。

1.2.3 椭球拟合流程

  1. 椭球方程:
  2. 展开可得:
  3. 定义误差:
  4. 目标函数:
  5. 根据线性最小二乘理论,最优解:,其中

1.2.4 椭球拟合加速度计校准步骤

  1. 获取N次静止时加速度计数据,第i次为:
  2. 根据计算,其中为v,
  3. 获取M与p
  4. 计算最优解,即a,b,c,d,e,f
  5. 计算,算得
  6. 则校准结果为:

下面大家可以打开matlab,根据这段代码有更深入的理解:

%% 数据读取
dat = [ 9.9604 -0.0975 0.0549;
-9.6576 0.0974 -0.0145;
0.0889 9.7972 -0.0812;
0.0340 -9.8285 0.0264;
0.0909 -0.0595 9.9975;
0.1680 0.0215 -9.7350];
x = dat(:,1);
y = dat(:,2);
z = dat(:,3);
%% 最小二乘法参数估计
N = length(dat);
M = zeros(N, 6);
p = zeros(N, 1);
for k = 1:N
M(k,:) = [y(k)^2 z(k)^2 x(k) y(k) z(k) 1]; % 矩阵M
p(k) = -x(k)^2; % 向量p
end
v = inv(M'*M) * M' * p; % 计算最优解
x0 = -v(3) / 2; % 拟合出的x0
y0 = -v(4) / (2*v(1)); % 拟合出的y0
z0 = -v(5) / (2*v(2)); % 拟合出的z0
A = sqrt(x0*x0 + v(1)*y0*y0 + v(2)*z0*z0 - v(6)); % 拟合出的x方向上的轴半径A
B = A/sqrt(v(1)); % 拟合出的y方向上的轴半径B
C = A/sqrt(v(2)); % 拟合出的z方向上的轴半径C
dat_cali = zeros(size(dat));
scale = 9.8 ./ [A, B, C]; % 尺度因子
offset = [x0, y0, z0]; % 偏移
for k = 1:N
dat_cali(k,:) = scale .* (dat(k,:) - offset); % 校准结果
end

1.2.5 椭球拟合磁力计校准步骤

与加速度计椭球拟合步骤大致一样

  1. 转动磁力计,获取N次数据,第i次为:
  2. 根据计算,其中为v,
  3. 获取M与p
  4. 计算最优解,即a,b,c,d,e,f
  5. 计算,算得
  6. 则校准结果为:

这里给大家提供一个matlab的函数,可以直接调用进行椭球拟合:

function [scale, offset, cali_data] = func_lms_calibrate(data)x = data(:,1);y = data(:,2);z = data(:,3);%% 最小二乘法参数估计N = length(data);M = zeros(N, 6);p = zeros(N, 1);for k = 1:NM(k,:) = [y(k)^2 z(k)^2 x(k) y(k) z(k) 1];          % 矩阵Mp(k) = -x(k)^2;                                     % 向量pendv = inv(M'*M) * M' * p;                                 % 计算最优解x0 = -v(3) / 2;                                         % 拟合出的x0y0 = -v(4) / (2*v(1));                                  % 拟合出的y0z0 = -v(5) / (2*v(2));                                  % 拟合出的z0A = sqrt(x0*x0 + v(1)*y0*y0 + v(2)*z0*z0 - v(6));       % 拟合出的x方向上的轴半径AB = A/sqrt(v(1));                                       % 拟合出的y方向上的轴半径BC = A/sqrt(v(2));                                       % 拟合出的z方向上的轴半径Ccali_data = zeros(size(data));scale = [A, B, C];                               % 尺度因子offset = [x0, y0, z0];                                  % 偏移for k = 1:Ncali_data(k,:) = 1 ./ scale .* (data(k,:) - offset);         % 校准结果endend

下面展示一下用这个方法拟合出来的磁力计数据效果:

IMU标定——椭球拟合相关推荐

  1. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器快速标定补偿方法

    第4期(总第173期) 2012年8月 机械工程与自动化 MECHANICAL ENGINEERING & AUTOMATION No.4Aug. 文章编号:1672-6413(2012)04 ...

  2. IMU加速度、磁力计校正--椭球拟合

    本文为博主"声时刻"原创文章,未经博主允许不得转载. 联系方式:shenshikexmu@163.com 问题 考虑到IMU中,x,y,z轴的度量单位并不相同,假设各轴之间相互直. ...

  3. 基于最小二乘法的磁力计椭球拟合方法

    基于最小二乘法的磁力计椭球拟合方法 在写飞控代码时,必然要对磁力计的测量数据进行校正,本文将介绍一种简单实用的校正方法–基于最小二乘法的椭球拟合方法. 本文椭球拟合部分来自博文IMU加速度.磁力计校正 ...

  4. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器误差补偿方法.pdf

    第 2 5卷 第7期 2 0 1 2年 7月 传 感 技 术 学 报 C HI NE S E J OU R NAL O F S E NS OR S AND A C T UA T OR S V0 1 2 ...

  5. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

    目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...

  6. n维椭球体积公式_加速度计 椭球校准 (最小二乘法 椭球拟合)

    在搞自动控制中,很少有人能不和陀螺仪,加速度计这些打交道,当然还有些人还不免和地磁计打交道, 这类三轴传感器都有一个特性,三个轴的零飘不一样,三个轴的比例尺不一样,随机游走我们暂且不考虑, 那么这时候 ...

  7. 倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准

    倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源,并介绍了消除硬磁干扰的3参数校准.倾斜补偿的电子罗盘(2):磁传感器的误差来源.硬磁干扰的 ...

  8. 椭球拟合的电子罗盘磁差补偿_椭球拟合的电子罗盘磁差补偿

    椭球拟合的电子罗盘磁差补偿 孙倩 ; 付虹 [摘 要] 对电子罗盘磁差补偿的椭球拟合校准法进行深入研究 , 并分解为硬磁.软 磁.比例系数校准和未对准误差校准 , 分别进行仿真分析 , 直观给出各部分 ...

  9. 椭球拟合的电子罗盘磁差补偿_基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp自然科学论文 基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf ...

  10. 椭球曲面拟合算法实现,matlab/C++

    椭球曲面的标准表达式:(x-x0)^2/A^2+(Y-Y0)^2/B^2+(Z-Z0)^2/C^2=R^2, 一般形式可以写为:x^2+ay^2+bz^2+cxy+dxz+eyz+f=0, 模型参数估 ...

最新文章

  1. MultiObjective using Evolutionary Algorithms (2) -- Multi-Objective Optimization
  2. 小白学数据分析-----Excel制作INFOGRAPHIC
  3. Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法
  4. c#和c++中枚举类型的区别(简)
  5. 工业交换机故障分析的原则
  6. 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
  7. SharePoint 开发系列之三:开发工具和流程
  8. a标签 href和onclick 传递的this区别
  9. oracle静态,oracle静态sql和动态sql
  10. pyton 编写脚本检测两台主机之间的通信状态,异常邮件通知
  11. python 异常处理小结 try except raise assert
  12. java从入门到放弃教程(一) 想转行的看过来
  13. 计算机桌面出现家庭组,win7系统桌面突然多出一个家庭组图标的解决方法
  14. 计算机二级word 文档排版,word排版操作指导(计算机二级2010版)
  15. linux c/c++使用sqlite3读取数据
  16. Spring Boot 实现定时任务
  17. android百度识别,百度OCR文字识别-Android安全校验
  18. 手把手教你TSYS建站
  19. 复杂网络分析 08网络节点重要性
  20. 装了 Linux 之后就感到迷茫、不知该干什么的朋友看过来

热门文章

  1. win10自带邮箱无法登录QQ邮箱
  2. 【水题】CodeForce 1183A
  3. 详解WIFI能用但是电脑不能上网怎么解决
  4. Spark算子:RDD行动Action操作–aggregate、fold、lookup;reduce/fold/aggregate区别
  5. 带通滤波器参数详细推导
  6. 基于JavaWeb的网上订餐网站设计与实现 毕业论文+任务书+外文翻译及原文+答辩PPT+项目源码及数据库文件
  7. 为什么要考华为云认证?有什么用?
  8. tensorflow pb模型获得权重wts
  9. 揭秘华为投资版图:规模小、数量少,刀刀致命
  10. 标题:书号验证 2004年起,国际ISBN中心出版了《13位国际标准书号指南》。 原有10位书号前加978作为商品分类标识;校验规则也改变。 校验位的加权算法与10位ISBN的算法不同,具体算法是