随着现代物流的日益发展, 仓库管理水平在价格控制方面的作用愈发关键。在如何实现高效管理的问题上, 人们做过很多有意义的探索, 物联网概念的出现更使人们对透明高效的物流时代充满憧憬。目前, 在物联网中广泛使用了RFID技术, 而本文从另外一个角度, 探索了嵌入式视觉技术在物联网中实施的可行性。基于视频信息, 研发了小型仓库管理平台, 规避了电子标签成本过高的问题。此系统用普通条形码代替电子标签, 通过图像处理技术完成标签的识别, 实现仓库监控、仓库信息更新、商品查询等操作, 通过对算法的完善, 还可进一步实现包装破损查询功能。具有高效、可靠、成本低、可拓展性强等特点。既可成为RFID技术的补充, 亦有自己独特的优势, 对推进物流信息化的发展有一定参考作用[1]。
系统由移动终端设备和控制板两部分组成, 整体结构示意图如图1所示:
控制板基于减小设备的体积增强其移动性的思路设计, 将与移动性功能实现无关的接口从设备上独立出来, 需要时以FPC线相连。在系统研发阶段, 编程板提供编程调试和系统初始化接口, 产品化后为用户提供系统升级, 数据库更新等功能。移动终端是图像采集与处理平台的主体, 实现视频采集处理和人机交流。视频采集模块使用红外摄像头, 以保证即使在光线较暗的环境下也能有效采集编码信息。人机交互界面采用触控式操作, 为用户提供友好方便的操作界面, 实现系统功能设定、商品信息录入与查询和处理结果输出等功能。
主控芯片采用基于ARMv7架构的Cortex-A8处理器, 主频达600MHz。相比于基于ARMv6架构的相同频率ARM11其性能增益多至3倍, 能够更好的完成图像处理和接口控制任务。存储器使用美光MT29C系列MCP, 集成NAND FLASH和LPDRAM于一块芯片上, 能有效减小主板面积, 降低设备体积。主板上采用了TI的TPS系列电源管理芯片为低压芯片提供标准供电电压, 降低系统能耗。视频编解码芯片使用TVP5146, 尽管其体积是TVP5150的3倍左右, 但可以为系统提供更为可靠的数字视频信号。触摸屏控制器采用低压供电芯片TSC2046。
控制板通过终端主板供电, 集成了串口RS-232 (如图2) 和mini SD卡槽 (如图3) , 用于实现系统调试、更新和网络扩展等。串口控制器采用MAX3232。如图2、图3所示:
为使平台具有较好的适应性, 降低再开发的复杂性, 移植了在嵌入式设备中广泛使用的Embedded Linux操作系统。如图4所示:
具有操作系统的软件系统示意图。Linux平台上丰富的软件资源和成熟的开发经验可以使项目开发进度有更好的可预测性, 有效降低研发风险。
Linux系统移植主要有三个方面工作, 编译引导程序, 编译内核, 制作文件系统。引导程序使用U-boot, 全称Universal Boot Loader, 是遵循GPL条款的开放源码项目;Linux内核版本为2.6.32, 将内核源码打好补丁, 根据硬件情况做适当的配置, 生成镜像;文件系统里设置运行环境, 添加需要的函数库, 制作镜像文件。最后将制作好的镜像按顺序烧录即完成系统移植。
视频采集使用Linux为音视频流操作提供的统一编程接口Video4Linux。V4L有两个版本, V4L和V4L2, 后者从Linux 2.5.x开始被集成到内核里, 修复了V4L的部分bug。对应的头文件分别是内核目录里的linux/videodev.h和linux/videodev2.h。
实时视频显示是通过使用Linux内核提供的驱动程序接口Framebuffer实现的。由于Linux工作在保护模式下, 所以用户态进程无法直接实现屏写操作。Linux的Framebuffer机制模仿显卡的功能, 将硬件结构抽象掉, 从而实现通过Framebuffer直接写屏。
Open CV是一个基于BSD许可证授权的跨平台的计算机视觉库, 被广泛用于图像处理、计算机视觉等领域。实现了图像处理和计算机视觉方面的很多通用算法。本系统采用Open CV2.0版本[2]。
下载Open CV源码包, 配置configure参数, 完成编译。将生成的库文件拷入嵌入式系统/lib目录下。
Tslib是一个开源的程序, 能够为触摸屏输入的采样信号提供诸如滤波、去抖、校准等功能, 通常作为触摸屏驱动的适配层, 为上层的应用提供了一个统一的接口。本系统采用tslib1.4版本。下载源码, 配置合适的参数, 编译安装到指定路径, tslib_path。将编译完成的库文件拷入嵌入式系统中, 需保证路径与tslib_path一致。最后设定触摸屏为输入设备并添加与触控相关的环境变量。
Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架, 完全面向对象, 很容易扩展, 并且允许真正地组件编程, 具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点。本系统采用Qt4.5.3版本[3]。
Qt E编译时需添加tslib的路径, 以保证Qt支持触控操作。将编译好的Qt库文件添加到嵌入式系统/lib下。
共有四个线程, 主控线程, Qt/GUI线程, 图像采集处理线程, 音频线程。四个线程的工作流程, 如图5所示:
主控线程完成设备与线程的初始化后, 负责线程间的信息传递, 任务控制和实时视频显示;Qt线程负责人机交流, 向主线程传递启动信息, 配置信息等;图像采集处理线程以5帧/s的速度采入实时图像, 供图像处理程序处理, 处理结果写入管道供主控线程读取;音频线程负责播报主控线控传递的结果。
主线程要处理按键输入, 视频信号, Qt线程配置文件输入和图像处理线程结果返回。由于在Linux下设备被抽象成文件形式, 因而对其操作属于文件操作。Qt线程和图像处理线程两者与主线程的消息传递采用管道形式, 也属于文件操作。从而既保证了多线程之间通信的可靠性, 同时也实现了程序的一致性。主线程与音频线程的关系是单向消息传递, 使用互斥量即可满足要求。
主线程使用select原语实现多路I/O输入的转接。调用FD_SET函数接口设置变量fd_set的图像采集位、按键响应位、处理结果输出位;调用select函数在max_fd+1的范围内选择准备好的读集描述符;最后调用FD_ISSET测试该位是否被设置。从而实现对不同输入的及时响应[4]。描述线程间关系的示意图。如图6所示:
视频采集主要有以下几个步骤:打开设备、读取设备信息、进行视频采集、视频信息处理、关闭设备。视频设备对应的文件是/dev目录下的video0。
摄像头的制式分为NTSC和PAL两种, 我国国内使用的PAL制式, 其特点是每秒25帧, 扫描线为625, 奇场在前, 偶场在后, 标准分辨率为720*576。由摄像头采集的视频信号为YUYV格式, 即以4:2:2方式打包。其中Y为亮度信号, U、V为色度信号。每点的亮度和色度信息用16位二进制数表示。由于此应用中不需要使用色度信息, 故屏蔽前8位数据, 降低数据复杂度。采集的视频数据存入内存里供视频显示和图像处理使用。
Linux下Framebuffer设备对应于/etc下的fb0文件。首先打开fb0, 通过ioctl命令获取可以获得显示设备的一些固定信息 (比如显示内存大小) 、与显示模式相关的可变信息 (比如分辨率、象素结构、每扫描线的字节宽度) , 以及伪彩色模式下的调色板信息等。通过mmap系统调用完成Framebuffer设备到进程地址空间的映射。将采集的视频信息写入此地址空间即完成视频图像在LCD上的显示。
系统上电后首先启动引导程序, 然后加载内核, 完成硬件初始化后启动init进程, init进程读取/etc/init.d目录下的rc S文件, 运行rc S脚本完成环境变量配置并启动应用程序[5]。如图7所示:
系统第一次开机时触摸屏处于未校正状态, 无法实现正确的触控操作, 需先进行校正。完成校正的触摸屏坐标信息被保存在/etc目录下的pointercal文件里, 因而在脚本里首先判断是否存在pointercal文件, 若不存在则视为未进行校正, 此时, 需运行校正程序。校正完成后重启即可正确加载触摸屏坐标信息。
本文研发了基于Embeded Linux操作系统的图像采集与处理平台, 充分运用了Linux平台丰富的开发资源, 并为进一步的功能拓展提供了良好的硬件支持和软件基础。仓库管理的信息化是提高管理效率, 降低物流成本的有效途径, 也是这个行业发展的必然趋势。本文设计的平台为实现仓库管理信息化提供了新的思路。
系统实物图, 从左往右依次为触摸屏, 终端主板和编程板, 如图8所示:
下一篇: 物联网技术在后方仓库管理中的应用