位置: IT常识 - 正文

imu内参标定(内外参标定)

编辑:rootadmin
imu内参标定 imu内参标定前言1.imu噪声模型介绍2./imu/data和/imu/data_raw的区别3. px4飞控imu标定,以及遇到的问题kalibr_allan标定imu内参4.使用mintar修改的imu_utils进行zed2相机imu的标定讨论

推荐整理分享imu内参标定(内外参标定),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:内参标定算法,IMU内参标定算法,内参标定算法,imu_utils标定,内参标定算法,IMU内参标定算法,imu外参标定,内参标定算法,内容如对您有帮助,希望把文章链接给更多的朋友!

提示:本文部分大部分内容都是通过多次实验测试总结得出,有些地方比较玄学,也不是很严谨,希望懂得的小伙伴能在评论区指出。

前言

先把结论放在这里,关于imu噪声参数的标定对于vio(比如vins、orb3)其实并没有多重要,虽然说他们的配置文件中都要求给一个imu的噪声参数,理由会在正文中说明。如果做imu的标定只是为了给vio的配置文件中imu的噪声参数一个数值的话,不必花太多时间追求一个精确的imu噪声参数,耗时且意义不大。

1.imu噪声模型介绍

详细的imu的噪声模型的介绍可以参考kalibr文档的介绍,但是感觉解释的不是很清晰,推荐看下An introduction to inertial navigation加深下理解,我自己也做了一个关于imu噪声模型的总结。 这里仅展示几个要注意的地方:

imu的噪声分为两种,“White Noise”和“Bias”,都有连续时间模型和连续时间模型两种形式,两种模式可以相互转换,这里强调一下有的标定工具输出的是连续型(imu_utils),有的是离散型(kalibr_allan)。另外有的VIO算法需要的是连续性的imu噪声参数,有的是连续型的噪声参数,具体根据代码或单位辨识。为了方便后续的imu-cam外餐标定,有必要说一下Kalibr需要的imu噪声参数的格式。Kalibr需要的噪声参数都是连续时间模型的,单位如下图: 2./imu/data和/imu/data_raw的区别

px4的imu有两个消息,一个是/mavros/imu/data,一个是/mavros/imu/data_raw。在mavros wiki中解释说data是求解了姿态的,而data_raw是原始数据。一般来说大部分的imu传感器都是有data和data_raw两个消息的,但是vio中比较倾向与用谁并不知道,或者说用谁都差不多,这个问题有没有评论区能解答的。 我自己录制了zed2相机的imu和px4的imu在静止状态下的数据,记录在下图:

上图中上部分是px4的imu的陀螺仪测的角速度消息,可以看出其实data相比data_raw噪声要更小,所以px4的/imu/data是进过一个滤波处理的。下方是zed2的imu消息,data和data_raw基本差不多,但是仔细看还是有一些差别的,可以认为data是有一个基本的去噪处理的吧。3. px4飞控imu标定,以及遇到的问题

补充:px4的内置有两个imu,选择imu数据的时候也是采用投票机制,具体可以参考下面的链接。关于能否用带有冗余imu机制的传感器作为vio中imu的数据来源,作者本来持怀疑态度,但是从论文中来看,px4很少出现,vins-mono用的大疆的N3飞控(没有imu冗余设计),但是《Robust Real-time LiDAR-inertial Initialization》这篇文章用的是px4-mini(有冗余的imu设计,和px4一样)作为lio的imu数据源。 px4传感器冗余机制的介绍

一些有一些博客使用仿真的imu数据对kalibr_allan和imu_utils标定的结果进行了比较(链接),结果是kalibr_allan的高斯白噪声和随机游走都比较准,而imu_util(gaowenliang的版本)的随机游走误差的标定比较差,所以推荐使用kalibr_allan。但是这位博主用的是仿真的数据,和实际情况或许有一些偏差,我自己使用kalibr_allan的过程中并没有取得较为理想的效果,并不推荐kalibr_allan(虽然是uzh大神们写的),更推荐mintar修改后的imu_utils。

kalibr_allan标定imu内参

kalib_allan里面有个把bag文件转换为mat文件的ros节点,需要在ubuntu下安装matlab,安装完后还需要让cmake能找到matlab,可以参考这个https://blog.csdn.net/wuzuyu365/article/details/52330830

imu内参标定(内外参标定)

下文我就使用/mavros/imu/data进行imu内参的标定。

