惯性传感器的倾角计算

惯性传感器单元 IMU

IMU 是 Inertial Measurement Unit 的缩写, 直接翻译过来就是惯性测量单元, 常见的有单独的三轴加速度(Accelerometer)计 ADXL345, L3G4200D, L3GD20等, 单独的三轴角速度计(又称陀螺仪, Gyroscope) LIS3DH, L3GD20H, BMG160, 以及包含了加速度计和陀螺仪的六轴运动传感器 MPU6050, MPU6500, MPU6881, BMI160等, 以及带电子罗盘的九轴运动传感器 MPU9250, MPU9255等.

在判断物体在空间中的姿态以及运动轨迹时, 用得最多的是加速度和角速度传感器. 加速度传感器可以计算倾角, 陀螺仪可以计算角速度, 这两种传感器各自的特点为

  • 陀螺仪: 动态特性好, 因为测量噪声(误差)的存在, 以及各向灵敏度的差异, 通过积分计算角度会累积误差, 导致结果越来越不准
  • 加速度计: 不会累积误差, 所以准确度有保证, 但是动态响应差, 不适用于角度变化快速的场景.

如果设备运动速度较慢, 作用于系统的加速度力主要是重力, 可以使用加速度计来计算倾角, 利用重力矢量及其在加速度计轴上的投影(即对应读数)来确定倾角. 由于重力是恒定加速度, 如果存在额外的恒定加速度也会影响计算结果. 额外的恒定加速度包括发动机持续加速以及设备自身匀速的旋转等.

通过加速度计算倾角

静止和慢速物体因为主要加速度来源为重力, 用加速度传感器可以计算得到物体的倾角.

单轴数据计算倾角

假设X轴上测到的加速度值为 a x a_x ax 定义倾角 α α α 为X轴与水平面(与重力矢量垂直的平面)的夹角, 计算为

α = s i n − 1 ( a x g ) α = sin^{-1}(\frac{a_x}{g}) α=sin1(gax)

a x = 0 a_x = 0 ax=0 时, 倾角为0, X轴处于水平位置, 当 a x = g a_x = g ax=g 时, 倾角90°, 处于垂直位置, 当 a x a_x ax 的值很小时, 可以用近似公式 s i n ( α ) ≈ α sin(α) ≈ α sin(α)α, 于是

α ≈ k ( a x g ) α ≈ k(\frac{a_x}{g}) αk(gax)

比例系数k用于角度的线性近似计算

a x a_x ax 的读数匹配 s i n ( α ) sin(α) sin(α) 曲线, 读数值范围为 − 1 g 1 g -1g ~ 1g 1g 1g, 在读数为0(水平位置)时灵敏度最高, 在读数为 + − 1 g +-1g +1g 时灵敏度最低.

双轴加速度数据计算倾角

单轴无法判断方向, 因为在倾角为 α α α 180 ° − α 180° - α 180°α 时读数是一样的. 如果增加一个与X轴垂直的轴, 假定为Z轴, 且XZ轴形成的平面垂直于水平面, 那么XZ轴在这个平面里形成的对水平面的倾角就可以判断方向, 并且结果较为精确, 因为总会有一个轴处于灵敏度较高的区间.

当XZ轴形成的平面垂直于水平面时, X轴倾角可以用两个轴的读数进行计算.

α = t a n − 1 ( a x a z ) α = tan^{-1}(\frac{a_x}{a_z}) α=tan1(azax)

a x a_x ax为0时, 倾角为0, X轴处于水平, 当 a z a_z az为0时要注意避免零除. 如果XZ轴平面不垂直于水平面, 这个结果会小于实际的倾角, 倾斜越厉害误差越大.

三轴加速度数据计算倾角

假设传感器Z轴垂直朝下, X轴朝正前方, 则X轴与水平面之间的夹角为俯仰角(pitch) α α α, Y轴与水平面间的夹角为横滚角(roll) β β β, 航向角yaw需要地磁传感器, 无法通过加速度传感器计算. Z轴垂直于X轴和Y轴, 和两轴数值是相关的, 并没有独立性, 仅用于判断设备上下的朝向. 令Z轴与水平面的夹角为 γ γ γ

