机器人姿态估计-IMU、互补滤波算法应用

news2024/10/11 10:19:28

机器人姿态估计-IMU、互补滤波算法应用

image

附赠自动驾驶学习资料和量产经验:链接

机器人的姿态测量对于许多应用至关重要,如导航、运动控制等。在这篇文章中,我们将介绍如何利用MPU6050传感器以及互补滤波和卡尔曼滤波算法来实现自平衡车的姿态测量。我们将从原理出发,逐步介绍互补滤波和卡尔曼滤波的基本原理,并提供相应的C代码实现。

原理

我们需要测量机器人的姿态,这里是自平衡车的倾斜角度。对于机器人姿态等运动状态物理量,我们一般采用惯性传感器来直接测量。

主要包括加速度计(Accelerometer)、陀螺仪(Gyroscope)和磁力计(Magnetometer)。这些传感器通过测量物体的加速度、角速度和磁场强度等信息,来获取物体在空间中的运动状态,如位置、速度、加速度、角度等。

惯性传感器

当然这种传感器有很多种,这里我们使用MPU6050。MPU6050是一款集成了三轴陀螺仪和三轴加速度计二合一的传感器。如下图:

image

MPU6050

其中加速度计用于测量物体由于地球重力或者物体运动所产生的加速度,即物体在单位时间内速度的变化率。陀螺仪用于测量物体的角速度,即物体在单位时间内的旋转速度。通过积分陀螺仪输出的角速度数据,可以获取物体相对于初始位置的旋转角度。

利用加速度计测量倾斜角

我们通过I2C接口可以读取到MPU6050 X,Y,Z三个轴方向上的加速度实际测量数据。

那么我们如何可以利用三个轴的加速度数据算出倾斜角度呢?

理想情况下,我们知道如果将小车静止不动,这个时候机器人或者传感器就只受到地球重力作用,如上图,此时MPU6050水平,这时候只有Z轴方向上有加速度,而且是地球重力加速度g,其它两个轴X或者Y上加速度都是零。当小车有一定倾斜角的时候,地球重力会在X或者Y轴方向上有分力,也就是地球重力加速度g会在X或者Y轴上有分量,而且分量大小和倾斜角度β相关。如下图所示:

image

g分解

其中β=arctan(x/z)或者β=arctan(y/z),通过这个反正切计算我们就可以得到倾斜角度β。

至于说具体是用X轴还是Y轴数据来算,这个要看MUPU6050在平衡车上实际安装方位来看。如果MPU6050安装方式是X轴与小车轮轴平行,Z轴朝上,那么g就分量到Y轴上;

如果MPU6050安装方式是Y轴与小车轮轴平行,Z轴朝上,那么g就分量到X轴上;

是不是觉得到此应该结束了?这不是已经测得倾斜角度了吗?

我们来看一下加速度计测量的在小车实际运动过程中倾斜角度的数据。如下图:

image

加速度计测量的倾斜角度β

我们可以看到为什么有很大毛刺,因为上面反正切计算方法有个理想前提条件大家不要忘了,就是我们机器人只是受到重力作用,但是实际上,当小车运动的时候其实是有运动加速度a的,也就是说不单纯是重力加速度g,还有其他运动加速度的累加。如下图:

image

运动加速度累加

也就是说,在没有运动加速度理想情况下,X/Y轴加速度测量值是sinβg,而实际运动情况下,测量值就是sinβg+cosβa,这样自然就不对了,所以上面数据出现毛刺。线性加速度计是无法避免运动加速度对角度测量的影响。

所以行业上一般说,加速度计的动态性能不太好,静态性能好就是这个意思。

好,那既然加速度动起来时候测量效果有问题,那么怎么解决呢?下面我们来看看陀螺仪能否测量吧!

利用陀螺仪测量倾斜角度

陀螺仪是利用高速回转体的动量矩敏感壳体对自转轴的角运动检测装置,它输出的是围绕XYZ三轴旋转的角速度值。MPU6050内部除了加速度计,还集成了三轴陀螺仪。

由于陀螺仪输出是围绕三轴自转的角速度,所以不会受到小车或者机器人运动的影响。我们通过对其输出的角速度进行积分就可以得到角度,这样我们通过陀螺仪也可以测出小车倾角了。

