a. 配置开发板软件环境
将系统引导程序(俗称bootloader,其功能相当于PC机中的BIOS)烧写进入S3C2410核心母板。这里采用了三星公司推荐的vivi程序。通过对vivi中参数的设置,完成对Flash的分区。
b. 配置、编译、下载内核
(1)下载源代码,在PC端建立交叉编译环境;armv4l-unknown-linux-gcc可以将Linux内核编译为适用于ARM体系结构的二进制代码;
(2)配置内核:使用make menu-config命令,将USB设备支持、USB摄像头驱动(针对OV511芯片)、NAND Flash驱动,以及挂载嵌入式文件系统所需要的驱动程序静态编译到内核中;
(3)编译内核:使用交叉编译工具,将源代码编译为可执行二进制内核镜像,生成文件zImage;
(4)下载内核:将zImage通过串口线,利用vivi的数据烧写功能,下载到Flash的内核分区中(kernel);
c. 制作文件系统
嵌入式系统中常见的文件系统有CRAMFS、JFFS、JFFS2、YAFFS等。考虑到实际的需求,这里采用了CRAMFS。在内核配置时对CRAMFS的驱动代码进行静态编译,并且利用mkcramfs工具制作经过仔细裁剪的文件系统映像,利用vivi的烧写指令下载到Flash的root分区。最终的文件系统映像小于3MB,这是由嵌入式系统较为紧张的存储资源决定的。
启动系统,通过PC机的超级终端,可看到启动信息:包括内核的版本、Flash分区表、交叉编译器的版本,以及内核中静态编译的组件等。
3. 驱动程序的编写和应用程序的开发
视觉功能的最终实现,首先需要为机器人的关节电机编写驱动程序,使操作系统可完成对机器人动作的控制,作为对视觉结果的响应。视觉绝非最终目的,而是机器人获取信息的一种途径,其根本目的在于为机器人的动作、行为提供策略或数据支持。单纯的视觉并没有意义。
机器人全身的关节均为舵机。舵机结构简单,控制方便,外部只有3个引脚:电源、地、PWM信号。对舵机的控制实际上就是要产生频率、脉宽合适的PWM波。
S3C2410芯片内部集成4个PWM发生单元。驱动程序利用其中的一个作为机器人头部电机的控制信号源,通过改写寄存器的值,改变频率和占空比,产生期望的PWM波。
将驱动程序交叉编译为模块,在系统启动后动态地插入内核中。模块加载前独立于内核,方便了驱动程序的调试。编写简短的测试程序,确认关节电机可以正常工作。
这里为机器人视觉系统搭建了一个实际的应用场景:活动的目标小球在背景中运动,期望机器人可以识别目标并对其定位,最后控制头部跟随目标运动(好像机器人在盯着活动目标观察一样)。
机器人视觉处理程序的主要功能为:
(1)从USB摄像头实时读取视频数据,进行简单的预处理;
(2)随后进行图像处理,主要完成空域的图像增强。通过对图像进行二值化,将目标小球从背景中提取出来;
(3)计算目标的位置,进而计算出机器人头部的旋转角度,通过舵机驱动程序,控制机器人头部转动到目标所在角度,实现对目标物体的跟踪。
经过实验,机器人头部可较好地跟踪目标,实现了视觉原型系统。
4. 拓展性工作
机器人视觉系统的开发只是嵌入式系统在机器人领域中应用的一个方面。事实上,还有很多值得我们继续去实现的子系统,诸如语音系统(语音识别、语音输出)、行走控制(设计算法,实现平稳的行走)、网络系统(未来的机器人将不再会是独立的个体,多机器人的协同工作是必然的趋势;同时,机器人同其他设备的连接需求也越来越迫切)等等。应当承认,虽然目前的嵌入式处理器已经具备了比较强大的功能,但是受功耗、体积、成本因素的限制,在实时视频(音频)处理、多媒体协同计算等方面,其速度仍然无法满足需求;所以,更强劲的嵌入式处理器也是将来在为机器人选择控制单元时的重要考虑因素。
四、嵌入式系统的前景
从本文所述的机器人视觉系统中就可看出嵌入式系统的强大功能与广阔应用领域。在当今数字信息和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已被广泛应用于移动计算平台(PDA、掌上计算机)、信息家电(数字电视、机顶盒、网络设备)、无线通信设备(智能手机、股票接收设备)、工业/商业控制(智能工控设备、POS/ATM 机)、电子商务平台、甚至军事应用等诸多领域,其前景无疑是令人非常乐观的。
