八、IMU器件温度漂移补偿

2023-05-16

感谢大神分享:多传感器融合定位理论基础(九):凸优化基础 - 知乎

1. 概述

温补的本质是系统辨识。之前我们在介绍标定的时候,也说过一句类似的话“标定的本质是参数辨识”。这两者之间相似又不同。参数辨识是指已知误差模型,去估计各误差量的实际值是多少,而系统辨识在做参数辨识之前,还要做模型辨识,因为器件偏差随温度变化的模型是未知的,不知道有几个变量,也不知道是几阶模型,这个事情就变得不那么简单。按照搞技术的套路,事情越复杂,业界出现的方法就越多,我们一一来看。

2. 温补方法

1) 多项式拟合方法

最简单也最暴力的方法就是直接对"偏差-温度"曲线进行多项式拟合。做这件事你需要有一台温箱,首先把温箱门打开,然后把IMU放进去,最后把温箱门带上。操作温箱让它升到设定温度,过程中采集IMU数据。由于模型未知,我们需要先假设出多个模型,通过拟合参差来选择最合适的模型。比如你可以先假设这样的模型

拟合时候可能会发现曲线重合度不好,觉得公式阶次有点低,那就改成3阶模型

实际上,阶次越高,拟合的重合度越好,但是阶次太高,明显就会过拟合了,一般控制在3阶问题不大。做完温补,满怀期待地拿去使用时,发现好像精度没有那么高,不得不重新再做一次,看看上次是不是做错了。

于是把温箱门打开,把IMU放进去,把温箱门带上。操作温箱让它升到设定温度,过程中采集IMU数据。这次有点着急,让温度升得快了些。使用上次同样的模型拟合参数,发现这次的重合度却非常不好,反复检查数据,两次都没有出错,问题出在哪了呢?既然两次唯一的不同是温度升的快慢不一样,那是不是说明Bias除了和温度有关,还和温度的变化率相关?于是尝试这样的模型

其中dT就是温度变化率。好像重合度变好了一些,而且两次采集的数据可以用同一个模型拟合了,多采几组数据,尝试不同的升降温速率,发现还有部分不太好,那是不是还有别的模型?尝试下

好像又好了一些,于是不停地把温箱门打开,把IMU放进去,把温箱门带上,不停地尝试新的模型。数天乃至数周之后选定了一个模型,不是因为找到了最精确的,是实在没劲儿了,就这么地吧,差不多得了。

2) 基于分段拟合的方法

之所以反复尝试,但最终仍不会太满意,是因为"偏差-温度"曲线都是奇型怪状的曲线,阶次高了则过拟合,阶次低了则重合度不够。于是会自然想到,把曲线分几段去拟合行不行,整体是不规则的,但是可以把它分割成几段规则的曲线。

这不失为一个可行的办法,分段的方式在各种论文里也随处可见。当然,发论文嘛,如果只是分段则显得逼格不够,总要在理论上搞得高端一些才行。于是,会经常看到有引入各种逻辑的分段,比如,在段与段的交界处,是应该更倾向于用左边这段的模型,还是右边这段的呢?为了解决这个问题,可以整一个模糊分段,交界处一定权重上属于左边模型,也一定权重上属于右边模型。

3) 基于神经网络的拟合

深度学习作为一门显学,已经统治一切,没有任何一个领域可以幸免。它把 模型辨识和参数辨识直接一步完成,免去了要去假设模型的麻烦。虽然深度学习在一些领域的渗透受到诸多争议,但是我认为把它用在这里,并非全是无意义的炼丹。首先,在这次深度学习大火之前,神经网络已经在IMU器件温补上得到使用,因为温补模型的复杂性,导致它确实有这样明确的需求存在。

其次,排斥深度学习渗透的领域,多是物理模型极其明确的领域,比如,当我看到使用深度学习去做惯性导航位姿解算的方法时,会感到很反感,因为惯性导航的误差模型已经透明到不能再透明了。而对于温补这种模型还需要辨识的东西,使用神经网络去"端到端"一下,似乎并无不妥,当然,得使用更多的数据,否则过拟合也会很严重。

4) 基于支持向量机(SVM)的拟合

SVM的主要思路是把数据映射到高维空间去拟合,既然在二维空间中,“偏差-温度”曲线不好拟合,那么就把它映射到高维空间去,那样,数据的线性度就会更强,可辨识度会更高一些。


3. 总结与思考

1) 为什么温度相关的模型都那么复杂?    解释的很好

