传感器融合是一种将多个物理传感器组合起来以产生准确“真实”的测量结果的技术,即使每个传感器本身可能都不可靠。
“什么是真的?”这就是传感器融合应该回答的核心问题。
传感器远不是完美的装置,在某些条件下,甚至会发生错误测量结果。
那么,我们如何应对不完美的传感器呢?
我们可以增加更多的传感器,因为传感器越多,盲点越小。但是为了处理由此产生的大量模糊性数据,相应的数学处理变得更加困难。而现代的传感器融合算法的出现,就刚好解决了多个传感器数据处理的问题。
传感器融合算法
①、Kalman滤波器
Kalman滤波器是最为典型的。
该算法的核心是为每个传感器设置一组“信念”因子。每一个时刻,来自上一个时刻的传感器数据都会被用来统计以提高猜测(自加归),同时传感器的质量也被判断,在预测值与传感器实测值的比较中,会估计出一个最优值进行输出。
这意味着,如果一个传感器总是给出良好的、一致的值,开始告诉你一些不太可能的事情,那么传感器的可信度等级会在几毫秒内降低,直到它重新开始讲道理。
这比简单的平均或投票要好,因为Kalman滤波器可以处理大多数传感器暂时失常出错的情况,只要一个人能保持良好的理智,那么它便能让机器人度过黑暗的时刻。
Kalman滤波器是Markov链和Bayesian推理的更一般概念的应用,这是一种数学系统,它们使用证据迭代地改进他们的猜测。这些工具是用来帮助科学本身检验思想的工具(也是我们所说的“统计意义”的基础)。
因此,可以诗意地说,一些传感器融合系统正在以每秒一千次的速度表达科学的本质。
Kalman滤波器已经被用于空间卫星的轨道站保持几十年了,由于现代微控制器能够实时运行该算法,它们在机器人学中正变得越来越流行。
②、PID过滤器
而更简单的机器人系统具有PID过滤器。这可以被认为是原始的Kalman滤波器——所有的迭代调整都被砍掉,用三个固定值代替。
即使PID值是自动调整或手动设置的,整个“调整”过程(调整、飞行、判断、重复)都是Kalman的外部化版本,由人执行信念传播步骤,但其基本原则仍然存在。
③、自定义过滤
真正的过滤系统通常是混合体,使用了以上两种滤波方式。
完整的Kalman包括对机器人有意义的“控制命令”术语,比如:“我知道我把方向盘向左转了。指南针说我往左走,GPS认为我还是直行。我相信谁?”
而当经典的最简单的控制回路Kalman滤波器应用在恒温器上时,它可以通过摆弄旋钮,等待发生什么来判断温度计和加热器的质量。
单个传感器通常无法影响真实世界,因此可以通过多个传感器,并应用算法,进行交叉检查以提高测量准确性。
传感器融合的本质——权衡各个传感器
在本文的其余部分,我们将关注物理位置,但同样的想法也适用于任何你想测量的量。你可能会认为多个相同类型的备用传感器是可行的,但这常常以不幸的方式结合了它们相同的弱点。
相比之下,混合系统才更强大。没有任何一种传感器可以让我们百分之百信任,因为每一个都只解决了一个问题,呈现不同片段,而结合起来才能看见真相。
让我们来看看在四旋翼机上使用的一些典型传感器,并讨论它们的优势、弱点以及其在传感器融合中的发挥的作用。
全球定位系统
GPS具有显而易见的局限性。采样误差可能有两米,偏差也会随卫星漂移。
如果你想用全球定位系统来获得精确到厘米的位置,你需要把它钉在适当的位置,并在几天内进行测量。这明显不是我们想要的。但事实上,在空中高速移动,即使是100Hz的GPS设备也不能进行时间平滑。
GPS也不能告诉你面对的方向,只告知你移动的方向。
另外,Z分辨率(高度)可以是经纬度的十分之一。所以,我们得给地面留出20米的余地。这意味着单靠全球定位系统并不能告诉你你离地面有多远,只知道你离海平面有多远。合乎逻辑的解决办法是在起飞前读取一个读数,但之后我们又有一个20米误差条。而且在飞行中,地面对GPS信号的影响是不同的,所以我们不能假设这些误差会在长期内消除——尽管它们一开始会消除!
显然一个GPS是不够的。
我们不能在离地面20-40米的范围内可靠地飞行,这至少是五层楼的高度,这对于安全边际来说是一个很长的距离。在现实生活中,能在世界上任何一个有20米垂直误差的地方定位自己是非常令人惊奇的…但这并不能阻止我们撞车,如果没有差分GPS地面站,昂贵的高速接收器和一些好的拓扑图。
声纳、激光雷达、雷达/光流
因此,如果用卫星进行三角测量并不是避开地面的最佳方法,那就让我们试着直接“看到”它吧!
目前至少有三种现成的测距技术可以发射信号并查看反弹需要多长时间:声纳、激光雷达和雷达模块现在都可以使用。
但是,这些传感器有弱点:
弱点1:吸收
有些表面就是不反弹信号。窗帘和地毯吸收超声波,深色涂料吸收激光雷达,水吸收微波。你不能逃避你看不见的东西。
弱点2:相干扰
传感器间存在信号干扰,当你把多个相同的传感器放在一起时会发生什么?你怎么知道你检测到的信号就是这个传感器的?即使是单个传感器也必须处理来自自身的串扰,等待足够长的时间让回声消失。
可以对信号进行“编码”(基本上是加密),这样每个信号都是唯一的,但这增加了设备的复杂性。第二个最好的解决方案是将信号计划半随机化,这样就不会锁定时间,并且一直被同步信号欺骗。
光流传感器是一种不同的方法,它使用摄像机来观察镜头中的物体是变大了(表明地面/墙壁正在快速上升),还是变小了(当障碍物消失时),还是向侧面滑动。相机不会像声纳那样互相干扰,如果你真的很聪明,你可以估计倾斜和其他3D属性。
光流传感器仍然存在“吸收”弱点。你需要一个很好的纹理表面让他们看到流动,就像他们的光学鼠标不能在玻璃上工作一样。它们正变得越来越流行,因为流计算现在已经是你可以放入FPGA或快速嵌入式计算机中的东西。
最后一个问题是几何问题。假设物理传感器在四边形上飞行。如果你站在一个角度上,毕达哥拉斯说地面看起来会比实际距离更远。倾斜得足够大,我们根本看不到它,尽管我们离撞车只有几厘米远。
为了纠正这一点,我们需要知道我们的倾向。这意味着……
陀螺仪和加速度计一起被称为"IMU",但它们经常出现在一起的原因是它们自然地掩盖了彼此的主要弱点。它们是经典的融合对。
但是,单独来说,陀螺仪是最好和最干净的传感器数据来源,你将得到连续的位置测量。
无需太多细节,陀螺仪是由刻蚀在芯片表面的微机械音叉制成的。当芯片旋转时,一些音叉上会有力,它们会相互改变音调。
MEMS陀螺仪几乎不受任何运动的影响,除了旋转。即使是剧烈的振动也不会影响它们(在规范范围内),因为这是横向加速度。
如果你看一个多旋翼的内部控制回路,它就是飞行控制器用来在空中保持水平的陀螺仪。一些速率模式的飞行员完全关闭加速度计,给陀螺更多的带宽,因为陀螺仪有很多重要的线索。
如果你知道半毫秒前你在哪里,你想知道此后发生了什么变化,那么陀螺仪是快速、准确和可靠的。且他们不需要有弹性的表面或卫星。
陀螺的弱点是漂移。不管你怎么努力,它们似乎都会绕着一个随机的轴慢慢旋转。每次旋转需要几分钟,但即使是一块不动的砖块也会轻轻旋转。累积相对样本以获得“绝对”估计值也会将误差条相加。上升陀螺仪误差需要通过外部绝对参考标记定期“归零”。
加速度计
这就是为什么加速度计是陀螺仪最好的朋友:因为它能探测到绝对的“向下”参考(至少,当它们处于地球引力状态时)。
好吧,一般来说。从一个时刻到另一个时刻,它接收重力、线加速度、旋转产生的离心力、振动、噪音,当然还有传感器的缺陷。
因此,尽管高采样率和良好的MEMS传感器精度(通常与陀螺仪一样好),加速度计数据仍然是噪声最大、最不可信的数据之一。它接收到了多个必须消除歧义的“信号”。但正是对所有这些不同信号的敏感性使它变得如此通用——它能听到一切。
加速度离我们真正想要知道的位置还有两个积分步骤,所以我们必须总结大量的三角洲和误差线,从测量的加速度到估计的速度,然后我们必须再做一次才能得到估计的位置。错误不断累积。
这就是为什么GPS是加速计最好的朋友:因为它会定期“调零”不断增长的位置误差,就像加速计轻轻地调零陀螺仪的方位误差一样。
磁强计
好的指南针不应该被忽视。然而,与加速度计一样,它通常被用作长期陀螺漂移的一种控制方式。知道哪个方向是向上的比知道哪个方向是磁北更有用——但是,有了这两个,我们就可以知道我们在地球上的真正绝对方位。
它们经常与GPS接收器配对,因为它们又一次对抗了彼此最大的弱点,而在其他方面却紧密相配。一个给出粗略的绝对位置,另一个给出粗略的绝对方向。
结语:
“传感器融合”现在显然只是一个过程,即获取所有这些输入,并将它们连接到类似Kalman滤波器的东西上。请注意,我们想知道的是“真相数据”,不是我们的任何传感器直接测量的,“真相数据”是可以推断出来的。
Kalman滤波器之外的逻辑阶段是隐马尔可夫模型(HMMs),我们通过说有一个称为垂直高度的“隐藏”属性来调用它,而我们并没有直接观察到它(尽管有许多测量结果间接地表明了它是什么)。在收集了足够的证据之后,尽管样本数据很嘈杂,我们还是可以非常确定答案的真实性。
当你把所有的传感器数据拉到你的主微控制器里,然后在那里做数学运算,但是要非常小心时间混叠效应。如果一个传感器的时间相对于其他传感器偏移,那么融合结果会以奇怪的方式输出。
想一想,如果你有一个传感器块,你滑过一张桌子,但在一半的时候,你将它翻转90度。
IMU应该看到“侧向滑动,旋转90度,向上滑动”——将其整合到空间中的真实位置,你应该得到一条平坦的直线。但如果“翻转90”陀螺仪信号延迟(或只是时间戳不好),则加速度计矢量不会在每一瞬间都正确地旋转回工作台的平面上,当运动“泄漏”到错误的轴上时,会有一些垂直漂移。不是因为传感器的任何误差,而是纯粹因为处理顺序。
这就是为什么有些厂商做IMU要做全产线。陀螺仪和加速度计和外部磁强计都自己做,以保证时间不混叠。融合后,IMU向微控制器报告一个理想化的运动矢量,从而得到更一致的结果。当然,总有一个折衷:融合的运动更新(至少对于这个芯片来说)比原始值来得慢。
如果你认为控制过滤器过于复杂,更相信原始传感器,那么大可不必做融合。但如果你想要的是精确(或者你只关心最终答案),那就让芯片为你融合吧。