3G 网络的移动机器人远程监控系统

2013-08-27 08:33刘丙洋郭文成
单片机与嵌入式系统应用 2013年2期
关键词:表单移动机器人线程

刘丙洋,郭文成

(天津工业大学 电气工程与自动化学院,天津300387)

引 言

3G 是第三代移动通信技术,结合了无线通信技术和互联网等多媒体技术。随着3G 技术的发展,它在声音和数据的传输速度上有很大提升,并能够在全球范围内实现无线漫游。其数据传输高速、永远在线、覆盖范围广等优点,有效地解决了移动机器人采用有线或者无线远程控制所带来的信息传输和控制距离等方面的瓶颈问题,使远程救援机器人、仿真机器人、家庭保姆机器人等移动机器人技术在大数据量实时传输方面多了一种可利用的解决方案。

1 系统总体架构

本系统主要用来将移动机器人所采集到的视频数据通过3G 网络传给服务器,再将服务器的控制信号传给电机驱动板,以驱动移动机器人平台运动,总体架构如图1所示。摄像头OV9650采集的视频图像经过JPEG 压缩后,存入缓存区,当服务器监听到客户端的接入请求后,再将缓存区的数据通过网络传输给客户端的监控界面进行显示;当需要控制机器人行动时,客户端的控制按钮发送控制信息给服务器,服务器通过程序解析后控制底层电机驱动器,驱动机器人平台运动。

系统硬件平台核心处理器采用S3C6410,它基于ARM1176JZF-S内核,是一个16/32位RISC微处理器,其内部集成了强大的硬件加速器,包括音视频处理、2D 加速等,为2.5G 和3G 通信服务提供了优化的硬件性能,工作频率最高可达677 MHz;采用2GB NAND Flash,主要用于存放内核代码、应用程序、文件系统和数据资料;DDR SDRAM 采用两片128 MB K4X51163PE 芯片;摄像头采用CMOS图像传感器OV9650,最高输出130 万像素(1 300×1 024),具有高敏感度、低功耗、支持多种常用的图像格式输出、支持自动图像控制等优点。

Linux作为一种类Unix操作系统,具有稳定健壮、低成本、高性能、互操作性好和源代码开放等特点。而其良好的内核结构,以及可裁剪的特性,满足了嵌入式应用的差异性需求,使其在嵌入式系统领域占有一席之地。本系统中采用的Linux 内核为3.0.1 版本,文件系统采用YAFFS2,Bootloader选用uboot。

图1 系统总体架构图

2 系统软件设计

2.1 视频数据的采集与传输

视频数据的采集通过Linux中视频设备OV9650的驱动以及Video for Linux提供的相应接口完成。为了方便,将视频采集的相关信息封装到以下结构体中:

采集程序通过函数init_s3c6410(struct vdIn*vd,char*device,int width,int height)来完成对摄像头以及采集参数的初始化,并通过函数s3c6410_Grab(struct vdIn*vd)完成对图像的抓取,用JPEG 压缩算法对采集到的图像进行压缩,图像格式为RGB565。

视频数据传输通过Socket实现,且直接在服务器设备端与Web客户端之间进行传输,通过视频流服务器实现对视频的开关控制。由于视频传输是连续的过程,所以客户端和服务器端都通过线程来实现发送与接收。接收线程由函数pthread_create(&(servers[id].threadID),NULL,server_thread,&(servers[id]))创建。

视频的采集和传输是在两个线程中实现的,它们共享一个缓冲池。这两个线程都是在视频采集服务器端的程序启动时创建并运行的。其中采集视频图像的线程不断通过摄像头采集现场图像,经过JPEG 压缩后存放到缓冲池中,而传输视频数据的线程创建一个Socket来监听等待远程客户的连接请求。当有客户发送连接请求并建立连接后,就通过该连接向远程客户发送视频数据,而发送的视频数据就是从缓冲池中获取的。也就是说,在视频采集服务器端,视频数据传输所需要的一切都已经准备好,就等着客户的请求,一旦建立连接,就可以发送视频数据,从而实现较快的速度和较高的效率。

视频采集和传输的工作流程图如图2所示。

图2 视频采集与传输工作流程图

2.2 远程控制的实现