例如,如果我们对陀螺仪的采样周期是5ms,也就是0.005s,如果小车发生倾角,其实就是MPU6050围绕平行于轮轴的那根轴自旋转角度。那么通过下面积分公式可以算出某一轴旋转角度值:

Angle_X = Angle_X + Gyro_X*0.005

其中,Gyro_X就是陀螺仪传感器平行于轮轴的轴角速度值。Angle_X表示旋转的角度**。**

但是陀螺仪测量的角速度值如果存在误差或者噪音,经过长时间积分之后,误差是会累积的,时间长了就会出漂移了,比如说传感器静止情况下输出也不为零,随着时间增长,误差也会逐渐增大,输出的角度值就不对了。如下图白色曲线所示。

image

陀螺仪漂移问题

融合算法

通过上面分析过程我们知道,加速度计和陀螺仪其实都可以单独测量倾斜角度值,但是各自有自己的缺点,那到底怎么解决这个问题呢?如果才能得到一个比较理想完美测角度测量值呢?

其实解决思路也很简单,那既然这两个传感器有自己的缺点,那我们就把他们的测量值做一个结合,互补一下,输出一个融合后的值不就完了。

那到底怎么样融合呢?目前工程上用的比较多的就是互补滤波和卡尔曼滤波算法。

互补滤波

先来看看互补滤波算法思想其实非常简单,就是既然两个传感器的测量值都有各自问题,那就分别给这两个值前面乘以一个权重系数,也就是两个传感器分别贡献一部分,其实就是加权平均。公式如下:

angle = k*angle_m + (1-k)*(angle+gyro_m*dt)

其中,angle是融合之后角度值,angle_m是加速度计测量的角度,angle+gyro_m*dt就是陀螺仪积分得到的角度,dt为采样周期,k就是互补滤波权重系数,如果想要加速度计的测量结果对最终结果影响大些,那就把k设置大些,反之,设置小点就是让陀螺仪的测量值对最终结果影响大些。

下面就是具体arduino C++实现代码:

image

C++代码实现

代码比较简单,RAD2GRAD是弧度转成度。陀螺仪数据除以65.5,是为了从寄存器数值转成度单位,数值得来由陀螺仪传感器量程决定,这里我们不讲MPU6050怎么使用,不清楚建议自己好好学习一下相关资料。

image

融合效果

上图是我们将小车或者MPU6050静置桌面,轻拍桌子的情况下测得的实际效果数据。图中白色线是陀螺仪测量角度,黄色线是加速度计数据,而红色线是互补滤波融合之后的数据,可以看到互补滤波还是很理想的。

卡尔曼滤波算法的实现我们后续文章来讲。

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

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

相关文章

vue 实现自定义分页打印 window.print

首先这里是我自定义了打印界面才实现的效果,如果不用自定义界面实现,应该是一样的吧。具体可能需要自己去试试看 我的需求是界面有两个表格,点击全部打印,我需要把第一表格在打印是第1页,第二个表格是第二页 如图&…

二十二、软考-系统架构设计师笔记-真题解析-2018年真题

软考-系统架构设计师-2018年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统…

ensp中pc机访问不同网络的服务器

拓扑图如下,资源已上传 说明:pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段,192.168.2.0网段和192.168.3.0网段,在未配置的情况下,pc设备是访问不到server的 具体操作流程 第一;pc设备…

C# 操作 Word 全域查找且替换(含图片对象)

目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 关于全域查找且替换 C#全域操作 Word 查找且替换主要包括如下…

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

QT数据类型和容器用法

Qt库提供了基于通用模板的容器类, 这些类可用于存储指定类型的数据项,Qt中这些容器类的设计比STL容器更轻,更安全且更易于使用。容器类也都是隐式共的,它们是可重入的,并且已针对速度/低内存消耗和最小的内联代码扩展进行了优化&a…

RabbitMQ基础笔记

视频链接:【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.初识MQ1.1.同步调用1.2.异步调用1.3.技术选型 2.RabbitMQ2.1.安装2.1.1 Docker2.1.1 Linux2.1.1 Windows 2.2.收发消息2.2.1.交换机2.2.2.队列2.2.3.绑定关系2.2.4.发送消息 2.3.数据隔离2.3.1.用户管理2…

Elasticsearch:语义搜索即服务处于卓越搜索的中心