重力加速度在XYZ三个轴上的投影即为三个轴传感器的读数, 可以将三轴倾角和重力加速度想像为一个斜立的长方体, 长方体的对角线为重力加速度, 对角线就是这个角对应的三条边, 倾角的计算方法为

α = s i n − 1 ( a x g ) α = sin^{-1}(\frac{a_x}{g}) α=sin1(gax)
β = s i n − 1 ( a y g ) β = sin^{-1}(\frac{a_y}{g}) β=sin1(gay)
γ = s i n − 1 ( a z g ) γ = sin^{-1}(\frac{a_z}{g}) γ=sin1(gaz)

带运动加速度的倾角计算

上面的计算方式适合相对静止和慢速的场景, 当物体受作用于多个外力时, 作用于传感器的综合加速度为重力与各外力的叠加, 此时加速度的方向就不是重力的方向, 上面的计算方式就不适用了, 因为综合加速度可能比 g g g 更大或更小.

对于一个物体, 整体加速度等于三轴加速度的矢量和, 其大小 G G G 可以通过三个向量的大小计算得到

G = a x 2 + a y 2 + a z 2 2 G = \sqrt[2]{{a_x}^2 + {a_y}^2 + {a_z}^2} G=2ax2+ay2+az2

由此可以得到运动状态下倾角的计算

α = s i n − 1 ( a x G ) α = sin^{-1}(\frac{a_x}{G}) α=sin1(Gax)
β = s i n − 1 ( a y G ) β = sin^{-1}(\frac{a_y}{G}) β=sin1(Gay)
γ = s i n − 1 ( a z G ) γ = sin^{-1}(\frac{a_z}{G}) γ=sin1(Gaz)

因为 a x a_x ax, G G G, a y 2 + a z 2 2 \sqrt[2]{{a_y}^2 + {a_z}^2} 2ay2+az2 三个矢量形成直角三角形, 上面的式子可以也可以用 t a n − 1 tan^{-1} tan1 计算

α = t a n − 1 ( a x a y 2 + a z 2 2 ) α = tan^{-1}(\frac{a_x}{\sqrt[2]{{a_y}^2 + {a_z}^2}}) α=tan1(2ay2+az2 ax)
β = t a n − 1 ( a y a x 2 + a z 2 2 ) β = tan^{-1}(\frac{a_y}{\sqrt[2]{{a_x}^2 + {a_z}^2}}) β=tan1(2ax2+az2 ay)
γ = t a n − 1 ( a z a x 2 + a y 2 2 ) γ = tan^{-1}(\frac{a_z}{\sqrt[2]{{a_x}^2 + {a_y}^2}}) γ=tan1(2ax2+ay2 az)

此时的倾角并非相对重力加速度的倾角, 而是相对物体整体加速度矢量的倾角, 例如物体向前(X轴方向)加速运动时, 整体加速度方向会向后倾斜, 当物体左转时, 离心力会导致整体加速度方向向右倾斜. 计算此时的姿态倾角, 可以用于帮助物体在当前的运动状态上保持平衡.

互补滤波

通过加速度传感器(Accelerometer)可以使用反三角函数 s i n − 1 sin^{-1} sin1 t a n − 1 tan^{-1} tan1求静止和慢速运动物体的倾角, 对于高速运动的物体, 需要结合陀螺仪的角速度读数快速响应倾角变化. 对于这两种传感器读数的结合, 通常采用互补滤波算法.

互补滤波就是在短时间内采用陀螺仪得到的角度做为最优值, 定时用加速度值来校正陀螺仪的得到的角度. 加速度计要滤掉高频信号, 陀螺仪要滤掉低频信号, 互补滤波器就是根据传感器特性不同, 通过不同的滤波器, 相加得到整个频带的信号.

互补滤波的公式为

α n = k ∗ ( α n − 1 + δ α ∗ d t ) + ( 1 − k ) ∗ α ′ α_n = k * (α_{n-1} + \delta_α ∗ dt) + (1 - k) ∗ α^{\prime} αn=k(αn1+δαdt)+(1k)α

