李子昌,李 智,管四海
(西安电子科技大学 机电工程学院,陕西 西安 710071)
自动装载与视频监控远程控制系统*
李子昌,李 智,管四海
(西安电子科技大学 机电工程学院,陕西 西安 710071)
设计了一种嵌入式自动装载与视频监控系统,并通过网络实现远程控制。该系统采用S3C2410处理器,移植Linux操作系统,成功运行在S3C2410上。视频监控模块使用的摄像头是USB接口形式,移植对应的Linux驱动程序,摄像头才能正常采集数据。移植Libjpeg开源库,对经硬件压缩的图像进行解压,通过显示终端显示,进而实时对现场进行监控。自动装载模块的实现,首先设定期望的货物摆放路径,其次利用Framebuffer帧缓冲写屏技术在显示终端上显示自动装载过程。通过Socket网络接口,上位机可对该系统进行远程控制。
S3C2410;Linux;视频监控;自动装载;Libjpeg;Framebuffer;Socket
至今为止,多数传统工业领域的货物装卸和摆放还是靠人力完成[1],如搬运水泥。恶劣的工作环境和繁重的体力劳动给工作人员带来巨大的劳动负担,且对工人的身体健康有很大的危害。随着物联网技术的大力发展,如何利用嵌入式技术,设计一套具有实时视频监控且能自动装载的系统成为当下的关键问题。
S3C2410处理器体积小巧,可节省板卡空间;功耗比大多数芯片要低很多,适合工作在对电源有特殊要求的环境中;主频能够达到203 MHz,具有很好的实时性能;具有内存管理单元,因此可以移植并运行操作系统,处理更复杂的任务[2]。基于以上特点,选择S3C2410作为本系统主控制器。Linux操作系统支持创建多个用户、处理多个任务[3],所以基于S3C2410+Linux的嵌入式系统成为第一选择。Linux系统内核中图像采集设备的接口是Video4Linux,在此接口的基础上,结合自己的设计,开发出具有相应功能的程序。基于Video4Linux开发视频采集程序具有接口简单、容易实现、开发周期短等特点[4],故受到广泛关注。Libjpeg是一个开源库,用来压缩或解压JPEG格式的图像[5],可以在设计的程序中调用该库提供的函数,完成解压过程,减少开发人员的工作量。Framebuffer[6]是Linux内核中可由用户调用的函数接口,通过这个接口,可以把图形设备当成缓冲区来使用, 图形设备的操作与真实缓冲区的操作完全相同,可使用户避免接触底层繁琐的操作,使开发变得简单。利用Socket接口,通过网络实现远程控制。
综上所述,本文提出一种基于S3C2410+Linux的嵌入式自动装载系统,同时具有对现场进行视频监控的功能。监控和装载系统的软件是在Linux系统中开发的,内核的版本是2.6.8.1,移植了相应的开源库。另外,根文件系统的类型有很多种,该系统采用的是cramfs[7],该类型只能读,不能写,对数据有保护功能。程序的开发工作主要由移植驱动和开源库、实现具有特定功能的程序等构成。视频监控模块由三部分组成:负责采集图像的zc301p USB接口摄像头、负责图像处理的主控制器和显示视频的显示终端。自动装载模块主要由上述的主控制器和LCD显示设备组成。自动装载应用程序包括摆放路径规划程序和模拟过程的显示画面程序,并通过网络进行远程控制。
视频监控应用程序包含图像数据的采集过程设计、图像解压缩函数的调用和LCD图像显示等。图像数据采集过程调用了Video4Linux接口[4],将摄像头的数据读取到内存中。
初始化设备后,进行视频图像的截取。一种视频截取方式是将read()函数包含在自己的程序中,这样程序就可以将缓冲区数据提取出来;第二种方式是采用内存映射的方法读取数据,设计的程序要包含mmap()函数,在程序中实现映射功能。内存映射的方式有一个很大的优点,就是内存共享,可大大提高访问速度。这样对文件的访问不必再调用read()、write()等,各个进程能及时看到共享内存中数据的更新,进而提高实时性。故此系统采用通过mmap()内存映射的方法。
1.1 用Libjpeg解压jpeg数据
本系统使用的Libjpeg库是libjpeg-v6b,但libjpeg-v6b只支持文件格式的输入。由于本系统采用的摄像头是zc301p,此摄像头所采集的数据是经硬件压缩的jpeg数据流,采集的数据直接保存在内存中。然而Libjpeg库并不支持这样的输入。此问题的解决方法是:修改Libjpeg库的源码,使其能够解压内存中的jpeg数据流。
1.2 视频显示模块
显示模块采用LCD显示屏,每个像素用16位颜色表示,格式为RGB565,但通过Libjpeg库函数解压数据,得到的图像为GB888格式,即24位数据,所以需要进行格式转化。
本系统采用的硬件设备摄像头采集的单幅图片最大分辨率为640×480,所以内存映射时,映射的两个尺寸参数必须是这两个最大值。Libjpeg解压出来的图片与输入图片分辨率同样大。由于显示器的分辨率是480×272,当输入是640×480时,超出了显示屏的尺寸,图像显示不完全,结果如图1。
图1 直接显示的结果
Libjpeg支持缩放解压,可供选择的缩放比例有1/2、1/4、1/8三种。选择1/2的缩放比例,分辨率为320×240,有花屏和明显的扫描痕迹,显示效果如图2。
图2 采用1/2缩放比例显示的结果
以上两种情况尽管显示出来的部分比较清楚,但总体效果不好。选择1/4的缩放比例,分辨率为160×120,画面比较清晰流畅,没有花屏,也无扫描痕迹,显示的效果比较理想,如图3所示。
图3 采用1/4缩放比例显示的结果
选择1/8的缩放比例,画面清晰流畅,但画面太小,不利于实时监控,显示效果如图4。
图4 采用1/8缩放比例显示的结果
综合三种缩放比例的分析和实验结果比较可知,1/4缩放比例是最佳选择。
自动装载的实现基于Framebuffer技术。Linux内核fb_ops定义了Framebuffer设备的操作[6]。
本系统使用的开发板型号是FS2410,处理器是S3C2410。
由于显示终端显示的是RGB565格式,因此可通过对每个像素点直接赋值使framebuffer显示颜色。
下面利用仿真函数对framebuffer的控制来模拟实际水泥的自动装载过程。将显示终端界面看作水泥摆放区域,用一块白色矩形代表单袋水泥。从传送带落下的水泥每次都落在同一位置,因此选取显示屏上一个固定区域作为水泥的落地点。在此选LCD左上角,周期性地使这块区域变成白色即可。将显示屏看成一个二维坐标系,落地点为(0,0),按照路径先沿行移动、后沿列移动的顺序摆放,考虑到现实中的速度问题,每移动一步,延迟1 s。此过程可建模成一个循环嵌套的过程,设定好每个具体位置应该移动的步数,实现有序执行。根据显示屏的分辨率480×272,设定每袋水泥占的区域大小为60×80,行间隔16,列间隔10,即每行为7袋,每列为3袋,一层共21袋。设置不同的背景颜色代表不同的层,而每层的摆放方法是相同的,以便查看。在本系统中,共设计3层。第一层用蓝色背景表示,装载效果如图5。
图5 第一层装载效果
第二层用红色背景表示,装载效果如图6。
图6 第二层装载效果
第三层用绿色背景表示,装载效果如图7。
图7 第三层装载效果
另外,定义一个变量记录装载的数量,以供上位机调用。
利用socket在ARM开发板和上位机之间实现网络通信。将上位机和ARM开发板用交叉网线连接起来,利用socket编程,建立一个socket,采用服务器/客户机的访问模式,开发板作为服务器端,上位机作为客户机端。实现通信后,利用上位机通过网络来直接控制开发板的工作,实现远程控制。
在双方的通信过程中,约定好一套通信协议。由于本文只实现了模拟装载和实时监控两个功能,因此在远程控制时,只设定两个命令即可。约定好A命令表示模拟装载,B命令为观看监控录像。通过这两个命令,可以在上位机很好地远程控制下位机。
本文提出的嵌入式自动装载与视频监控系统,以S3C2410处理器作为主控制器,运行Linux系统,具有实现简单、可扩展性强等特点。通过嵌入式视频监控系统可以查看装载现场的状况,对于突发事件,能及时做出反应,保障装载工作安全进行。自动装载系统的设计为日后实际系统搭建打下了基础,对以后的工作具有重大意义。
[1] 张庆平, 苏国民. 特大型矿井全自动装卸系统的实现[J]. 工矿自动化, 2002(6):41-42.
[2] 彭铁钢, 刘国繁, 曹少坤,等. 基于ARM的嵌入式视频监控系统设计[J]. 计算机工程与设计, 2010, 31(6):1191-1194.
[3] 许青林, 解争龙. 基于ARM的Linux系统移植研究与实现[J]. 物联网技术, 2013(1):37-38.
[4] 王元伟, 刘国秀. 基于V4L的视频采集系统的设计[J]. 铁路计算机应用, 2010, 19(7):30-34.
[5] HONG J, SODSONG W, CHUNG S, et al. Design, implementation and evaluation of a task-parallel JPEG decoder for the Libjpeg-turbo library[J]. Oral Diseases, 2012, 12(12):117-120.
[6] 雷鸿, 熊文龙, 杨单. 基于Fram ebuffer的LCD驱动程序的实现[J]. 武汉理工大学学报:交通科学与工程版, 2006, 30(1):106-109.
[7] 卢剑翔, 刘成安, 胡和智,等. 基于s3c2410的CramFS根文件系统的移植[J]. 微计算机信息, 2006, 22(32):133-135.
Remote control system for automatic loading and video monitoring
Li Zichang,Li Zhi,Guan Sihai
(School of Electro-Mechanical Engineering, Xidian University, Xi’an 710071, China)
An embedded automatic loading and video monitoring system in remote control is proposed in this paper. The CPU of the system is equipped with S3C2410 processor and embedded Linux operating system. The video monitoring module uses USB interface camera, and the corresponding Linux driver is transplanted. With the Libjpeg open source library, the hardware compression image is extracted and displayed through the display terminal. To realize the automatic loading module, the desired goods placement path should be set first, and then using the Framebuffer frame buffer writing screen technology to display the automatic loading process on the display terminal. Through the Socket network interface, the host computer can realize the remote control for the system.
S3C2410; Linux; video monitoring; automatic loading; Libjpeg; Framebuffer;Socket
国家自然科学基金项目(61673310)
TP13
A
10.19358/j.issn.1674- 7720.2017.01.001
李子昌,李智,管四海.自动装载与视频监控远程控制系统[J].微型机与应用,2017,36(1):1-3.
2016-09-03)
李子昌(1990-),男,硕士研究生,主要研究方向:嵌入式系统设计与开发。
李智(1961-),男,博士,教授,主要研究方向:复杂网络、博弈演化、自适应信号处理。
管四海(1990-),男,博士研究生,主要研究方向:自适应信号处理。