机器人如何知道自己的姿态?一文搞懂IMU、互补滤波算法如何实战
机器人的小车姿态测量对于许多应用至关重要,如导航、源码运动控制等。基于本文将介绍如何利用MPU传感器以及互补滤波和卡尔曼滤波算法来实现自平衡车的自自平网狐经典版网站源码姿态测量。我们将从原理出发,平衡逐步介绍互补滤波和卡尔曼滤波的小车基本原理,并提供相应的源码C代码实现。
首先,基于我们需要测量机器人的自自平姿态,这里以自平衡车的平衡倾斜角度为例。对于机器人姿态等运动状态物理量,小车我们一般采用惯性传感器来直接测量。源码惯性传感器主要包括加速度计、基于陀螺仪和磁力计。这些传感器通过测量物体的加速度、角速度和磁场强度等信息,来获取物体在空间中的运动状态,如位置、速度、加速度、角度等。
MPU是一款集成了三轴陀螺仪和三轴加速度计二合一的传感器,是实现姿态测量的常用选择。其中加速度计用于测量物体由于地球重力或者物体运动所产生的加速度,即物体在单位时间内速度的源码练习变化率。陀螺仪用于测量物体的角速度,即物体在单位时间内的旋转速度。通过积分陀螺仪输出的角速度数据,可以获取物体相对于初始位置的旋转角度。
利用加速度计测量倾斜角,我们可以通过读取MPU X、Y、Z三个轴方向上的加速度实际测量数据。理想情况下,当将小车静止不动时,机器人或者传感器只受到地球重力作用,此时MPU水平,只有Z轴方向上有加速度,且是地球重力加速度g,其它两个轴X或者Y上加速度都是零。当小车有一定倾斜角时,地球重力会在X或者Y轴方向上有分力,即地球重力加速度g会在X或者Y轴上有分量,分量大小和倾斜角度β相关。通过反正切计算,我们可以得到倾斜角度β。
至于选择使用X轴还是Y轴数据来计算,取决于MPU在平衡车上实际安装方位。如果MPU安装方式是X轴与小车轮轴平行,Z轴朝上,那么g就分量到Y轴上;如果MPU安装方式是eopay源码Y轴与小车轮轴平行,Z轴朝上,那么g就分量到X轴上。
然而,加速度计测量的倾斜角度数据在小车实际运动过程中存在毛刺现象。这是因为,尽管在静态情况下,X/Y轴加速度测量值是sinβg,但在动态运动情况下,测量值变为sinβg+cosβa,这导致了误差。线性加速度计的动态性能不佳,静态性能好。
既然加速度计在运动时测量效果有问题,那么如何解决这个问题呢?答案是利用陀螺仪测量倾斜角度。陀螺仪是利用高速回转体的动量矩敏感壳体对自转轴的角运动检测装置,输出的是围绕XYZ三轴旋转的角速度值。通过对其输出的角速度进行积分,我们可以得到角度,从而测出小车的倾角。
例如,我们对陀螺仪的采样周期为5ms,通过下面积分公式可以算出某一轴旋转角度值:Angle_X = Angle_X + Gyro_X*0.。其中,Gyro_X是陀螺仪传感器平行于轮轴的轴角速度值,Angle_X表示旋转的角度。
但是teamviewr源码,陀螺仪测量的角速度值如果存在误差或者噪音,经过长时间积分后,误差会累积,时间长了就会出现漂移,例如传感器静止情况下输出也不为零,随着时间增长,误差也会逐渐增大,输出的角度值就不准确了。
解决这个问题的方法是将加速度计和陀螺仪的测量值进行融合,互补一下,输出一个融合后的值。目前工程上常用的融合算法有互补滤波和卡尔曼滤波算法。
互补滤波算法的基本思想是给两个传感器的测量值分别乘以一个权重系数,即分别贡献一部分,其实就是加权平均。公式如下:angle = k*angle_m + (1-k)*(angle+gyro_m*dt)。其中,angle是融合之后的角度值,angle_m是加速度计测量的角度,angle+gyro_m*dt是陀螺仪积分得到的角度,dt为采样周期,k就是互补滤波权重系数。根据需要调整加速度计或陀螺仪对最终结果的影响大小。
下面的Arduino C++实现代码相对简单,将小车或MPU静置桌面,轻拍桌子的arcgiswebgis源码情况下,可以测得实际效果数据。图中白色线是陀螺仪测量角度,**线是加速度计数据,而红色线是互补滤波融合之后的数据,效果理想。
卡尔曼滤波算法的实现将在后续文章中详细介绍。后续将持续更新高质量文章,欢迎关注、点赞、收藏以及提问。
创客是如何制作小机器人
arduino是创客界最知名的平台,因为其拥有低门槛与拓展性和开源的特性让他成为世界上最火热的创客编程平台。虽然现在也有不少优秀的开源平台在功能上做的比arduino更好更优秀,但arduino拥有的强大社区支持在目前看来,还是创客的入门首选。
而今天我们就arduino的智能机械方向,来教教各位刚入门的创客们如何自主造出一台简易的智能机器人。相信你认真看完后,会发现造一台机器人,其实也不是那么难。#改变生活黑科技#
计划方案与想法
在制作机器人的过程中我们要善于发现问题,并找到改进的办法,将其整理归纳为创意和点子,从而不断创造出新的需求。不过首先我们还是得把脑海里的想法转化成三维模型。这里推荐三款免费的 3D 建模软件:SketchUp、Autodesk D 和 TinkerCAD 。
首先, 机器人的外形是要自己设计的,包括内部具体的结构。在哪里放舵机、哪里放PCB、哪里放传感器等,这需要有一定的机械类专业和的背景。最少也得会一个Pro-E、Solidworks之类的基本3D设计软件。 然后到运动控制。
有了 Arduino 带来的丰富软件和硬件资源,或许还不够。许多时候,你可以在网络上买到便宜的零件,但也有一些时候,你需要一些特殊造型的零件。没关系,我们还有淘宝和桌面 CNC,在家中购买自己的零件现在已不是什么难事了。
这时候,我们首先需要一组Arduino创客入门基础套件,注意这些事用来设计方案的,而不是进行具体的实际编程操作,等我们有一套图纸后我们还需要一些模型拆解取得整体架构。
在获得了基本零件和一些大致的想法后,我们就可以选用平台和方式,交给我们的设计者来进行工作。当然,开发不是一帆风顺的,如果一个材料或想法得不到解决,需要换个思路。那创意者和设计者就必须时刻紧密的联系在一起,共同探讨出方案与结果来。
进行编程与开发
设计者是创客中的魔法师,他们可以将一切创意和点子转化为详细可执行的图纸或计划。设计者一般要求能力。
就目前为止,机器人大体可以分为人形与非人形机器人。非人形机器人可以是小车,动物,甚至是迷之长颈鹿等各种各样的结构,而这些结构想对仿生学层次较高,实施起来比较容易。
如果为了提高机器人的性能,并且感知外界的环境、提取深度信息,还要给机器人装传感器 。而感知的核心功能还要搭构同步定位和地图构建。
而如果选择人形机器人,用Arduino的人会比较多。但一般需要二次开发。Arduino的编程还算比较简单,基于C语言,常用的器件都有库,函数都不用自己写,调用就可以了。能搞定前面两块,这一部分只是实现的过程,难度不太大。
编程过程来讲,手机端的程序会比较容易,有现成的可以用,可以利用蓝牙串口通信。而且如果能做APP开发的话,可以自己开发一个。定义几个button,按下不同的button,给机器人的蓝牙模块发送不同的字符。机器人的Arduino板中运行的程序收到字符后,做出相应的动作,动作的编程已经算完成了。
开始制作与装配
制作机器人的过程中,如果没有强有力的行动,一切只是虚幻泡影,实践出真知,在制作与装配的过程中你可能会遇到结构部错误,零件大小口径错误......等等。嘿,耐点心呢,你是创客!
其实机器人与人类之间的关系是极为微妙、难以平衡的。做得太像人类,会引起人本能的生理排斥;做得太像机器,又让人觉得和它说话显得自己像个傻瓜;做得太可爱,又会让人觉得它是个低智的玩具。
但如果一个简单的DIY机器人部位结构,只有拥有3d打印机,那么一切都可以迎刃而解。一般的塑料,金属材料都可以在几分钟利用allcct制作出来。
大家都知道许多学生和公司通过NAO来做研究,用它来编程,调用声音合成、图像识别、肢体动作的能力,进而使之胜任不同的场景,例如踢足球赛、跳舞。但NAO这种桌面型的机器人运动能力是有限的,而且材料做出的材料很贵,但如果有一台3D打印机,一切东西都可以速出。
最后呢,如果你要制造一个可以照顾宠物、与你一起外出的新型机器人,同样的你可以使用gforce的软件开发包和遥控器,编写一段JAVA程序就能做到!但是创意是最重要的,因为对于创客而言,工具和技能仅仅是实现创意的手段,对作品起到决定性作用的还是创意;同时,最后一种武器也是最容易掌握的,因为每个人都拥有着与生俱来的创造天赋。
如果遇到困难就放弃变成了你的习惯,你的人生就基本失去了提升的可能了。因为每个成长都是伴随着困难和痛苦的,所以做一台小型机器人。其实,也不会有那么难!
2024-11-20 15:57
2024-11-20 15:41
2024-11-20 14:59
2024-11-20 14:39
2024-11-20 14:31