其中

  • α n α_n αn 互补计算得到的角度
  • α n − 1 α_{n-1} αn1 前一次计算得到的角度
  • δ α \delta_α δα 陀螺仪得到的角速度
  • d t dt dt 两次计算的时间间隔
  • α ′ α^{\prime} α 通过加速度计得到的倾角
  • k k k 1 − k 1-k 1k 为加权系数, 和为 1

加权系数的确定. 在 《The Balance Filter》 中提到关于加权系数的求解公式, 先设滤波器的加权系数为 α α α, 时间常数为为 τ τ τ, 运行周期为 d t dt dt, 那么公式为

α = τ τ + d t α = \frac{τ}{τ+dt} α=τ+dtτ

运行周期 dt 根据运行周期确定, 如果互补滤波器方法的调用频率为 200次每秒, 那么 d t = 1000 m s 200 = 5 m s dt = \frac{1000ms}{200} = 5ms dt=2001000ms=5ms

时间常数 τ τ τ 的取值根据系统的实际需求调整,
不同的系统的 τ τ τ 值不一定相同. τ τ τ取值越大则陀螺仪权重越大, τ τ τ取值越小则加速度传感器的权重越大. 通常互补滤波器对陀螺仪的权重会大些, 以降低加速度传感器中噪声的影响. 例如互补滤波器运行间隔为 10ms, 时间常数 τ = 0.49 τ =0.49 τ=0.49, 那么此时加权系数为:

α = τ τ + d t = 0.49 0.49 + 0.01 = 0.98 α = \frac{τ}{τ+dt} = \frac{0.49}{0.49 + 0.01} = 0.98 α=τ+dtτ=0.49+0.010.49=0.98

C语言代码

// a = tau / (tau + dt)  
// acc = 加速度传感器数据 
// gyro = 陀螺仪数据 
// dt = 运行周期float angle;
float a;float ComplementaryFliter(float acc, float gyro, float dt)
{a = 0.98;angle = a * (angle + gyro * dt) + (1 - a) * (acc);return angle;
}

在实际应用中, 因为加速度计和角速度计读取的数据存在很大的噪音, 直接使用会造成反馈的不稳定(抖动), 需要在计算前通过卡尔曼滤波器等进行平滑.

参考

  • 倾角计算 https://www.analog.com/cn/resources/app-notes/an-1057.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…

python统计分析——泊松回归

参考资料&#xff1a;用python动手学统计学 概率分布为泊松分布、联系函数为对数函数的广义线性模型叫作泊松回归。解释变量可以有多个&#xff0c;连续型和分类型的解释变量也可以同时存在。 1、案例说明 分析不同气温与啤酒销量的关系。构造不同气温下的销量的数学模型&…

Java之美[从菜鸟到高手演变]之Json类型数据的处理

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使…

Unity--自动版面(Horizontal Layout Croup)||Unity--自动版面(Vertical Layout Group)

Unity--自动版面&#xff08;Horizontal Layout Croup&#xff09; Horizontal Layout Croup&#xff1a; “水平布局组”组件将其子布局元素并排放置。它们的宽度由各自的最小&#xff0c;首选和灵活的宽度决定&#xff0c;具体取决于以下模型&#xff1a; 所有子布局元素的…

el-form里面表单遍历渲染,里面放el-row,一行放3个表单怎么实现

需求&#xff1a; 需要实现 el-form里面的表单遍历渲染&#xff0c;里面放el-row,一行放3个表单怎么实现&#xff1f; 废话不多说直接上demo <el-form ref"form" :model"form" label-width"80px"><el-row v-for"(row, index) in M…

服务器硬件基础知识全解析

在信息技术日新月异的今天&#xff0c;服务器作为数据处理和存储的核心&#xff0c;其重要性不言而喻。了解服务器硬件基础知识&#xff0c;对于IT从业者以及广大技术爱好者来说&#xff0c;都是不可或缺的技能。本文将详细解析服务器硬件的基础知识&#xff0c;帮助读者建立起…

BUGKU bp