本质上,器件偏差随温度的变化,是由温度引起器件材料变形导致的,器件不是一个理想的质点,而是一个材料块,所以它的温度不是一个温度点,而是一个温度场。但是,对于我们测量来讲,只能测量一个点的温度,无法预知其他点的实际温度变化。虽然,各个点温度之间有相关关系,而且在互相热传导,我们可以对温度场建模,消除一部分影响,但随着复杂的外界环境变化,想靠一个模型就实现所有温度点的预测是完全不可能的。更恶劣的是,温度预测只是第一步,材料变形与温度变化的关系,器件偏差与材料变形的关系,都是极其复杂的。

面对这种问题,我们是不可能找到那个“正确”的模型的,虽然它就在那里,但就是得不到。这让我想起技术领域的一句名言"All models are wrong, but some are useful",找不到"正确"的,就找近似的,能用就行。

2) 怎么选近似的?

那么多方法,应该怎么选,这是一个必须要回答的问题。

选择,其实就是把方法的优缺点和实际的需求去匹配。多项式拟合的方法显然是最工程的,它需要的运算量最小,物理意义最明确,缺点也很明显,

就是拟合度不会那么高。对于基于神经网络或SVM的方法,理论上可以提高拟合度,但是会对数据量有大的需求,而且实际使用时,要消耗比较多的计算量。

所以,如果IMU器件本身的精度不是特别高,那么使用多项式拟合就足够用了。如果想再高一些,可以搞个分段,或者适当提高阶次。如果就非得跟残差死磕,

那搞个神经网络也不是不可以。这种方法不只存在论文里,实际工程中确实有人在用,只是你要多开关几次温箱门,多费点功夫。

3) 怎样设计样本数据?

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

如果我们建的模型里有变温率的因素存在,而拟合时只提供一组升温的数据,那就是在玩自己了,因为我们提供的数据里,每一个温度点只对应一个变温率。

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

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

