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