一、 IMU

1. 什么是IMU

IMU:Inertial Measurement Unit,惯性测量单元

一般一个IMU由三个单轴的加速度计和三个单轴的陀螺组成。

1.1 加速度计的工作原理

Fig 1. 加速度工作原理图

加速度计的种类有很多,比如压电式加速度计、压阻式加速度计、电容式加速度计等。但是他们的工作原理都是相同的——测加速度。如Fig1. 所示:

利用传感器读取的力的大小与内置物体的质量,就可以得到瞬时的加速度值,当xyz三个方向分别设置一个加速度计,即可以构成IMU内部的三轴加速度计,对于飞机各个方向的加速度值进行测量。

1.2 飞机的加速度计校准

在ardupilot里,通过分别让飞机三轴加速度计六个面朝上,进行加速度计校准工作。

1.2.1 飞机的加速度计校准原理

飞机加速度需要校准主要有两个原因:

1)零位偏移

2)IMU的位置与预先设置相比发生了变化

1.2.2 零位偏移的校准

Fig. 2 水平正放IMU时飞机的加速度测量

如Fig.2所示,当IMU水平正放在地面时,加速度计测量的数值为,当其中一个轴的加速度计发生零位偏移时,加速度计测量的数值可能是。当然,如果三个轴的加速度计都发生偏移,测量的数值也可能是。但零点偏移有一个特点,以其中一轴的加速度计为例,其零点偏移只有一个方向,也就是说,测得的数值一直保持偏大或偏小固定值,而不是一会偏大一会偏小。所以,零点偏移的解决方法便变得十分简单。

Fig.3 IMU同时发生位置变化和零点偏移状况图

如Fig.3所示,此时IMU同时发生了位置变化和零点偏移。但这时候我们不考虑位置变化,两个IMU的朝向相差180°。无论是XYZ三轴哪一个加速度计,对于左右两个IMU状态,假如没有发生零点偏移,其加速度数值相加应该是0。相当于,测量完一轴的加速度后,将IMU翻转,再测量这个轴的加速度,肯定和第一次测量互为相反数,无论这个IMU是否发生了相对于初始的位置变化。但是,由于IMU存在零点偏移,在第一次测量和第二次测量时,某一轴的加速度数值,都会偏大或偏小一定的数值,所以通过分别让飞机三轴加速度计六个面朝上的动作,记录下三对XYZ三轴加速度计的最大最小值,相加除以二,即得到偏移值:

于是修正零点偏移后的加速度值:

1.2.3 IMU位置变化校准

Fig.4 飞控和IMU相对姿态图

如Fig.4 所示,此时IMU的位置和预先设置的位置相比发生了变化。重力加速度会分别与三轴的方向存在三个夹角。在分别让飞机三轴加速度计六个面朝上的动作中,期望的测量加速度值为:

选取三个不同轴的加速度值如:

因为测得这三组加速度值时,IMU的状态分别为:期望Z轴与g方向相同;期望Y轴与g方向相同;期望X轴与g方向相同。

Fig.5 测得3组加速度值时IMU的实际状态图

因为IMU的期望三个状态,都可以互相通过一次基本旋转矩阵变化转化,而IMU的位置变化相对于飞控来说是固定的,所以IMU的三个实际状态,也可以互相通过一次基本旋转矩阵变化得到。所以实际上IMU姿态发生变化造成的未知量只有之前提到的三个夹角。于是IMU位置变化校准如下:

等式右侧的含义为IMU校准矩阵乘三次校准零偏后的实际数值矩阵。求解出校准矩阵,即可完成IMU位置变化校准。与1.2.2零位偏移的校准共同组成了无人机IMU中三轴加速度计的校准过程。

1.3 ardupilot中的加速度计校准

下面是来自于ardupilot官网中的一段话

How do you inhibit gyro calibration?

Set the parameter INS_GYR_CAL =0. That will skip the gyro calibration done on each startup. The last gyro calibration from when you calibrated the accelerometers will be used instead. This also means you don’t need to hold the plane still when booting.