第一步是录制imu静止状态的数据。bag转mat roseun bagconvert bagconvert "bag文件位置" “imu的topic” 会在bag文件的目录位置生成一个对应的mat文件,如果topic没对,会生成一个大概177bytes的错误文件。运行matlab脚本生成allan方差的分析图片,需要修改m文件里的mat文件的目录位置和imu频率,图片会生成在data文件夹下。 问题: 我之前录了2h的数据,结果会出现部分参数为Nan的情况(如上图,主要就是陀螺仪的随机游走),但是我录制了4个小时发现还是NAN,接着尝试了10h,也是类似的情况,在录制12小时的数据才勉强得出数据,但是Allan图的形状并不是很标准的感觉,和12小时数据得到的Allan图和上图图其实长的比较像,并没有明显的0.5斜率的直线可以拟合得到陀螺仪的随机游走噪声。4.使用mintar修改的imu_utils进行zed2相机imu的标定

说明: gaowenliang的imu_utils貌似有单位的问题,然而大神已经很久没出现了,在github的issue有关于单位问题的讨论,然后有个叫mintar的大佬把单位问题修改了,把输出的值都改成了连续时间的单位,也开源了,并且使用realsense相机同allan_variance_ros的标定结果做了对比(这个开源算法也是Kalibr推荐的,对比结果在imu_utils的issue里),并且结果很相近,所以算法应该是比较合理正确的。

下文使用mintar版本的imu_utils对zed2相机里的imu做了一个标定。 两个版本的使用方法都一样,不再介绍,本文录制了4小时的静止imu的数据(其实算法里只用了两个小时的数据),然后标定的结果在下面(data和data_raw我都标定了,不知道vio应该用哪个):

zed2_imu_dataacc_nacc_wgyro_ngyro_w/imu/data0.0009723914986221080.00001618161369788250.0001120594344447880.0000000377973509488189/imu/data_raw0.0009724721493928010.00001619757247543750.0001039034780287490.00000000748263828361598

这个图是用imu_utils的matlab代码画的/imu/data的数据,红线是gyro的数据,蓝线是acc的数据,实线应该是拟合的数据(从这个角度看,其实kalibr_allan应该是没有拟合曲线来读取参数,所以读不出来,没研究过源码,这些都是猜的)?圈和×是真实数据画出来的。

讨论

标定时录制的数据集都是在imu静止的状态下录制的,但是我们在做imu-cam标定或者是vio的时候,imu都是处于动态运动的状态,所以直接使用我们标定的参数是会出问题的,大概率会导致系统的奔溃,这个问题在这个github issue中有讨论,mintar给了几点假设:

The allan variance estimation methods (mintar/imu_utils and ori-drs/allan_variance_ros) estimate a model based on Q, N, B, K, R or at least N (“rate/acceleration white noise”), B (“bias instability”), K (“rate/acceleration random walk”). But all VIO packages and Kalibr just use N and K.The calibration is done under close to ideal circumstances in a static setup. In a dynamic setting, with other factors like temperature changes etc., the noise will be higher.The calibration packages take the average of the axes, but some IMUs have different gyros/accelerometers for different axes, so one should probably use the maximum and not the average to be on the safe side.In my setup, there’s no hardware synchronization between IMU and camera. Maybe using a higher standard deviation for the IMU prevents VINS from trusting the IMU too much and deviating when the real error is from a wrong time synchronization.

另外,在Kalibr的imu noise model的介绍的最后也做了一个说明:

It is important to note that the IMU measurement error model used here is derived from a sensor which does not undergo motion, and at constant temperature. Hence scale factor errors and bias variation caused by temperature changes, for example, are not accounted for. So clearly, the model is optimistic. Particularly when using low-cost MEMS IMUs with Kalibr, you may have to increase the noise model parameters to “capture” these errors as well. In other words, if you use directly the “sigmas” obtained from static sensor data, Kalibr will tend to trust your IMU measurements too much, and its solution will not be optimal. From our experience, for lowest-cost sensors, increasing the noise model parameters by a factor of 10 or more may be necessary. If you use Kalibr with such a device, please give us feedback, such that we can develop specific guidelines, device-specific parameter suggestions, or more advanced methods to determine these parameters.

那么从这个讨论的内容来看,我们标定imu的结果其实不能直接用在vio算法中,最多只能做一个参考吧,在这个基础上做一些放大。也就是说其实我们不做imu的标定也无所谓,对于vio而言,当vio效果不理想的时候可以直接放大一下imu的噪声参数进行比较。包括在imu-cam的标定过程中,imu的噪声参数也不能直接用imu静态状态下标定的结果。 在github issue中有人这样解释,我觉得也很合理:

