基于OpenWrt开源系统的无线视频监控智能车设计
2015-07-02陶文寅
陶文寅
(苏州工业园区服务外包职业学院 纳米技术系,苏州215123)
引 言
随着计算机科学技术的不断发展,各种智能化的设备也应运而生,特别是近期无人遥控飞机新闻的频繁曝光,从明星求婚到快递运送,都体现了无人遥控设备将是未来产业发展和创新应用的一个新起点。然而目前无人机在多数情况下只用于航拍或空中测绘,而对于室内应用,如对无尘、防盗,以及环境参数要求较高的企业仓储管理来说,无人机在续航和室内定向巡航方面就显现出了劣势;而对于如地震、泥石流等自然灾害中常见的狭窄处补给物资的运输和地下生命的探测,无人机的功能则大打折扣。
基于以上这些原因,本文提出了一种基于开源硬件的无线遥控视频监控智能车的设计,把开源硬件和Linux系统相结合,把视频监控车变为一个带WiFi功能的智能设备,用户可以通过合理的系统配置,使智能车加入已有的WiFi网络,从而使用户可以通过无线方式实现对智能车运动的控制和实时视频监控画面的传输,解决了因某些原因导致一些场所无法进入时,对内部环境的监控和物资运输的问题。同时,采用开源硬件也避免了硬件设备高额的设计费用和调试费用,为今后智能设备的开发及应用提供一种新的解决思路。
1 系统总体设计
本设计采用双核、双系统的方式进行架构设计,从而明确各子系统的责任,减轻硬件系统的负担,提高各子系统的内聚性,并降低各子系统间的耦合性。其中,智能车控制系统采用基于AVR内核的ATmega32U4芯片,该芯片的时钟频率为16 MHz,具有20个数字接口、12个模拟接口,以及7个PWM接口,同时内建的USB通信功能可以省去外围电路中UART转USB的设计。而无线视频监控系统则采用目前公认的相对稳定的WiFi解决方案,即Atheros AR9331芯片方案,该芯片采用MIPS架构,CPU主频达到400 MHz,并且只需要3.3 V就可以实现超低功耗的802.11n协议。因此对于本系统来说只需要一个5 V的USB接口就可以为整个系统实现供电以及程序的烧录等功能,使得系统的开发极为方便。
此外在软件运行过程中,用户可以通过智能系统提供的REST API轻松地实现与智能车系统之间的通信,并控制智能车的各种运动、避障,甚至在智能车自动控制和手动控制之间进行切换;同时,在视频监控系统中内建了基于嵌入式Linux的OpenWrt系统,并基于该系统搭建了实时视频传输系统——MJPEG-STREAM,用户只需要使用HTTP接口就可以方便地实现实时图像数据的传输。
硬件方面采用了开源的设计,通过全世界硬件工程师的不断改进和完善,保障了硬件系统的稳定,同时开源设计也节约了大量的前期硬件开发成本,提高了硬件系统的开发效率,降低了开发成本。而在软件方面,其主要特点体现在用户接口上,不论智能车控制系统还是视频监控系统,均采用HTTP通信方式,可以实现对各类终端设备的支持,如移动终端、PC端,甚至Web端。系统结构如图1所示。
图1 系统结构图
2 MJPEG-STREAM视频流的实现
MJPEG-STREAM是一个基于“运动图像压缩技术”的摄像头图像采集系统,并且该系统通过Web方式进行实时图片传输,用户只需要利用浏览器就可以实现视频监控等工作,同时由于该系统采用开源方式进行开发,因此对该系统的任何修改和使用都不存在版权的问题,降低了视频开发的成本,提高了开发的效率。
本项目基于OpenWrt系统对MJPEG-STREAM的构建,而OpenWrt也是一个开源的嵌入式Linux系统,其包含3 000多个软件包,用户只需要通过简单的指令就可以实现软件的下载、编译、安装和使用,具体构建步骤如下:
①更新OpenWrt的软件源。
OpenWrt:~#opkg update
②下载并安装UVC摄像头驱动,安装结束后插入摄像头,如果在OpenWrt的/dev目录下看到video0文件,则表示安装成功。
OpenWrt:~#opkg install kmod-video-uvc
③下载并安装MJPEG-STREAM开源库。
OpenWrt:~#opkg install mjpeg-streamer
④连接摄像头,启动MJPEG-STREAM,并设置其输出的分辨率和地址。
OpenWrt:~#mjpg_streamer-i"input_uvc.so/dev/video0-r 640x480"-o"output_http.so-p 8080-w/www/webcam"
⑤最后在浏览器中输入以下地址,就可以进行视频监控。
http://local_ip:8080?action=snapshot
http://local_ip:8080/?action=stream
3 REST接口的设计
REST(Representational State Transfer)即表述性状态传递,是Roy Fielding博士在2000年提出的一种软件架构风格,是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。其定义了一组体系架构原则,开发人员可以根据这些原则设计以系统资源为中心的Web服务,包括使用不同语言编写的客户端如何通过HTTP处理和传输资源状态。目前REST已经成为最主要的Web服务设计模式。
在本项目中REST接口主要实现3方面的应用,分别为监控摄像头的多角度转动、智能车的运动控制,以及各类传感器实时数据的获取,具体如下。
①监控摄像头的多角度转动:包含控制水平舵机和垂直舵机的角度,其中垂直方面以摄像头面向地面为0°,向上为0~180°,而水平向左为0°,向右为0~180°,但当用户没有设定角度时,则传递默认值10给后端进行处理,具体如表1所列。
②智能车的运动控制:包含控制车辆的前进、后退、转弯,以及停止等操作,同时需要用户传递车辆前进、后退、转弯的速度值给系统,否则系统将使用默认值向后端系统进行传递,如表2所列。
③各类传感器实时数据的获取:要获取传感器参数,首先要获取各类传感器的类型,因此本系统要提供一个接口来返回本系统包含的所有传感器类型,然后再通过该类型获取相应传感器当前实时的数据,如表3所列。
表1 摄像头接口设计
表2 智能车运动接口设计
表3 传感器实时数据接口
4 CGI程序的设计
在本项目中除了通过REST API接收到用户的各类请求之外,更为重要的是在分析和辨识这些请求后,能够利用串口通信把这些指令发送给ATmega 32U4进行处理,而要把REST接口和本地应用相结合的桥梁就是CGI。
CGI(Common Gateway Interface)是万维网技术中最重要的技术之一,是本地应用程序与Web服务器之间的接口标准和信息传递的规范。通过CGI可以使Web服务器执行本地应用程序,并将它们的输出发送给Web浏览器,使得Web页面由单一的静态展示变为完整的交互媒体。
首先本项目采用双核、双系统的方式进行架构,因此在Atheros AR9331和ATmega32U4之间采用串口作为数据通信的方式,另外由于在Atheros AR9331上部署了基于Linux系统的OpenWrt,而Linux系统对于串口的操作非常方便,因此在接收到用户的REST请求之后,只需要按照CGI程序的编写规范获取用户的请求数据,并从中解析出请求类型和请求参数即可,最后通过串口把这些请求和参数发送给ATmega32U4进行后期处理,具体流程如图2所示。
图2 解析用户请求的CGI程序流程
5 智能车控制系统的设计
智能车控制系统主要包含3方面内容,即智能车运动控制、摄像头云台控制,以及各类传感器的数据获取。通过接收前端用户的指令,并经过CGI程序的分析和传递,用户就可以利用任意平台中的HTTP访问来控制智能车和云台的运动,以及获取传感器的数据。
5.1 智能车运动系统的设计
本系统中智能车运动系统的电机驱动采用ST公司的典型双H桥直流电机驱动芯片L298N,该芯片具有较强的驱动能力,最多可提供2 A的峰值电流和46 V的峰值电压,此外由于L298N只提供2路驱动,但本项目需要使用对4路步进电机的驱动,因此采用对原来的2路输出进行扩展,把其变为4路两相输出,使得把左、右两边独立的4路输出合并为左、右两边2路的输出,具体如表4所列。
在表4中EA和EB分别表示左、右电机的PWM速度,当PWM越高时,智能车的运动速度越快;I1、I2和I3、I4分别表示左、右两个电机的转向,0、1时为顺时针,1、0时为逆时针。
表4 电机驱动真值表
5.2 摄像头云台系统的设计
本系统中摄像头云台控制系统主要采用RobotBase生产的RB-421一维度舵机进行控制,该舵机可以精准地进行水平或垂直方向转动角度。
舵机控制系统主要由舵机控制线传送可变PWM脉冲来进行控制。通常舵机的基准信号周期为20 ms,宽度为1.5 ms,当传输该PWM信号为基准信号时,舵机处于最大角度和最小角度的中间位置,即90°位置。
当PWM信号的周期为0.5 ms时,舵机所处的位置为0°,而当PWM信号周期为2.5 ms时,舵机所处的位置为180°,如果此时传输的PWM信号保持不变,那么舵机的位置就不发生变化,直到所受的外力大于其自身的最大扭力,舵机才会发生角度的变化。具体PWM与角度的关系如图3所示。
图3 舵机PWM与角度的关系
5.3 智能车传感器系统的设计
本系统中采用了多种传感器,例如通过灰度传感器实现智能车的自动巡视功能,通过超声波传感器和舵机的结合实现小车180°的避障,通过红外传感器实现尾部障碍物的躲避,以及通过温湿度、烟雾等环境传感器来获取实时环境参数。
当用户向智能车发送传感器数据请求时,系统通过CGI把请求发送到ATmega32U4芯片,该芯片与各类请求类型进行匹配从而运行相应的传感器处理函数,并通过串口发送至CGI程序,最后CGI程序通过Web的方式把数据呈现在用户面前,其流程如图4所示。
图4 传感器处理流程
结 语
本文讨论了基于开源硬件的无线视频监控智能车的主要技术,通过双核、双系统的架构提高了系统整体的稳定性,并减轻了各模块的工作负担;其次在本系统中用户指令和视频监控均采用HTTP方式进行数据交互,使得本系统能够通过任何终端对智能车进行控制,扩大了系统的应用范围和应用场合,摆脱了以往只有专用设备才能进行控制的局面。
最后,本系统中不论软件还是硬件都采用开源设计,大大降低了系统开发成本,提高了系统开发的效率。本项目通过整合多方面的资源,为今后智能设备以及无人驾驶技术的开发提供了一种可行的方法,具有一定的应用价值。
[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2011.
[2]约翰-戴维.沃伦(John-David Warren).Arduino机器人权威指南[M].北京:电子工业出版社,2014.
[3]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[4]王伟.基于开源软硬件的嵌入计算平台研究与实践[J].单片机与嵌入式系统应用,2013(13).
[5]马丹萍,李勇,梁勤欧.无线遥控智能小车的运动模拟及轨迹绘制[J].浙江师范大学学报:自然科学版,2013(1).
[6]MJPG-streamer[EB/OL].[2015-04].http://sourceforge.net/projects/mjpg-streamer/.