打开环境&#xff0c;他提示了弱密码top1000&#xff0c;随便输入密码123抓包爆破 发现长度都一样&#xff0c;看一下响应发现一段js代码&#xff0c;若r值为{code: bugku10000}&#xff0c;则会返回错误&#xff0c;通过这一句“window.location.href success.php?coder.cod…

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题&#xff08;列表遍历&#xff09;第十四题&#xff08;len&#xff09;第十七题&#xff08;len、insert&#xff09;第二十一题&#xff08;append&#xff09;第三十题&#xff08;二维列表&#xff09; 第十一题&#xff08;列表遍历&#xff09; 题目&a…

mysql数据库root权限读写文件

如果没有shell&#xff0c;只有数据库权限的情况下&#xff1a; 1. udf 提权提示没有目录&#xff1a;使用数据流创建目录 1. select xxx into outfile C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\::$INDEX_ALLOCATION;2. select xxx into outfile C:\\phpstudy_pro\…

springcloud和基础服务的搭建以及封装

代码仓库地址&#xff1a;https://github.com/zhaoyiwen-wuxian/springcloud-common page分页也进行了封装&#xff0c;只需要添加到pom中&#xff0c;将会自动进行分页&#xff0c;并且后端不需要写任何的分页数据。只需要前端自己传分页参数即可&#xff0c;并且里面封装了很…

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

高效运维监测:全面掌控IT基础设施与应用性能

在现代IT环境中&#xff0c;确保服务器、网络设备和应用程序的稳定运行至关重要。为了实现这一目标&#xff0c;运维团队需要一套高效、灵活的监测系统&#xff0c;能够实时追踪各种性能指标&#xff0c;并在出现问题时迅速发出警报。本文将详细介绍这样一套监测系统&#xff0…

WebServer -- 数据库连接池

目录 &#x1f382;基础知识 &#x1f6a9;整体内容 &#x1f33c;单例模式创建 &#x1f382;连接池&#xff08;代码实现&#xff09; 初始化 获取 && 释放连接 销毁连接池 &#x1f351;RAII 机制释放数据库连接 定义 实现 &#x1f382;基础知识 什么是…

使用 Docker 部署 Answer 问答平台

1&#xff09;介绍 GitHub&#xff1a;https://github.com/apache/incubator-answer Answer 问答社区是在线平台&#xff0c;让用户提出问题并获得回答。用户可以发布问题并得到其他用户的详细答案、建议或信息。回答可以投票或评分&#xff0c;有助于确定有用的内容。标签和分…

Ps:历史记录面板

Ps菜单&#xff1a;窗口/历史记录 Window/History 历史记录 History面板提供了对图像编辑过程中所进行更改的深入控制&#xff0c;可以让用户回溯并查看每一步操作&#xff0c;从而允许用户轻松撤销错误或比较不同的编辑效果。 ◆ ◆ ◆ 常用操作方法与技巧 “历史记录”面板…

CentOS7设置虚拟机语言为中文

1.查看本地安装的语言 locale -a 是一个Linux命令&#xff0c;用于列出系统中可用的所有区域设置&#xff08;locales&#xff09;它包含了各种语言和地区的不同设置。 打开终端&#xff08;右键open terminal&#xff09;输入 locale -a 查看本地安装的语言&#xff1a; 其中z…

如何在Unity项目中使用Plastic SCM进行版本控制

引言 Plastic SCM是一个版本控制系统&#xff0c;专为处理大型项目而设计&#xff0c;特别适用于游戏开发中的Unity项目。它提供了强大的分支和合并工具&#xff0c;使团队能够高效地协作开发。 安装和设置 安装Plastic SCM 访问Plastic SCM官网下载客户端。根据您的操作系…

一些可以访问gpt的方式

1、Coze扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/ 2、https://poe.com/ 3、插件阿里…

EasyRecovery16电脑硬盘数据恢复软件功能详解

在数字化时代&#xff0c;人们在日常生活和工作中越来越依赖于电脑和移动设备。不管是个人用户还是企业&#xff0c;数据的重要性都不言而喻。然而&#xff0c;数据丢失和损坏的风险也随之增加&#xff0c;因此&#xff0c;数据恢复软件的需求也日益增长。 EasyRecovery 16是一…