为了监控界面能被通用浏览器打开,需要移植Web服务器Boa。Boa服务器是一款小型开源的嵌入式Web服务器,交叉编译后的可执行代码大小约为60 KB,在Linux3.0.1内核下运行时占用的内存大小约为1.7 MB。其功能较为强大,支持身份认证、CGI动态Web技术等。它不像传统的Web服务器那样为每个访问连接开启一个进程,只能依次完成用户的请求,即单进程响应多路请求,因此,Boa在同等硬件条件下相对于其他Web服务器表现出更快的速度,节省更多的资源。

通用网关接口(CGI)是用于Web服务器与外部应用程序之间信息交互的标准接口。CGI可以使外部程序处理客户端传来的表单和数据,并对此作出某种反应。这种反应可以是HTML文件、图片等可以在浏览器窗体上出现的任何数据,也可以是对服务器端硬件资源的控制。

调用CGI程序的方法主要有两种:

①GET 方法,CGI 程序从环境变量QUERY_STRING 中获得数据;

②POST 方法,Web服务器通过STDIN 向CGI程序传输数据,数据量超过1024字节时采用此方法。

本系统采用GET 方法。

在串口应用程序中,数据的获取通过以下代码实现:

3 监控界面的实现

监控界面用网页实现,如图3所示。

图3 监控界面截图

为了使页面呈现出动态效果,如显示当前时间、视频数据传输速率等,页面将嵌入Javascript代码。整个界面分为两个区:视频显示区和控制面板区。视频显示区显示视频流服务器传输上来的视频数据,控制面板区通过按钮与CGI串口应用程序交互控制电机驱动板。

Javascript是一种流行的通用脚本语言,基于Javascript可以实现用户与页面的交互,并响应页面上发生的事件。

HTML表单是Web文档的一部分,用来将信息从浏览器传递到服务器,它提供多种接收输入的方法,包括单选按钮、多选框、文本框等,表单以<form>标签开始,以</form>标签结束。本系统控制面板的按钮采用“button”输入类型。传统的HTML 表单需要通过提交按钮(“submit”)来发送表单数据,数据以名/值对的形式发送至服务器端的CGI程序。本系统的每个按钮都需要实时提交,如果通过传统方法来实现,则需要对每个按钮配对一个不同名的提交按钮,这样会使页面代码变得更复杂,因此本系统使用Ajax方法。使用Ajax创建HTML表单时,不再需要提交按钮来发送表单数据,对于每个按钮,只要在属性中添加事件处理函数onClick(),就能在点击按钮时触发Ajax建立浏览器和服务器CGI应用程序间的通信,实现代码如下:

结 语

本文所介绍的系统在实验中获得了较好的结果,视频图像的传输具有较好的稳定性,为了提高图像的连续性,可以通过修改代码提高摄像头的采集频率。该移动机器人平台可以根据实际需要进行功能扩充,并可以通过本文所阐述的方法,对控制面板的功能进行相应的扩展,比如摄像头的调焦、温湿度显示、机械手臂运动控制等。

[1]Raj Kamal.嵌入式系统——体系结构、编程与设计[M].贾建斌,李化,译.2版.北京:清华大学出版社,2010.

[2]李楠,房好帅,王慧娟.基于3G 的嵌入式无线视频监控系统典型方案及分析[J].北华航天工业学院学报,2010(3).

[3]夏澎,郝卫东.基于嵌入式的智能家居监控系统设计[J].微型机与应用,2010(10).

[4]普措才仁,冯旭.基于Linux的ARM9嵌入式车载信息系统的设计与实现[J].自动化与仪器仪表,2010(4).

[5]F Gao,W Xue.Design and implementation of data transmission platform based on 3Gnetwork[C]//Proceedings of Second Pacific-Asia Conference on Circuits,Communications and System,Beijing,2010:359-362.

[6]D Hess,C Rohrig.Remote controlling of technical systems using mobile devices[C]//Proceedings of IEEE International Workshop on Intelligent Data Acquisition and Advanced Computing Systems:Technology and Applications,Rende,2009:625-628.

猜你喜欢
表单移动机器人线程
移动机器人自主动态避障方法
电子表单系统应用分析
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
基于图表示和匹配的表单定位与提取
浅谈网页制作中表单的教学
基于Twincat的移动机器人制孔系统
浅谈linux多线程协作
极坐标系下移动机器人的点镇定
基于引导角的非完整移动机器人轨迹跟踪控制