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