The downside of skipping gyro calibration is that your gyros may have drifted since you last calibrated them, perhaps due to temperature changes. If you have ARMING_REQUIRE enabled then the arming checks will catch that problem if it is very large, but in general we recommend not skipping gyro calibration unless you have a good reason to use it. This is especially the case if you have the EKF enabled, as it is particularly sensitive to gyro error.

首先,先了解一下ardupilot设置的IMU元件自检流程

1)加速度计自检:

分别让飞机三轴加速度计六个面朝上,进行加速度计校准工作。

2)陀螺仪自检

开机以后,保持水平放置飞机,不可以晃动移动飞机,进行陀螺仪校准工作。

也就是说,在ardupilot里面,加速度计的自检和陀螺仪的自检是相关的。

在ardupilot中,加速度的自检不是每次必需的。也就是说,在一段时间内,只要进行过加速度计的校准,在进行飞行任务前,mission planner不会提示进行加速度计的校准。

但是陀螺仪的自检是执行每次飞行任务前都必须进行的。假如在飞机上电以后不进行陀螺仪的校准,那么mission planner便会提示:BAD GYRO HEALTH。意思是加速度的测量不准确。这是因为,陀螺仪在每次使用前会出现漂移现象,其中最大的误差就是零偏。由于陀螺仪测量的是飞机的角速度值,再由测得的角速度值积分得到速度值。所以,在随着时间积分的过程中,即使是一点点误差,对于姿态角度的结算带来的影响也是巨大的。对此。ardupilot默认规定,在执行飞机任务之前,必须进行陀螺仪的校准。

ardupilot中,陀螺仪的自检是自动的,在上电搜索到数传信号以后,将飞机水平放置,不要晃动飞机,飞机陀螺仪会自动进行自检。因为此时飞机保持静止,没有角速度产生。正常来说,三轴角速度计测量的角速度值都应该为0。所以,只需要在一段时间内持续采集角速度值,求出平均值,则可以得到陀螺仪的零位偏移量,在测得角速度积分得到角度之前,把求出的零位偏移量消除,即可完成校准陀螺仪的过程。

由上面那段ardupilot的说明可知,在ardupilot中,给出了跳过强制执行陀螺仪自检流程的设置。笔者猜想,这应该是因为,假如执行比较紧急的任务,拿出飞机后耽误一段时间来强制进行陀螺仪的校准动作,是非常不人性化的。但又因为陀螺仪值的真实性对于飞机的姿态解算来说非常重要,如果跳过校准可能会带来非常不准确的姿态测量。所以,一个良好的解决办法,或者是通过滤波实现,或者是硬件的研发突破,都是目前十分需要的。

1.3 陀螺仪的工作原理

陀螺仪最主要的作用是测量角速度,当飞机发生倾转时,会有角速度改变,同时也给陀螺仪带来一个角速度值。通过测量陀螺仪的角速度值,能够反映飞机的角速度值,进而积分得到飞机的角度值。

Fig.6 陀螺仪工作原理图

当陀螺产生角速度时,旋转的物体在发生相对运动时,会产生一个科里奥利力

在这个式子中,可以由类似加速度计的装置测出,但相对速度也需要得到,才能得到陀螺仪转动产生的角速度。

因为旋转的物体在发生相对运动是,会产生科里奥利力,所以,即使发生相对运动,但这个物体不旋转,也不会产生科里奥利力。于是,在物块垂直于科氏力的方向,令物块往复运动,人为施加一个相对速度如Fig.7。

这样,物块产生的相对运动速度是人为给出的,便已知。于是便可以求得陀螺仪旋转的角速度

------未完待续

