提供符合产业发展的课程内容,是曾益慧创赋能高校工程教育的手段之一。近几年以来,IoT一直是一个非常热门的技术,它已经被运用到了包括智能家居、医疗保健、农业以及交通运输等许多应用中。在一个万物互联的时代,IoT系统被快速地开发和运用到不同的领域中,IoT工程师需要具备一系列的技能来快速设计和开发IoT系统。那么我们如何来培养这些面向未来的IoT工程师呢?这篇文章中给出了一些开发IoT系统需要学习的重要技能,并且在一个特别设计的IoT系统教学实验中体现了对这些技能的培养和运用。
1 - IoT系统的组成部分和应用协议?
针对不同的应用场景,IoT的架构和实现会有所不同,但是基本上IoT可以被描述为一个分布式的智能系统。智能系统是一个具有传感、处理和通信能力的设备。这些智能系统间,通过一个服务器、云、或者是直接地进行通讯,以完成特定的任务。
参考2015年IEEE的一篇题为“Internet of Things: A Survey on Enabling Technologies, Protocols, and Applications”的论文(2317 Paper Citations,5 Patent Citations,99713 Full Text Views),作者在文章中讨论了IoT应用系统的不同组成部分以及其中可以被使用的不同通讯协议。基于文章中作者讨论到的这些不同元素,下图突出展现了一个普遍的IoT系统中所具有的不同特性。
IoT系统中的智能设备通常通过设备的产品序列号或者是IP地址被识别出来。另外,这些智能设备需要包含不同的传感器或者执行器,比如需要一个惯性模块单元(IMU)来测量加速度。而且,这些IoT系统中的设备所使用的处理器也可能是不一样的,比如云服务器可能是使用运行在Intel处理器上的Windows操作系统,然后其中的智能手机可能会使用基于ARM架构处理器的Linux或者Darwin系统。通讯协议用来把所有的设备连接在一起,比如通过Wi-Fi网络的UDP。另外,通讯协议也有可能直接被实现或者通过中间件实现。
有许多不同的通讯协议被用来实现IoT系统。NI在一篇名为“A Practical Guide for Connecting LabVIEW to the Industrial IoT”的文章中广泛讨论了IoT应用中的各种主流通讯协议,比如HTTP,Web Socket, Data Distribution Service(DDS),Message Queuing Telemetry Transport(MQTT),和Advanced Message Queuing Protocol(AMQP)。这些协议在网络协议(TCP/IP或者UDP)、服务率质量、安全性和消息系统上都有所不同。
在机器人、控制系统和机电一体化应用中,一个主要的要求是实时或者接近实时的性能。所以,在这一类的IoT系统中的智能设备之间的消息读写速度需要在ms到us的范围内。这就使得DDS和MQTT两个协议,在机电一体化相关的IoT应用中,得到了广泛的应用。而基于Web的协议,比如HTTP、Web Socket或者AMQP对于机电一体化的IoT应用而言,显得太慢和不稳定。而对于DDS和MQTT两个协议而言,在实现机电一体化IoT应用时,也有各自的优势和适用场景:MQTT的可扩展性和容量会更好,但是由于MQTT是一个中心化的协议,对Broker的依赖很强,如果Broker出现问题,将导致整个IoT系统瘫痪;DDS的优势在于节点间的通讯性能和可靠性,由于DDS是一个去中心化的协议,节点和节点之间可以实现直接通讯,所以系统中的一个或者多个节点出现问题,并不一定会导致整个IoT系统瘫痪,这也使得节点和节点间的通讯有更快的响应时间。
2 - 基于myRIO和AERO实现DDS IoT系统教学实验
接下来,我们将利用myRIO和AERO实现一个基于DDS的IoT系统,这个IoT系统中包含2个被控制的旋翼机对象。这个IoT系统的架构如下图所示:
DDS IoT协议被用来实现一个“主-从”IoT实验,基于2个桌面级的2-自由度旋翼机系统AERO+myRIO。在这个系统中,有三个节点:主节点、AERO节点1和AERO节点2。他们之间通过TCP/IP网络连接。
由于这个系统使用的是DDS框架,所以其中没有Broker或者服务器来管理主题列表。每个节点可以直接进行通讯。AERO的飞行控制器是在本地的myRIO处理器上实现的。用户通过一个操纵杆来给每个AERO节点输出倾斜和偏航角度,控制指令从PC上被频繁的发送。这也导致了主节点和AERO节点接近实时的性能,这也是选择使用DDS的原因。本地myRIO上实现的飞行控制器以250Hz的速率运行。
上图中的有限状态机(FSM)展现了这个IoT系统的运行逻辑。在正常操作模式下,每一个AERO从主节点(使用操纵杆)上收到倾斜和偏航控制指令。如果其中任意一个AERO的偏航角度超过了+-70度,那么这个AERO会变成“主-从”系统中的主机并且把自己的姿态调整为初始状态(倾斜和偏航角度都为0度),另一个AERO就变成“主-从”系统中从机并且跟踪主机的位置。主要AERO节点的姿态在+-70度之内,他们就都从主节点获取控制指令。
上图中突出表明了这个航空IoT系统的不同组成部分,这也是基于“Internet of Things: A Survey on Enabling Technologies, Protocols, and Applications”论文中提到的架构。每一个节点通过设备的IP地址被识别。AERO中有一个惯性测量单元(IMU),其中包含一个三轴陀螺仪和一个加速度计,同时还有用于直接测量倾斜和偏航角度的编码器。每一个转子被一个直流电机驱动,设备上有一个三色LED灯带用于指示设备的状态(比如谁是主机,谁是从机)。和MQTT倒立摆系统一样,myRIO直接和AERO连接。myRIO中包含一个双核ARM Cortex-9处理器,运行Linux操作系统。主节点运行在PC上。
消息的发布和订阅机制被使用在DDS框架中,但是每个节点之间的信息是直接交换的,并不通过服务器。因此,订阅器需要知道如何去识别发布器节点以读取信息。不同于MQTT,订阅器向Broker请求一个主题即可,而不必知道如何去识别一个特定的发布器节点(比如,它们只需要Broker的IP地址)。每一个AERO节点发布它们自己的倾斜和偏航角度测量数据到传感器数据主题,并从主节点订阅控制指令主题。AERO节点的IP地址包含在主题中,这样主节点就知道每一个AERO的状态并可以向它们发送控制指令了,如下图所示:
3 - 这个DDS IoT系统教学实验的学习产出
这是一些开发这个与航空应用相关的IoT应用项目需要掌握的技能:
1. 仪器使用:知道如何使用LabVIEW通过myRIO和AERO进行交互,包括知道如何通过软件校准用于测量倾斜和偏航角度的编码器测量结果和转子直流电机等;
2. 建模和控制系统设计:学习如何设计和实现基于PID算法的AERO飞行控制器;
3. 快速控制原型软件:对于机电一体化的IoT应用,在诸如MATLAB/Simulink和LabVIEW的软件平台中实现控制算法是很常见的情况,可以节省在编程方面花费的精力;
4. 嵌入式系统:在这个IoT系统中,myRIO被用来处理和传输传感器的数据,其他的一些微控制器,例如树莓派或者Arduino也有可能被使用。了解这些控制器的使用非常重要;
5. 程序设计:使用诸如有限状态机(FSM)的编程设计技术来设计IoT应用;
6. 网络:知道不同的网络拓扑结构并且知道如何搭建它们。在这个IoT系统中,涉及到了如何搭建和配置一个基于TCP/IP的网络系统来连接所有不同的设备;
7. IoT应用通讯协议:学习如何使用DDS通讯协议。
本文内容参考文献资料:
[1] Quanser's perspectives on Internet of Thinks for academic applications, Michel Levis M.A.Sc., Applicaiton Engineer, Quanser
[2] Internet of Things: A Survey on Enabling Technologies, Protocols, and Applications, Al-Fuqaha, Guizani, Mohammadi, Aledhari, & Aledhari, 2015
[3] A Practical Guide for Connecting LabVIEW to the Industrial IoT, National Instruments