One additional factor—related to what was mentioned about calibrating in static vs running in dynamic conditions—might be that the IMU model used in all these VO / SLAM algorithms is practical, but still simplistic. I.e. it simply doesn’t model many of the effects on the physical device. I’m thinking of temperature-dependent bias, cross-axis sensitivity, etc. All this means that the errors in your model aren’t actually independent and bias-free and one way to deal with it is by increasing the measurement uncertainty to “mask” out the un-modelled behaviour. But yes, it’s a valid question what’s the point of calibrating the IMU when you just hand-tune the values anyway. I think hand-tuning will always be needed. Calibration can still inform you about the relative quality of different IMUs and thus help when tuning the parameters (e.g. tell you if your values for a new IMU should be higher or lower than for some reference IMU that you know works well).

下一篇文章:使用Kalibr进行imu-cam的联合标定。

本文链接地址:https://www.jiuchutong.com/zhishi/296209.html 转载请保留说明!

上一篇:GPT3.5 , InstructGPT和ChatGPT的关系

下一篇:Vuex 之一:3种拿到 state 中数据的方式与实例剖析(vuex详解和用法)

  • 芒果tv会员怎么共享给朋友(芒果tv会员怎么给别人用)

    芒果tv会员怎么共享给朋友(芒果tv会员怎么给别人用)

  • 超星泛雅和超星尔雅有什么区别(超星泛雅app最新版本)

    超星泛雅和超星尔雅有什么区别(超星泛雅app最新版本)

  • 5g卡4g手机用网会快吗(4g卡5g手机用5g网络)

    5g卡4g手机用网会快吗(4g卡5g手机用5g网络)

  • 淘宝代写怎么搜(淘宝怎么找人代写)

    淘宝代写怎么搜(淘宝怎么找人代写)

  • 闲鱼什么叫跑单(闲鱼什么是跑单)

    闲鱼什么叫跑单(闲鱼什么是跑单)

  • 此apple id无效或不受支持什么意思(此Apple ID无效或不受支持是手机号码的原因吗)

    此apple id无效或不受支持什么意思(此Apple ID无效或不受支持是手机号码的原因吗)

  • 手机强制关机怎么关(手机强制关机怎么设置)

    手机强制关机怎么关(手机强制关机怎么设置)

  • 苹果主板坏了有什么症状(苹果主板坏了有必要修吗视频)

    苹果主板坏了有什么症状(苹果主板坏了有必要修吗视频)

  • 6s开不了机充电没反应(iphone6sp充电开不了机)

    6s开不了机充电没反应(iphone6sp充电开不了机)

  • vivo x9plus支持nfc吗(vivox9splus支持nfc)

    vivo x9plus支持nfc吗(vivox9splus支持nfc)

  • 天猫买的东西质量有问题到哪里去投诉(天猫买的东西质量问题不给退货怎么办)

    天猫买的东西质量有问题到哪里去投诉(天猫买的东西质量问题不给退货怎么办)

  • 笔记本键盘锁定键是哪个(笔记本键盘锁定按什么键解锁)

    笔记本键盘锁定键是哪个(笔记本键盘锁定按什么键解锁)

  • su卡顿怎么解决(su卡顿怎么解决显卡)

    su卡顿怎么解决(su卡顿怎么解决显卡)

  • mate20 pro上市时间

    mate20 pro上市时间

  • 华为手机qq消息有时延迟(华为手机QQ消息能定时发送)

    华为手机qq消息有时延迟(华为手机QQ消息能定时发送)

  • 华为哪款手机电池容量最大(华为哪款手机电池大)

    华为哪款手机电池容量最大(华为哪款手机电池大)

  • 正在撤销对计算机所做的更改要等多久(正在撤销对计算机更改要多久)

    正在撤销对计算机所做的更改要等多久(正在撤销对计算机更改要多久)

  • 手机自助冻结微信号咋回事(手机自助冻结微信是什么意思)

    手机自助冻结微信号咋回事(手机自助冻结微信是什么意思)

  • 微信朋友圈折叠怎么弄(微信朋友圈折叠是怎么回事)

    微信朋友圈折叠怎么弄(微信朋友圈折叠是怎么回事)

  • oppo呼吸灯在哪里(oppo呼吸灯怎么设置方法)

    oppo呼吸灯在哪里(oppo呼吸灯怎么设置方法)

  • 剪映识别不了音乐字幕(剪映识别不了音乐链接)

    剪映识别不了音乐字幕(剪映识别不了音乐链接)

  • 淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

    淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

  • tenda信号扩展器怎么重新设置(tenda信号扩展器怎么恢复出厂设置)

    tenda信号扩展器怎么重新设置(tenda信号扩展器怎么恢复出厂设置)

  • word文档怎么样求和(word文档怎么样单独一页横向)

    word文档怎么样求和(word文档怎么样单独一页横向)

  • vivox27手机屏幕是什么材质(vivox27手机屏幕多少钱)

    vivox27手机屏幕是什么材质(vivox27手机屏幕多少钱)

  • hd高清通话的坏处(hd高清通话额外收费吗)

    hd高清通话的坏处(hd高清通话额外收费吗)

  • 荣耀v20游戏助手在哪里(华为荣耀v20游戏助手怎么打开)

    荣耀v20游戏助手在哪里(华为荣耀v20游戏助手怎么打开)

  • 华为p30nfc怎么用(华为p30nfc怎么用门禁卡)

    华为p30nfc怎么用(华为p30nfc怎么用门禁卡)

  • 如何修改目录字体(如何修改目录字号)

    如何修改目录字体(如何修改目录字号)

  • python globals函数是什么?(python 函数 global)

    python globals函数是什么?(python 函数 global)

  • 公款私存个人账户怎么处理
  • 小规模企业能否抵扣
  • 打印机费用是属于管理费用吗
  • 财务报表没有申报表
  • 实收资本实缴需要什么手续
  • 作废冲红的发票怎么做账处理
  • 月末在产品的原材料定额费用计算公式
  • 债务重组双方如何进行会计处理
  • 技术研发费加计扣除
  • 过渡期损益会计分录
  • 无偿捐赠设备该如何做账务处理呢?
  • 咨询服务费没有发票
  • 原材料变成半成品
  • 企业返利如何处理
  • 进项较大航天信息怎么填
  • 暂估出库是什么意思
  • 购买软件能直接用吗
  • 增值税农产品抵扣政策
  • 没有订立合同的著作权属于什么人
  • 零售业税率多少?如何交?
  • 商贸企业可以使用月末一次加权平均
  • 公司怎么给个人开票
  • 银行手续费要发票什么时候开始的
  • 一般纳税人收到普票如何入账
  • 加工产品不一定有合理损耗
  • 银行账户基本户是什么意思
  • 讲师费发票开票科目
  • 混凝土的增值税率是多少
  • 所得税年报流程
  • 空调安装费开票属于什么类
  • 小型微利企业的
  • 本期预收的货款属于
  • 公司在银行购买金币没有发票
  • win7鼠标点右键没反应
  • 如何删除系统自带的软件
  • 税控盘不交服务费的后果
  • Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
  • php更新数据库
  • windows搭建dvwa
  • php图形用户界面
  • html零基础入门教程
  • lspci命令显示
  • 企业一直零申报不经营
  • 第9章 内存模型分析
  • 材料采购成本是什么科目
  • python skewness
  • 辅助核算内容不完整
  • 社会团体指的是什么单位
  • sql2000安装不上是什么原因
  • mysql编程一般步骤
  • 财务费用报销流程最后环节出纳
  • 施工企业的成本核算
  • 办公用品采购如何记账
  • 企业不如实申报个税的风险
  • 运费险三件衣服分3个快递寄出
  • 公司汽车维修
  • 门面转让费怎么开发票
  • 现金流量表和利润表的勾稽关系
  • 银行存款日记账电子表格模板
  • windows2003怎么修改用户密码
  • freebsd11.3安装教程
  • win7系统IE浏览器一点就闪退
  • win8系统进不了桌面怎么办
  • win8系统怎么直接进入桌面
  • xp桌面快捷方式不见了
  • window8系统好用吗
  • ERROR 1045: Access denied for user: root@localhost (Using password: NO)
  • 电脑win10显卡驱动
  • perl -i -pe
  • unity3d webgl
  • 浅析学校德育的个体智能发展功能
  • android ios UI
  • sdk有问题
  • node解决跨域
  • Python回调函数注册类型不匹配
  • 财税专家刘杨简历图片介绍
  • 摩托车的消费税率
  • 法人注册怎么注册
  • 税控防伪清单
  • 年度关联业务往来报告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设