作者:来自 Elastic Sherry Ger, Stephen Brown 对于许多企业来说,搜索卓越中心(center of excellence - COE)向其用户提供搜索服务,从不同的数据源中整理知识,并将搜索功能集成到其内部和外部应用程序中。…

神策数据参与制定首份 SDK 网络安全国家标准

国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告(2023 年第 13 号),全国信息安全标准化技术委员会归口的 3 项国家标准正式发布。其中,首份 SDK 国家标准《信息安全技术 移动互联网应用程序&#xff0…

如何配置本地ssh连接远程Linux服务器

1.条件 本地操作系统Ubuntu远程服务器(Linux都可以) 本地如果是Window,其实也一样,但是需要先下载ssh和putty工具,然后操作步骤是一样的 2.生成ssh公私钥对 # 在本地重新生成SSH公私钥对非常简单,在你的命令行终端&a…

词令关键词口令直达工具:打开「词令」输入关键词直达口令怎么使用?

词令是一款关键词口令直达工具;使用词令关键词口令直达工具,输入指定的词令关键词直达口令,搜索直达该词令关联的网站、页面、程序、应用、服务或功能等等,实现一键直达目标,避免繁琐的查找点击行为,提高用…

报错 /core/library/think/cache/driver/File.php 第 126 行左右(已解决)

报错 /core/library/think/cache/driver/File.php 第 126 行左右 解决方法: 网站后台版本低于v1.5.2出现的缓存问题,如果无法登录后台了,就通过FTP,把 /data/runtime 里的都删掉,然后进后台升级到最新版 一、进入宝…

初步了解JavaSE

目录 前言: 一、Java SE主要包含模块: 二、JavaSE的环境搭建 三、JavaSE简单入门 1)文件名称不对,如果有一个叫 helloworld.java,但是class命名为HelloWord. 2)如果希望我们文件名称和类名不一致&…

光耦合器电路基本概述

在当今快速发展的技术环境中,光耦合器电路在确保电信号跨隔离电路的无缝传输方面发挥着关键作用。这些半导体器件通常被称为光电隔离器,具有许多优点,包括电路隔离、信号传输和精确的电路控制。然而,如果不全面了解市场上各种光耦…

【漏洞复现】通天星CMSV6 admin 弱口令漏洞(CVE-2024-29666)

0x01 产品简介 CMSV6平台是基于车辆位置信息服务和实时视频传输服务的创新技术和开放运营理念。为GPS运营商车辆硬件设备制造商、车队管理企业等车辆运营相关企业提供核心基础数据服务。 0x02 漏洞概述 CMSV6 7.31.0.2、7.32.0.3版本中存在弱密码漏洞,未授权的攻…

俄罗斯深陷芯片自主困境,良率仅5成 |百能云芯

俄罗斯的芯片产业一直以来都面临着诸多挑战,尤其是在当前的国际形势下,这些挑战更加凸显。随着俄乌冲突的爆发,西方国家对俄罗斯实施了一系列经济制裁,导致俄罗斯科技产业受到了严重影响。据了解,俄国最大的本土芯片厂…

GooglePlay无法下载应用问题

问题如下 解决方法 1、实际上是因为google尚未添加apk downloader扩展程序 2、添加该扩展程序后,在应用中搜索应用名即可 欧克!下载完成

KSD测试系统使用方法和注意事项

①下载链接在最顶部; ②安装方法:应该先将测试设备绑定在假人身上,测试设备不能过度往下拉,传感器绑在脖子上,切记最后才开传感器开关!!!开传感器后3秒内不要碰测试设备衣服&#x…

2024年电商圈大地震!腾讯带着视频号小店,杀进电商市场了!

大家好,我是电商糖果 今年的电商圈真的是热闹非凡,各个平台之间硝烟四起。 当几大平台打的火热的时候,腾讯却偷偷的推出了视频号小店,想要加入混战,吃到电商这盘大蛋糕。 可能大部分人都不知道什么是视频号小店&…

C++从入门到精通——函数重载

函数重载 前言一、函数重载概念二、函数重载的分类参数类型不同的函数重载参数个数不同的函数重载参数类型顺序不同的函数重载 三、函数重载的具体代码展示main.cpp 四、为什么为什么C支持函数重载,而C语言不支持函数重载呢 前言 函数重载是指在同一个作用域内&…