使用人工智能传感器在边缘做出决策
扫描二维码
随时随地手机看文章
有多种方法可以为工业系统增加更多的智能,包括与具有模拟和数字组件的传感器相匹配的边缘和云人工智能(AI)。通过AI方法的多样性,传感器设计师必须考虑一些竞争要求,包括决策延迟,网络使用,功耗/电池寿命以及适合机器的AI模型。上一篇文章的重点是Voyager4的概述和硬件设计:一个无线,基于AI的条件监视传感器。本文将重点介绍为智能边缘传感器创建的软件体系结构和AI算法。将描述用于Voyager4上AI模型开发的完整系统级方法。
条件监控传感器的软件设计
Voyager4是一个由模拟设备开发的无线状况监视平台,使开发人员能够快速部署和测试机器或测试设置的无线解决方案。汽车健康监测解决方案(例如Voyager4)在机器人技术和旋转机器等领域(例如涡轮机,风扇,泵和电动机)都使用。
为这种无线边缘设备开发软件可能很困难。从传感器设计的早期开始,开发人员必须考虑整体系统体系结构,考虑系统的各个部分将如何运行,如何集成不同的组件以共同工作,以及如何应用和部署诸如神经网络之类的有用算法和分析工具,以将智能添加到优势。
任何此类项目的目标是为边缘设备和连接的主机创建软件,该软件易于理解,可修改和升级。在Voyager4中,有两个微控制器和许多外围设备,包括传感器,电源管理板,闪存和通信接口。开发控制和组合这些部分所需的代码是一项艰巨的任务。
本文的希望是,通过展示Voyager4开发过程中使用的设计过程,强调所采取的步骤并给出一些具体的实现示例,读者可以更好地了解如何开发其边缘传感器。
概述
虽然此处给出了Voyager操作的简要回顾,但请参阅文章系列的第1部分,以获取有关条件监视传感器的更多信息,以及有关Voyager4 Project的独特硬件,功率和安全功能的更多详细信息。
Voyager4的传感器操作原理,ADXL382三方8 kHz数字微电机电系统(MEMS)加速度计用于收集振动数据。基于操作方式,收集的数据可能遵循几个不同的路径。
路径A是最初将原始振动数据直接发送到Max32666蓝牙®低能(BLE)处理器的路径。从这里,数据可以通过BLE收音机或通过USB发送给用户。路径B是一种替代操作方式,一旦使用Voyager收集原始数据,并且使用Max78000外部工具训练了模型。数据不是发送给用户的,而是传递到Edge AI算法以预测机器数据有故障的。路径C和D覆盖分别检测到电动机故障或未检测到的用例。如果检测到故障,则可以通过BLE处理器发送标志或用户警报到主机。如果未检测到故障,传感器将返回睡眠模式,直到下一个检测事件。
该体系结构是Voyager4的软件和AI算法开发的重点。有关对该体系结构的完整系统级别的理解,本文将讨论:
· BLE术语
· 实施BLE周围
· BLE中央的实施
· 培训和部署AI算法
BLE背景
在设计工业边缘传感器时,连接性是关键设计因素之一。这会根据可用的功率/所需的功率,从而影响从范围和可靠性到设备的整体寿命和大小的所有事物。如表1所示,与其他连接标准相比,BLE具有一些独特的优势。 BLE的范围,功率和可靠性对于我们的工业监测用例尤为重要。要了解BLE边缘设备的设计和开发,您必须首先了解任何BLE项目使用的一些基本术语。
对BLE所提供的所有内容的详尽解释将填写一本书,因此本文重点介绍了实施BLE设备的任何人都需要考虑的一些关键概念,即:
· 软件堆栈
· 外围/中央模型
· 协议和配置文件
BLE软件堆栈
BLE软件堆栈是标准协议的集合,必须由设备实现,才能将其视为BLE兼容。通过说明堆栈中的不同协议是如何分层的,可以更容易地理解该名称。高级功能(例如用户通信和设备连接)由负责基本任务(例如数据封装和解析)的低级协议支持。
幸运的是,对于开发人员来说,对堆栈组件的基本了解通常足够,他们可以从已实现自己的版本的一系列硬件设备中进行选择。这要求用户简单地开发应用程序的一部分,该应用程序将在使用预构建的BLE堆栈时控制设备本身。
BLE堆栈通常表示为三个不同的部分:应用,主机和控制器。应用程序将接口定义为用户和用户正在实现的特定应用程序代码(振动监视)。主机是指BLE软件堆栈的上层,该堆栈控制着高级功能,例如配置文件和协议。控制器指的是BLE堆栈的下层,该层涉及链路层和物理层(如2.4 GHz无线电本身)。对于此项目,选择了MAX32666 BLE微控制器。这是一个低功率ARM®Cortex® - M4微控制器,具有蓝牙5 LE无线电,并支持远距离(4×)和高数据吞吐量(2 Mbps)。
外围/中央模型
BLE设备可以根据其作用定义为外围设备或中心。由于数据可以在两个方向上流动,因此两者之间最大的区别之一是它们的连接方式。连接之前,外围设备宣传其连接的可用性。中央设备扫描可用的外围设备以连接并启动连接。数据可能在外围和中央之间的两个方向上流动,但中心被视为主机。较旧的BLE参考文献还分别将外围设备和中心作为服务器和客户。
在我们的系统中,Voyager平台被定义为我们的外围平台,它收集并将数据发送到中心。对于这个项目,为了简化开发并易于理解,最初的重点是与单个外围交互的最简单情况。
协议和配置文件
协议和配置文件是蓝牙命名术语的易于混淆的部分。简而言之,协议是定义设备操作的基本功能构建块:数据封装,格式,路由等。配置文件是功能捆绑,结合起来以启用基本的操作模式。它本质上是实现一定总体功能的协议的组合,例如,电池服务配置文件可用于询问设备的剩余电池。必须由所有BLE设备实现所有重要的通用访问配置文件(GAP)和通用属性配置文件(GATT),以允许它们连接到其他BLE设备。 GAP涵盖了低级功能 - 广告,设备发现和管理连接。 Gatt管理高级数据组织并在设备之间传输,允许他们在建立的连接上读写。
其他配置文件是可选的附加组件,可用于诸如接近度配置文件之类的设备。这包括由蓝牙特殊兴趣组(SIG)创建的预定义配置文件。在开发典型的设备(例如智能手表或智能电表)时,使用预定义的配置文件可能很有用,但是对于实现大量自定义功能的设备可能会限制。
还允许使用蓝牙SIG定义的自定义配置文件,以便携性成本以更大的设计灵活性。每个配置文件将其数据组织到服务中,该服务由几个特征组成。
当中央和外围设备之间形成连接时,中央设备可以请求与该外围设备相关的配置文件和服务。显示了Central要求时的差距,GATT和自定义配置文件(及其服务)的结构。
对于Voyager,除了用作命令服务器的单个自定义配置文件之外,我们还定义了基本差距和GATT配置文件,其中处理了中央的命令并返回数据或更新外围设备本身的配置。
固件实现
BLE微控制器是系统的核心,可确保来自所有外围传感器和设备的数据可供连接的BLE Central检索或修改。
设备配置
在Max32666上预先构建了BLE堆栈,我们通过填写相关配置功能来构建外围设备的外观。例如,我们为扫描数据发现阵列提供了数据长度,广告类型和字符列表,每当Voyager供电时,我们的外围设置功能都会在我们的外围设置功能中调用。
这样的BLE设备将具有大量的配置设置,包括收音机和返回数据类型的传输功率。建议从您使用的硬件可用的任何预构建示例开始,然后从那里进行自定义修改。 Max32666为BLE数据服务器(外围)提供了一个示例代码,称为BLE DATS,该代码被用作Voyager项目的基础。配置后,当中央扫描可用设备时,外围的名称出现为Voyager。这也可以用来过滤搜索列表,以便中央仅显示预期名称的设备。设备名称与设备MAC地址和接收的信号强度指示器(RSSI)一起显示。
堆栈中的其他配置设置控制设备其他模式的预期名称和行为,例如制造商ID,对读/写命令的响应,等等。
命令服务器
由于串联设计了Voyager4应用程序的中央和外围侧,因此可以通过使用带有单个BLE服务的自定义配置文件来简化外围界面。此配置文件将负责从中央设备接收命令,并以加速度计数据,温度数据和其他设备信息的形式返回响应。
这项单一的自定义服务是在像Voyager一样复杂的设备中进行通信的非正统服务,但有一些好处。它可以使Voyager版本之间的向后兼容性提高命令灵活性,因为使用字符串作为命令输入到Voyager外围设备的命令输入允许根据数据解析的方式来获得各种命令类型和值。
一旦在外围和中心之间形成了连接,建立双向通信,中心将向图11所示的自定义特征发出通知命令。这将在外围侧建立通知系统,并在中心侧分配相应的回调函数。这意味着任何时候分配给该自定义特征的更新数据,通知中心设备,传输新数据并触发中央设备的回调函数。
固件体系结构
硬件图显示了Voyager中包含的内容数组以及相对数据路径和电源。大多数软件开发都在BLE微控制器上进行,因为它是指挥中心,将BLE接口与设备的BLE接口以及传感器和微控制器数据的内部管道进行协调。为了与系统中的不同传感器和微型相互作用,我们必须开发用于BLE微控制器使用的设备驱动程序,以及AI微控制器,如AI部分所述。实际上,这些驱动程序的开发和集成是连接边缘传感器所需的大部分编码工作。
编写便携式代码
在开发固件时,我们将代码分为几层抽象,将一个特定微控制器的特定细节与应用程序和驱动程序代码分开。这是一个很好理解的问题,除应用层外,通常通过将代码责任分为三个不同的层来解决。这些是硬件抽象层(HAL),董事会支持软件包(BSP)和驱动程序层。
HAL为程序提供了一种与不同硬件进行交互的程序,而无需了解每个设备的详细信息。 BSP定义了与硬件有关的软件,驱动程序层定义了单个设备(例如寄存器映射)的更细节。例如,在Voyager中,我们有两个微控制器,最大32666用于BLE连接,Max78000带有机上卷积神经网络(CNN)加速器。如图10所示,Voyager中的HAL定义了最基本的通信命令,这些命令将由MicroControllers,SPI和I2C使用。例如,任何设备驱动程序发出的任何SPI呼叫最初都会将责任推迟到HAL中的SPI函数,然后查找BSP的特定信息,以使用该微控制器使用正确的SPI命令。
系统中每个板的HAL保持不变,但是每个微控制器都会更新BSP。 BSP还负责定义系统的通用构建块,该块将应用程序从所使用的特定设备中调用。在图10中,BSP中的main_adxl块是所使用的基础加速度计的抽象。在BSP层中定义了任何加速度计(例如初始化和读取)的通用命令,而在ADXL382块中的驱动程序级别上定义了诸如get_raw_xyz_data之类的低级功能。将驱动程序代码从MAX32666移植到Max78000微控制器时,加速度计代码仅与加速度计本身相关,因此保持不变。唯一更新的文件允许与新的微控制器进行通信,在BSP层内。
在更换或升级系统中的零件方面,这也具有明显的好处。 Voyager中的一个真实例子是决定升级所使用的主要加速度计。在这种情况下,仅更新了驱动程序层中的代码,从而简化了维护,修改和测试。
数据管道和中央
尽管可以根据要求提供温度和电池信息,但Voyager的主要角色是条件监视器和振动传感器。我们在数据吞吐量和必须发送数据的频率方面的要求将集中在振动传感器和典型的状态监视设置上,例如,每天一次进行一次简短的测量。 BLE不允许高数据吞吐量。 ADXL382是一个高带宽,3轴加速度计,每轴每秒收集16,000个样本,以高性能模式。有一些可用的选项,可根据系统中包含的组件发送数据。
发送实时数据
没有任何形式的缓冲,请在中央请求时立即发送数据。尽管这是一种演示模式,但实时展示了高性能加速度计数据,但随着生成的数据量超过可以发送的速率,电池会很快消耗或丢弃或损坏。
从内存发送数据
另一个选择是将数据保存到闪存。这样,我们可以安全地记录加速度计数据,而不必担心覆盖先前的值。然后,保存的数据将直接发送到中央或从中央接收命令后报告。由于该系统不再是实时的(数据可能是几分钟甚至几天),因此我们还可以利用数据包的BLE确认系统,确保数据到达中心完全完整,并重新保存任何丢失的数据。
对于典型的工业状况监测设置,该解决方案更为实用,但是该设备的电池寿命大多浪费了每天不会改变太大的振动信息。
在边缘进行分析
为了节省电池寿命,最好在边缘进行一些分析,以确保仅通过无线电链接传达相关数据。当然,仅当在边缘创建有意义的见解所需的功率明显少于通过BLE发送数据所需的功率(有关此信息的更多信息,请参见本文系列的第1部分)。
您可以看到加速度计具有两个微控制器的直接数据路径。在我们将在边缘进行一些分析的用例中,AI微控制器可以直接从加速度计读取振动数据,并使用板载AI模型进行分析。
设计中央用户界面
由于BLE周围是与Voyager外围的同时设计的,因此两者的相互作用方式具有很大的灵活性。通常,中央设备需要扫描并连接到Voyager外围设备,然后发送字符串命令并处理其返回值。初始连接后,所有BLE命令将直接发送到外围的自定义服务以进行解析。在这种情况下,中心是用Python编写的Windows PC上的图形用户界面(GUI),并利用BLE外围图书馆(Bleak)发出标准BLE命令。 Bleak是在Python标准的Asyncio库的顶部建造的,允许BLE命令异步运行,从而确保用户界面保持可互作用且不会冻结。
当GUI成功连接到外围设备时,将自动发出通知命令,将自动发出Voyager的单个自定义特征。这确保了此特征的任何更新都向中央报告。这很重要,因为进一步的命令获得了航行者的确认或回应,指示他们是否成功地进行了。
数据是如何请求的?
始终使用简单的字符串命令请求数据。例如,Central可能会发出SetPhy 2命令,以指示Voyager使用其2M收音机,这可以以某些范围和可靠性为代价更快的数据通信。外围设备解析此命令以确保其有效,然后以2个输入值为2的内部setPhy函数以切换所使用的无线电。如果Voyager成功地执行了此功能,则将返回:OK命令发回中央设备并显示给用户。
解释加速度计数据
在接收数据之前,GUI的用户可以选择使用SetAdxlCFG命令配置连接的Voyager的加速度计。一旦周围发出开始命令,加速度计数据的流量从外围到中心开始。默认情况下,中央设备和外围设备在实时数据模式下运行,因为这对演示目的很有用。
在外围方面,内部第一局(FIFO)缓冲区以用户指定的采样率填充了最新数据。 FIFO填充后,将在Voyager自定义服务上放置一个标志,并通知外围有新数据可用。然后,数据被周围发送并解析为三个轴的加速数据的格式阵列:x,y和z。数据始终绘制,用户可以选择选择一个保存数据选项,该选项也将相同的数据保存到CSV文件中以进行以后分析。
AI算法设计
该项目的目的是检测汽车的健康何时开始降解。边缘的AI分析旨在基于一个或多个输入(包括音频,温度和振动)来代替或补充数据分析,以创建运动健康的指标或表征。到目前为止,振动是当今状况监测应用程序中最常使用的振动。
输入
许多Edge AI处理器往往是相当渴望的,它与任何无线状况监控解决方案的目标之一相反:长期设备寿命。 Max78000(如前所述)可以使快速,低功率的AI推断总体上使用比使用BLE无线电更少的功率。但是,在使用低功率边缘AI处理器时,请记住,我们的神经网络的大小不能超过董事会的规格。该板配备具有512 KB数据存储器的CNN加速器。它主要用于对象检测,音频处理和时间序列数据处理。
随着时间的推移,我们解决方案的可用数据是加速度。为了最大程度地提高受过训练的算法的性能,试用了几种预处理方法,以确定哪些对准确性的影响最大。
训练
通过“模拟设备AI” Github在线描述了培训和部署神经网络向Max78000进行培训和部署的过程。通常,首先使用Pytorch®和TensorFlow®等传统工具集在主机PC上创建模型。该模型需要训练数据,这些数据必须由目标设备保存并转移到PC。输入的一个小节成为训练集,专门用于训练模型。进一步的小节成为验证集,用于观察训练过程中损耗函数(衡量网络性能的度量)的变化。
根据所使用的模型类型,可能需要不同类型和数量的数据。如果您希望表征特定的电动机故障,那么您正在训练的模型将需要标记的数据,除了存在不存在故障的健康振动数据之外,还存在不同故障时,概述了振动。
Voyager最初是由自动编码器型神经网络开发的。自动编码器不需要数据即可拥有任何标签来学习如何对其进行分类。尽管这种类型的模型不适合复杂的故障分类,但它可以快速训练,并且仅使用客户已经拥有的数据,例如健康的电机数据。
在每种情况下找到理想的数据要培训是独有的,需要足够的数据来了解健康运动数据的一般趋势,而无需将数据过度拟合到培训输入中。使用Voyager部署的默认示例经过仅
30秒的健康加速度计数据培训。存在相同数量的具有不平衡故障的数据进行验证。使用Python GUI直接将两个数据集直接保存到训练PC中。
在用于训练模型之前,对输入数据进行了预处理。然后,训练脚本会顺序进行训练的几次迭代,并选择表现最佳的模型。为了测试目的,需要一些故障输入数据。您不能在没有首先测试错误数据的情况下对健康数据进行训练,并表达对结果的信心。
如何部署算法?
一旦训练了模型,就必须使用ADI的在线工具集对其进行量化和合成。量化通过舍入或截断将生成模型的权重调整为较小的垃圾箱,从而减少存储模型所需的内存。将神经网络部署到较小的边缘设备时,这是一个标准过程。合成将量化模型转换为C文件,这些模型可以由微控制器理解。
生成三个文件,然后将其复制到微控制器的活动项目中,并加载下一个固件更新。其中两个文件(CNN.H和CNN.C)包含寄存器写入CNN配置和已加载模型的其他有用功能。第三个文件(weights.h)包含训练有素(和量化的)模型权重。
一旦加载了新的固件,要么通过对调试端口的有线更新或无线更新(OTA)更新,该模型已被部署,并且可以由BLE MicroController查询,以根据需要进行AI推断。
部署后如何使用它?
部署了新的固件后,AI微控制器将作为有限状态机操作,接受并对BLE控制器的命令反应SPI。
当请求推理时,AI微控制器唤醒并从加速度计请求数据。重要的是,它与培训中使用的时间序列数据执行相同的预处理步骤。最后,此预处理的输出被馈送到部署的神经网络,该网络可以报告分类。
作为节省电池的措施,AI微控制器旨在自动对唤醒发出推断,这使BLE微控制器只有在需要分析时才能为其供电。
在典型的设置中,BLE微控制器每天可以在短时间内从低功率睡眠模式中醒来,请求AI推断存在加速度计数据,并返回其睡眠模式,如果数据不通过用户设定的标准,例如模型,该数据显示数据看起来健康的确定性为99%。在相反的情况下,数据看起来异常或不能自信地识别为健康的地方,BLE微控制器可以连接到附近的BLE主机并共享数据。通过这种方式,边缘的分析消除了理解主机系统数据的负担,从而节省了电池寿命。
结论
在本文中,我们介绍了Voyager4,这是一种无线振动监控系统,该系统采用边缘AI分析来改善其智能和寿命作为条件监控工具。设计有效的条件监控传感器需要几个考虑因素。我们讨论了Voyager4的硬件信号链以及用于集成不同系统元素的固件,除了设备的外部外观作为外围外观。我们还探索了在Voyager中使用AI的使用,对如何考虑开发和部署边缘AI模型有一些见解。