固定翼飞机的一些记录——(1)IMU相关推荐

  1. 【学习记录】IMU内参标定:Allan方差与代码

    本文仅用于记录自己学习IMU内参标定过程中的一些总结. 参考 关于IMU参数: 死磕陀螺仪之(一)陀螺仪参数意义以及工程转换 关于Allan方差: 多传感器融合定位理论基础(三):惯性器件误差分析 I ...

  2. PIBOT移植ROS2记录(6)-imu的移植

    1. imu的移植 同之前的类似我们, 新增sensor_msg的头文件 #include <sensor_msgs/msg/imu.hpp> #iinclude <sensor_m ...

  3. imu oracle,IMU技术

    由于传统的UNDO管理模式,oracle对于undo和data block,需要先读入到data buffer中进行修改,并产生data的redo. 修改的过程:产生undo的redo,更改undo ...

  4. Karto的后端优化与回环检测功能对比测试与分析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 上篇文章讲解了Karto的前端是如何工作的. 这篇文章将slam_karto中的后端优化部分的代码添加 ...

  5. MSCKF 源码解析 一

    论文:https://arxiv.org/abs/1712.00036 源码路径:  https://github.com/daniilidis-group/msckf_mono 源码框架 上图展示了 ...

  6. Lego-LOAM IMU坐标系变换的详细记录

    Lego-LOAM IMU坐标系变换的详细记录 0 基础知识 1. IMU 重力加速度消除 2 相机坐标系(camera)到初始坐标系(camera_init)的转换 最近看了Lego-LOAM 的I ...

  7. ardupilot 核心IMU数据记录

    目录 文章目录 目录 摘要 1.获取加速度和陀螺仪数据 2.获取地磁数据 3.获取气压计数据 4.获取GPS 数据 5.运行EKF 1.运行EKF 2.运行update_EKF2()更新 1.EKF2 ...

  8. ROS小车记录系列(二)IMU采集、过滤,与odom数据融合,发布新的odom话题

    (二)IMU采集.过滤,利用EKF将IMU与odom融合,发布新的odom话题 A.ROS采集节点 B.imu_tools过滤imu数据 C.使用 robot_pose_ekf 对imu和odom进行 ...

  9. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)

    16个相机参数: Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multi ...

最新文章

  1. Paddle 环境中 使用LeNet在MNIST数据集实现图像分类
  2. Hibernate 一对一、一对多、多对多注解cascade属性的总结
  3. jQuery 操作大全
  4. exe一机一码加密工具_文件夹加密软件有哪些作用?
  5. Entity Framework 4.3.1 Code First 连接 PostgreSQL 9.2.3 小结
  6. 超级详细的教程 一步步教你Vue项目中使用axios如何进行参数拼接
  7. Linux 没有主清单属性,maven编译正常,运行报错:中没有主清单属性
  8. python学习day2:类与对象
  9. iOS定时器-- NSTimer 和CADisplaylink
  10. 你应该学习的 20 个 Python 代码段
  11. Win7下使用openssl时出现“Unable to write ‘random state’‘的问题
  12. java加载阶段内存分配_Java核心:类加载和JVM内存的分配
  13. css3实现翻转效果,css3 实现3D翻转效果
  14. java怎么把弹框设置为圆角_自定义圆角Dialog
  15. php网站整合ck播放器,wordpress主题整合ckplayer播放器
  16. Android webview 下载文件(文件名,扩展名)
  17. 手把手教你编译Flutter engine
  18. 最新!中国大陆人口首超14亿!但我们为什么不再生孩子了?
  19. 批处理——读写文件、字符串替换
  20. STM32F407VET6读写GD25Q16(W25Q16)

热门文章

  1. K8S 微服务 —— misc
  2. 【安全】WEB配置安全
  3. tp5实现文件上传图片到数据库,并显示到页面。
  4. 房价的真相--转载自焦点房地产的一位过客评论
  5. 东北大学计算机复试时间,2020年东北大学考研复试时间安排
  6. Mac 安装虚拟机 VMWare Fusion 8.1.1及虚拟机安装Linux CentOS 7
  7. virtualbox扩展centos6.5虚拟机磁盘
  8. ECN Trade:金融市场动荡不安 美国政府被指无作为
  9. 如何推RTMP流到SRS
  10. Romax17破解后闪退的问题