提供符合产业发展的课程内容,是曾益慧创赋能高校工程教育的手段之一。近几年以来,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和QUBE实现MQTT IoT系统教学实验
接下来,我们将利用myRIO和QUBE-Servo 2实现一个基于MQTT的IoT系统,这个IoT系统中包含2个被控制的倒立摆对象。这个IoT系统的架构如下图所示:
这个IoT系统包含了4个节点:Broker节点、控制节点、Servo节点0和Servo节点1,其中Broker节点和控制节点运行在同一台计算机上(也可以运行在不同计算机上)。
这个IoT系统要实现的目标是驱动倒立摆起摆(摆杆初始位置是在最下端,悬挂)到竖直倒立位置,一旦摆杆平衡,把摆杆下面的旋转臂旋转到70度位置。下面图中的有限状态机展示了这个IoT实验的设计思路。
如果用户把摆杆下面的旋转臂旋转到中心位置,则控制旋转臂旋转到-70度位置停留。如果其中的一个倒立摆摆杆失去平衡,则使得两个倒立摆的平衡控制器都失效,一旦两个摆杆都静止不动后(回到初始状态),起摆动作再次开始,即状态机中的DOWN,SWING UP,MOVE和STOP流程再次开始启动。
控制节点和每一个Servo节点的指令更新时间是10ms,并不需要达到非常实时的性能。每一个Servo节点通过一个myRIO实现起摆和平衡控制器,myRIO基于运行在双核ARM Cortex-A9处理器上的Linux实时操作系统以250Hz(4ms循环速率)速率来运行起摆和倒立摆平衡控制器。
在这个IoT系统场景中,“Internet of Things: A Survey on Enabling Technologies, Protocols, and Applications”论文中讨论的IoT应用系统的不同组成部分基本都涵盖到了。
每一个Servo节点的识别通过IP地址实现,这个场景中的智能设备是QUBE-Servo 2 + myRIO。QUBE-Servo 2中包含一个直流电机来驱动摆杆下面的旋转臂,旋转臂和摆杆的偏转角度通过编码器来测量得到。QUBE-Servo 2上还有一条LED灯带来表现设备的状态。QUBE-Servo 2直接连接到包含了以太网/USB和Wi-Fi连接方式的myRIO嵌入式平台上。Servo节点运行在myRIO处理器上,控制节点运行在计算机的CPU(Intel或者AMD处理器)上,每个节点间的通讯消息通过TCP/IP网络协议完成。MQTT的通讯机制通过Quanser专门开发的中间件软件“邮政服务”来实现,这是一个类ROS的框架。
上图中展现了该IoT系统中的MQTT消息传递。控制节点从Broker节点上订阅了传感器数据主题,并且基于传感器得到的测量结果发布指令主题。控制节点可以接收到所有连接到Broker上的Servo节点的传感器数据。Servo节点发布的旋转臂和摆杆的测量位置,是通过Broker上的传感器数据主题订阅实现的。在这个IoT系统中控制和Broker节点都是运行在同一台计算机上的,当然Broker也可以运行在一个云服务器上,这样就可以通过云来传递每个节点间的消息。
上图中对指令主题和传感器主题的数据结构进行了说明。传感器数据主题中,包括旋转臂和摆杆的测量位置以及摆杆的能量。指令主题中包括了使能信号、用于控制直流电机的电压或者指令以及LED灯带的颜色信息(用于表明QUBE的状态)。
3 - 这个MQTT IoT系统教学实验的学习产出
开发一个与机电一体化或者控制系统相关的IoT应用系统,需要掌握许多的技能,比如:
1. 仪器使用:知道如何使用LabVIEW通过myRIO和QUBE-Servo 2进行交互,包括知道如何通过软件校准位置编码器和直流电机等;
2. 建模和控制系统设计:如何设计和基于摆杆平衡控制器实现起摆及状态反馈控制;
3. 快速控制原型软件:对于机电一体化的IoT应用,在诸如MATLAB/Simulink和LabVIEW的软件平台中实现控制算法是很常见的情况,可以节省在编程方面花费的精力;
4. 嵌入式系统:在这个IoT系统中,myRIO被用来处理和传输传感器的数据,其他的一些微控制器,例如树莓派或者Arduino也有可能被使用。了解这些控制器的使用非常重要;
5. 程序设计:使用诸如有限状态机(FSM)的编程设计技术来设计IoT应用;
6. 网络:知道不同的网络拓扑结构并且知道如何搭建它们。在这个IoT系统中,涉及到了如何搭建和配置一个基于TCP/IP的网络系统来连接所有不同的设备;
7. IoT应用通讯协议:学习如何使用MQTT通讯协议,包括决定主题的结构,用中间件来编程MQTT,以及设置不同的节点。
进一步扩展,还可以在这个IoT系统中,引入诸如关于网络安全的问题。由于这些平台(myRIO,QUBE-Servo 2)的开放架构,使得它们可以被自定义二次开发,比如实现诸如SSL或者TLS的安全协议应用。
本文内容参考文献资料:
[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