八、IMU器件温度漂移补偿 的相关文章

  • 2022-3-9 Ubuntu 16 安装opencv 4.5

    ubuntu 16安装 OpenCV 3 的教程 也是安装OpenCV 3 Ubuntu 18 安装 OpenCV 4 5 的 安装完成后 xff0c 手动创建opencv pc xff1a cd usr local lib sudo mk
  • 2022-4-21 vrep深度相机Kinect 远程c++(qtcreator) opencv 保存

    从模型库里拉出来一个Kinect相机放在合适位置 xff1a 设置好像素 xff0c 不是标准像素值vrep有警告 xff08 可能数据有误 xff09 xff0c 忽略即可 同样的像素值 xff0c 在c 43 43 端 xff1a sp
  • 20220905 buffer overflow detected

    hit 64 hit span class token operator span span class token operator span span class token operator span gitprojects span
  • 泉州IT公司名录

    超牌电子有限公司 18259571509 福建泉州超牌电子有限公司成立于1997年 xff0c 是一家自主研发 生产和销售移动电源 xff0c 应急充电器等一系列锂电池为 地址 福建泉州 主营产品 移动电源 虹科安防 18060109697
  • 2023-2-24 pagmo2安装测试

    content 安装必要依赖安装boost安装TBB 安装pagmo 安装必要依赖 安装boost 依赖boost版本大于1 68 boost官网下载 安装boost 安装包解压缩后 span class token punctuation
  • 2023-4-23 Windows和Ubuntu使用网线直连搭建局域网

    1 Windows下的配置 xff1a 右键右下角的网络图标 xff08 或者右键网络 属性 xff09 更改适配器设置 以太网 右键属性 TCP IPv4 IP地址 xff08 192 168 1 3 xff09 子网掩码 xff08 2
  • traj_out variable ‘std:ofstream’ has initializer but incomplete type

    variable 39 std ofstream has initializer but incomplete type 或者是variable 39 std ifstream has initializer but incomplete
  • perl处理excelwenjian

    usr bin perl use strict use Win32 OLE qw in with use Win32 OLE Const 39 Microsoft Excel 39 Win32 OLE Warn 61 3 die on er
  • C++ox 之 lambda

    http www cnblogs com allenlooplee archive 2012 07 03 2574119 html 今天看了博文 xff0c 之前对于lambda的理解比较粗陋 xff0c 今天再学习一下 不得不说我是一个极
  • __x_a != __x_a什么时候不成立?

    define isnan x extension typeof x x a 61 x builtin expect x a 61 x a 0 在看redis源码的时候发现了一个有趣的东西 xff0c 这个宏对是否是有效的实数进行了判断 这个
  • pthread_mutex_trylock的问题及解决

    在需要使用非阻塞的锁时 xff0c trylock是一个比较好的选择 xff0c 但是使用的时候碰见了一些问题 xff1a 需要使用PTHREAD MUTEX ERRORCHECK NP 来定义一个检错锁 xff0c 但是不管如何都编译不过
  • thrift, Protocol Buffers and MsgPack 的序列化对比

    啥是序列化 xff1f 序列化是将对象状态转换为可保持或传输的格式的过程 与序列化相对的是反序列化 xff0c 它将流转换为对象 这两个过程结合起来 xff0c 可以轻松地存储和传输数据 为啥要序列化 xff1f 1 以某种存储形式使自定义
  • python处理xlsx

    一 读取excel 这里介绍一个不错的包xlrs 可以工作在任何平台 这也就意味着你可以在Linux下读取Excel文件 首先 xff0c 打开workbook xff1b import xlrd wb 61 xlrd open workb
  • php解析请求url并返回json数据

    lt php paserRequest SERVER 34 QUERY STRING 34 function paserRequest strReq parse str strReq 解析请求参数 cpIds 61 explode 39 3
  • 对TTL电平,232电平 CMOS电平做下总结

    xff08 一 xff09 TTL电平标准 输出 L xff1a lt 0 8V xff1b H xff1a gt 2 4V 输入 L xff1a lt 1 2V xff1b H xff1a gt 2 0V TTL器件输出低电平要小于0 8
  • twemproxy for redis使用说明及简单分析

    redis的数据量在内存高过50G时系统出现了明显的瓶颈 为了解决这个问题 xff0c 笔者找了些相关的资料 xff0c 发现了这个开源软件 功能很强大 xff0c 包含了last fm的ketama的一致性hash算法 xff0c 对于笔
  • static的map成员的初始化顺序居然和编译器相关

    我十分不敢相信这是真的 xff0c 但是确实发生了 xff0c 而且足足折腾了我5个小时 core文件的内容大概是这样 xff1a 0 0x0000003071664cba in std Rb tree decrement std Rb t
  • 创建在mac电脑本地搭建nginx,并模拟打包发布前端构建包

    1 本地安装nginx服务brew install nginx 报No such file or directory 64 rb sysopen Users wangjie Library Caches Homebrew downloads
  • 关于swiftUI和UIKit混用

    思路无非就是自定义一个结构体view实现UIViewRepresentable协议 xff0c 然后就可以作为一个swiftUI组件进行调用了 1 我们要定义一个CustomView这个名字随便起 struct CustomView UIV
  • swiftUI自定义Environment的Key

    1 创建一个结构体作为要共享的值 struct RefreshData var thresold CGFloat 61 0 var progress Double 61 0 var refreshState RefreshState 61

