理解传感器融合和跟踪,第2部分:融合磁,加速度和陀螺来估计方向
从系列中:理解传感器融合和跟踪
布莱恩•道格拉斯
本视频介绍了如何使用磁力计、加速度计和陀螺仪来估计物体的方向。本文的目标是展示这些传感器如何为解决方案做出贡献,并解释在此过程中需要注意的一些事项。
我们将介绍什么是方向,以及如何使用加速度计和磁力计来确定方向。我们还将讨论校准硬铁和软铁源的磁力计,以及处理腐蚀加速度的方法。
我们还将展示一个简单的航位推算解决方案,使用陀螺仪本身。最后,我们将介绍混合三个传感器的解决方案的概念。万博 尤文图斯
在这个视频中,我们将讨论如何使用传感器融合来估计物体的方向。现在你可以用其他名字来称呼方向,比如姿态,或者如果你说的是二维窗格上的方向的话。这就是为什么融合算法也可以被称为姿态和航向参考系统。但这都是一回事;我们想要找出一个对象相对于某个参考的朝向。
我们可以使用许多不同的传感器来做到这一点。例如,卫星可以使用星跟踪器来估计相对于惯性星场的姿态,而飞机可以使用迎角传感器来测量机翼相对于来袭自由气流的方向。
现在,在这个视频中,我们将专注于使用一组非常流行的传感器,你会在每个现代手机和各种自主系统中找到:磁力计,加速度计和陀螺仪。
本视频的目标不是开发一个完整的惯性测量系统。有太多的东西要涵盖,无法真正彻底地做一份工作。相反,我想从概念上构建系统,并解释每个传感器将带来什么,以及在此过程中需要注意的一些事情。我还会列出一些其他非常好的资源,我已经在下面链接了,在那里你可以深入了解更多细节。让我们开始吧。我是Brian,欢迎来到MATLAB技术讲座。
当我们讨论方向时,我们实际上是在描述一个物体从已知参考系旋转的距离。例如,飞机的俯仰角是纵轴旋转离当地地平线的距离。为了定义一个方向,我们需要选择我们想要描述方向的参照系,然后使用一些表示方法指定从那个参照系旋转。我们有几种不同的方法来表示旋转。也许一开始最容易想象和理解的是横摇、俯仰和偏航的概念。这种表现在某些情况下非常有效;然而,它在其他方面有一些众所周知的缺点。我们还有其他方法来定义不同情况下的旋转,比如方向余弦矩阵和四元数。
对于这个讨论来说,重要的不是四元数是什么或DCM是如何制定的,而是要理解这些数字组都表示两个不同坐标框架之间的固定三维旋转:对象自己的坐标框架固定在主体上并与之一起旋转,以及一些外部坐标框架。正是这个旋转,或者这些数字,我们试图通过传感器测量一些量来估计。
我们来看看具体的问题。假设我们想知道放在桌子上的手机的方向。所以手机的机身坐标框架相对于本地的北,东,下坐标框架。当我们可以使用磁力计和加速度计来找到绝对方向时,稍后我们将添加陀螺仪来提高精度并纠正系统移动时出现的问题,但现在我们将坚持使用这两个传感器。简单地说,我们可以测量手机的加速度,这只是由于重力,因为它固定在桌子上,我们知道方向是向上的,与重力相反的方向。然后我们可以测量物体框架内的磁场来确定北面。
但这里有一些事情需要考虑:磁场指向北方,但它也指向向上或向下,这取决于你所在的半球。而且不是一点点。在北美,磁场线的角度大约是60到80度,这意味着它主要是在重力方向上。罗盘指向北方而不是向下的原因是指针被限制在二维平面内旋转。然而,我们的磁传感器没有这样的约束,所以它会返回一个同样是重力方向的矢量。为了向北,我们需要做叉乘。s manbetx 845我们可以从我们测量的加速度矢量和加速度矢量开始。向下的方向与加速度矢量相反。东是向下和磁场的叉乘,北是向东和向下的叉乘。所以物体的方向就是在物体坐标系和NED坐标系之间的旋转,我可以直接从我刚刚计算的NED向量建立方向余弦矩阵。
让我们来看看这个融合算法的实现。我有一个物理IMU;它是MPU-9250,它有加速计,磁力计和陀螺仪。虽然现在我们不打算用陀螺。我通过I2C将它连接到Arduino,然后通过USB连接到MATLAB。我基本上是跟着MathWorks网站上的这个例子走的,它提供了我正在使用的一些函数,如果你想做同样的事情,我在下面有链接。
让我给你们看一下我的简单脚本。我连接到Arduino和IMU,我使用MATLAB查看器来可视化方向,每次读取传感器时我都会更新查看器。这是一个内置功能,带有传感器融合和跟踪工具箱。这里的少量数学运算基本上是读取传感器,执行叉乘,并构建DCM。s manbetx 845
这就是它的全部。如果我运行这个,我们就能看到算法的运行。注意,当它放在桌子上时,它会很好地向下寻找;它在正X轴上,如果我把它旋转到另一个方向,你可以看到它很好地跟随我的物理运动。总的来说,非常简单明了,对吧?
这个简单的实现有一些问题,我想强调其中的两个。首先,加速度计不仅仅是测量重力;它们测量所有的线性加速度。所以如果系统移动了很多,就无法估计出向下的位置。你可以看到这里我并没有真正旋转传感器,但观众在各处跳跃。如果你的系统基本上没有加速,比如飞机在高空巡航,或者手机放在桌子上,这可能不是什么大问题。但线性加速度并不是唯一的问题。即使是旋转也会影响估计,因为不在旋转中心的加速度计会在系统旋转时感应到加速度。所以我们必须想办法解决这些腐败问题。
第二个问题是磁力计会受到磁场扰动的影响。显然,您可以看到,如果我在IMU附近放置磁铁,估计就会损坏。那么对于这两个问题我们能做些什么呢?好吧,让我们从磁力计开始。如果磁扰动是系统的一部分,并随着磁强计旋转,那么它可以被校准出来。
这些就是所谓的硬铁和软铁来源。硬铁源会产生自己的磁场。这可能是一个真正的磁铁,就像电动机里的磁铁一样,或者它可能是一个线圈,电流从电子设备本身流过。如果你试图测量外部磁场,磁力计附近的硬铁源将有助于测量。如果我们围绕一个轴旋转系统并测量磁场,结果将是一个与原点偏移的圆。所以你的磁力计会在某些方向读取较大的强度,而在相反的方向读取较小的强度。
软铁源是一种不产生自身磁场的物质,但你可以称之为磁性物质;你知道,就像一颗被磁铁吸引的钉子或者你系统的金属结构。这种类型的金属会使磁场弯曲,当磁场穿过或环绕它时,弯曲的量随着金属旋转而变化。因此,一个软铁源随着磁力计旋转会扭曲测量结果,产生一个椭圆形而不是圆形。
因此,即使你有一个完美的无噪声磁强计,它仍然会返回一个不正确的测量结果,仅仅是因为它附近的硬铁和软铁源。你的手机和几乎所有的系统都有。
我们来谈谈校准。如果系统中没有硬铁源或软铁源,并且你将磁力计旋转到四个平面方向,那么磁场矢量就会勾勒出一个完美的球体,其半径就是磁场的大小。现在,硬铁源会抵消球体而软铁源会将其扭曲成椭球。如果我们可以提前测量,我们就可以通过找到偏移和变换矩阵来校准磁力计,从而将它转换回以原点为中心的完美球体。然后将该转换矩阵和偏差应用于每次测量,基本上消除了硬铁和软铁源。
这正是你的手机在使用指南针之前要求你向各个方向旋转时所做的事情。在这里,我通过使用MATLAB函数magcal校准我的IMU来演示这一点。我收集了一堆不同方向上的测量数据,然后找到校准系数,使它们适合一个理想的球体。
现在我有了一个A矩阵,可以校正软铁源,b矩阵可以去除硬铁偏差,我可以在我之前展示的融合算法中添加一个校准步骤,这将产生比之前更准确的结果。
好了,现在让我们回到求解另一个线性加速度的问题。解决这个问题的一种方法是预测线性加速度,并在使用它之前将其从测量中移除。这听起来可能很难做到,但如果加速度是系统执行器的结果,而不是不可预测的外部干扰,这是可能的。我们可以接收发送到执行器的命令,并通过系统模型进行播放,以估计预期的线性加速度,然后从测量值中减去该值。这是可能的,比如说,如果你的系统是一架无人机你通过控制四个螺旋桨来飞行。
如果我们不能预测线性加速度或外部干扰太高,另一种选择是忽略加速度计读数超出1 g测量的某个阈值。如果读数的大小不接近重力的大小,那么很明显传感器正在捕捉其他运动,它是不可信的。
这可以防止损坏的测量数据进入我们的融合算法,但这不是一个很好的解决方案,因为我们在这些时间里停止估计方向,我们失去了对系统状态的跟踪。同样,如果我们试图估计一个静态对象的方向,这不是问题;这个算法可以很好地工作。然而,我们通常想知道旋转和加速物体的方向。所以我们需要别的东西来帮助我们。
我们能做的就是在混合物中加入一个陀螺仪来测量系统的角速率。事实上,磁力计、加速度计和陀螺仪的组合非常流行,以至于它们经常被打包成一个惯性测量单元,就像我的MPU-9250一样。那么陀螺仪有什么帮助呢?
首先,我认为考虑如何估计旋转物体的方向是有用的,只有陀螺仪,没有加速度,没有磁强计。为此,我们可以将角速率测量值乘以采样时间,以得到这段时间内角度的变化。然后,如果我们知道前一个采样时间的手机方向,我们可以将这个delta角加到它上面,并得到当前方向的更新估计。如果物体不旋转,那么角度为零方向也不会改变,所以都成立。通过对下一个样本和下一个样本重复这个过程,我们将知道手机随着时间的推移的方向。这个过程被称为航位推算,本质上它只是对陀螺测量进行积分。
航迹推算也有缺点。第一,在你开始之前你仍然需要知道初始的方向所以我们必须弄清楚,第二,传感器不是完美的。它们有偏差和其他高频噪音,会破坏我们的估计。现在,积分就像一个低通滤波器,因此高频噪声被平滑了一点,这是很好的,但由于随机游走以及对测量中的任何偏差进行积分,结果会偏离真实位置。所以,随着时间的推移,方向会平稳地偏离真相。
所以在这一点上我们有两种不同的方法来估计方向,一种使用加速度计和磁力计,另一种只用陀螺仪。每一种都有各自的好处和问题。这就是传感器融合再次发挥作用的地方。我们可以用它来结合这两种估计,以强调它们各自的优点,最小化它们的缺点。现在,我们可以使用一些传感器融合算法,比如互补滤波器或卡尔曼滤波器,或者更专业但非常常见的Madgwick或Mahony滤波器,但在它们的核心,它们基本上都做同样的事情。
他们通过手动设置或使用磁场和加速度计的初始结果来初始化姿态,然后,随着时间的推移,他们使用磁场和重力的方向来慢慢纠正陀螺中的漂移。现在,我在互补滤波器的视频中详细介绍了很多细节,MathWorks有一个关于卡尔曼滤波器机制的系列,下面都有链接,但如果你不马上去看,让我先介绍一下这种混合如何工作的非常高级的概念。
让我们把我们的两个解决方案放在代表我万博 尤文图斯们对每个解决方案的信任的天平的两端。我们可以放置一个滑动条来指定我们更信任哪个解决方案。如果滑块在最左边,那么我们100%相信我们的mag/accel解决方案,我们只使用这个值作为我们的方向。一直到右边,我们100%使用航位推算法。当滑块在两者之间时,这意味着我们对两个溶液都有一定的信任,因此想要取一个溶液的一部分,并将其添加到另一个溶液的互补部分。万博 尤文图斯通过将滑块几乎完全放在航位推算解决方案上,我们主要信任集成陀螺仪测量的平滑性和快速更新,这在旋转和线性加速度期间为我们提供了良好的估计,但我们曾经如此温和地将该解决方案修正回对磁矩和加速度的绝对测量,以便在偏差有机会变得太大之前消除偏差。所以这两种方法是相辅相成的。
现在,对于互补过滤器,作为设计师,你手动计算出在哪里放置这个滑块,你对一个测量的信任程度超过另一个。使用卡尔曼滤波器,在您指定诸如测量中有多少噪声以及您认为系统模型有多好等事情之后,就可以计算出滑块的最佳增益或位置。所以底线是我们在两个解之间做了某种奇特的平均基于我们对它们的信任程度。万博 尤文图斯现在,如果你想自己练习,我之前使用的MATLAB教程通过使用MATLAB函数ahrsfilter的卡尔曼滤波方法。
这节课就讲到这里。在下一集视频中,我们将进一步添加GPS,并展示IMU和方向估计如何帮助我们改善从GPS传感器获得的位置。
所以,如果你不想错过这个或其他未来的Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我在那里介绍了更多的控制主题。下次见。
相关产品s manbetx 845
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。