随机推荐

  • 谈谈我对iOS app从编译到完全启动的流程的理解

    从的来说编译分几个阶段 预处理 gt 代码解析 gt 汇编 gt 链接 gt 生成可执行文件 一 预处理的中进行的操作是 1 进行宏替换 2 头文件引入 include import 使用对应 h文件的内容替换这一行 xff0c 所以我们导
  • 使用最新的sdk跑旧的flutter项目遇到的坑总结

    第一次跑一个已经存在的稳定项目却不曾想analysis没报错运行起来xcode却报错 执行flutter 发现android command line没安装 xff0c 立即执行brew install android sdk安装成功后在
  • Vue实现组件间通信

    1 property 在子组件props中定义定属性 xff0c 使用时传递父组件data对象或常量值实现传值通信 2 事件传递 在子组件中通过 emit发送event第一个参数是事件名 xff0c 第二个是消息内容 xff0c 在父组件中
  • 对信号量sem的一些总结

    1 首先来说说信号量和互斥锁的区别 xff1a 信号量用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过信号量告诉别的线程 xff0c 别的线程再进行某些动作 xff08 大家都在semtake的时候 xff0c 就阻塞在哪
  • Vue实现双向绑定原理

    在Vue实例构造时将data对象赋值给vue实例之后 xff0c vue会递归遍历data中所有键值对并作为属性赋值到vue实例中 xff0c 利用Object defineProperty 来重新定义属性的set和get函数 xff0c
  • C++ STL总结

    C 43 43 STL分为5部分 容器 xff0c 迭代器 xff0c 空间适配器 xff0c 函数对象 xff0c 泛型算法 xff0c 适配器 一 容器 理解容器的作用 容器的主要作用是用于存储对象 xff08 这里说的对象时指的是包含
  • 第一次测试题笔记(2020.11.9)

    最近写了一些编程题准备做一些笔记方便以后复习 1 字符串判等 题目描述 给定两个大小写字母 空格组成的字符串S1和S2 xff0c 他们的长度都不超过100个字符 xff0c 长度也可以为零 判断压缩掉空格并且忽略掉大小写后 xff0c 这
  • 人工智能--框架表示法

    文章目录 框架理论框架的基本结构框架的表示实例框架 框架系统框架之间的纵向联系框架之间的横向联系 框架理论 框架理论认为 xff0c 我们对世间事物的认识都是以类似框架的结构存储在记忆中的 当遇到一个新事物就从记忆中找出一个合适的框架 xf
  • 并行编译加快VS C++项目的编译速度

    最近编译的项目都比较大 xff0c 话说自己的电脑配置还行 xff0c 但编译所花的时间还是很长 xff0c 遇到需要重新编译整个项目的时候真的有回宿舍睡一觉的冲动 昨天一不小心被我发现了一款软件Xoreax IncrediBuild 今天
  • 云台 学习笔记

    1 云台控制基本任务 xff1a 控制相机坐标系跟踪惯性坐标系 2 yaw计算 xff1a 与惯性坐标系z轴垂直的电机轴旋转不影响偏航角计算 xff0c 将电机轴投影到惯性坐标系的z轴上 xff0c 在roll和pitch稳定的前提下 xf
  • Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等

    一 获取请求头 接口示例1 xff1a 64 PostMapping value 61 34 wxPayNotify 34 public R lt String gt wxPayNotify HttpServletRequest reque
  • [Holo_wo]-计算机专业(物联网工程)应该如何学习?

    大部分的大学生都是普普通通的平常人 xff0c 当然你心里也可能怀远大理想 xff0c 但是面对现实我们还是需要工作 xff0c 既然大学毕业后 xff0c 注定是要在工作的 xff0c 那么从大学刚刚开始就培养起这种意识是不是算是一个梦幻
  • [Holo_wo]-c++库工程总结

    文章目录 一 什么是库1 1 静态库1 2 动态库 二 如何使用库三 如何编写一个库3 1 接口设计a 接口导出问题b 接口设计问题PIMP方法Object Interface 抽象基类法 3 2 如何编译a Linux静态库动态库 b W
  • [Holo_wo]-网络编程之timerfd使用说明

    Talk is cheap Show me the code xff1a span class token macro property span class token directive hash span span class tok
  • stm32cube学习1-rcc配置选择

    在用cube配置时钟时 xff0c 有下面两个选项 BYPASS Clock Source xff08 旁路时钟源 xff09 Crystal Ceramic Resonator xff08 晶体 陶瓷晶振 xff09 下面来解释一下 xf
  • [Holo_wo]-网络编程之eventfd使用说明

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • [Holo_wo]-如何阅读递归代码,对递归代码结构分析

    因为做算法题的时候经常碰到递归的方法 xff0c 而每次理解递归代码的层次结构都很费脑筋 xff0c 所以我尝试着总结分析了一下递归代码的结构 xff0c 如果有误还望大家指明 类型 函数名 xff08 参数 xff09 跳出递归的条件 相
  • 松灵机器人 SCOUT的ROS代码架构---CAN通信

    松灵机器人感觉可能还是比较小众吧 明明官方的github xff0c 但是star之类的完全没有关注度 xff0c 也没有issue 这个SCOUT ROS主要是解决SCOUT底盘与上位机的通信方式 xff0c 截止目前 xff0c 已经开
  • VINS-Mono 代码解析四、闭环检测和优化 (偏理论)

    一 理论部分 1 1 怎么知道发生了闭环 上图中 蓝线 为正常的闭环优化流程 即通过后端的非线性优化来更新滑窗内所有相机的位姿 紫线为闭环检测模块 当后端优化完成后 会将滑窗内的次新帧进行闭环检测 即首先提取新角点并进行描述 然后与数据库进
  • 八、IMU器件温度漂移补偿

    感谢大神分享 xff1a 多传感器融合定位理论基础 xff08 九 xff09 xff1a 凸优化基础 知乎 1 概述 温补的本质是系统辨识 之前我们在介绍标定的时候 xff0c 也说过一句类似的话 标定的本质是参数辨识 这两者之间相似又不