1、1基于 FPGA 的运动控制系统2摘要:本系统采用 Cyclone ii 系列 FPGA 芯片为控制核心,利用皮肤检测和Bresenham 等原理实现对体态的检测、显示和小车控制。系统由 FPGA 体感识别系统和小车驱动控制系统组成。FPGA 体感识别系统由 Verilog 语言编写而成,该系统采集摄像头视频信息,通过皮肤检测原理获得体感信息。根据体感信息,产生相应的小车命令利用 NRF24L01 无线传感器发送至小车,同时利用Bresenham 算法在 VGA 显示屏上画出与体感信息对应的小人。小车驱动控制系统利用 MSP430F449 为控制核心,接受 NRF24L01 的信息后,通过 L
2、297+L298驱动模块驱动小车行进。整个系统易于操作,人际交互友好。关键词:FPGA,体感识别,皮肤检测,Bresenham,小车驱动3目录1 引言 41.1 系统介绍 .41.2 系统功能描述 .42 系统整体方案 53 系统设计与实现 .73.1 皮肤检测模块 .73.2 Bresenham 绘图模块 .83.3 无线控制模块 .93.4 小车驱动模块 .104 系统分析 125 总结 15参考文献 1641 引言1.1 系统介绍体感技术属于 NUI(自然人机界面)的范畴,可以让用户通过肢体语言与周边设备或环境互动,其实现手段主要包括:惯性感测、光学感测以及惯性及光学联合感测。市场上比较
3、成熟的产品主要有:微软的 Kinect、索尼的 PS Move、任天堂的 Vii 以及来自华硕的 Xtion。但是上述的技术对于软件和硬件要求都比较高,不易于学习。本系统利用 DE2FPGA 开发板和摄像头,结合了 OpenCV 的皮肤检测思想,完成了手部追踪和脸部追踪的体感识别。该系统主要是追踪手部信息,根据不同的手势信息来驱动小车行走。体感识别由 Verilog 编写而成,整体思路简明清晰。同时,该系统还增加了虚拟小人的显示,小人会跟随手部信息而变化,使得整个系统操作起来更加生动有趣。1.2 系统功能描述本设计选用 FPGA 硬件处理信号,对图像信号的采集、存储数据同时进行,可以达到高速的
4、并行采集、实时分析和同步存储的目的。我们采用 Altera 公司的 Cyclone II EP2C35F672C6,为保证 FPGA 的稳定工作,选用 25M 的时钟对TRDB-D5M CMOS 摄像头的图像信号进行并行采集。将采集到的图像调整到 640480 的大小并将数据暂时存入 SDRAM 中。同时 VGA 控制模块读取SDRAM 中的信息,将视频信息显示在 VGA 屏上。本设计利用皮肤检测不断对视频信息中的皮肤进行追踪,从而实现手势追踪,并在左右屏中算出皮肤的中心点作为手部信息的坐标点,以此作为手势信息。根据上述手势信息,产生对小车的控制命令,通过 Nrf24L01 无线模块发送至小车
5、。小车接受信息后,作出相应行走动作。本系统提供按键便于用户进进行功能选择,如显示真实视频信息、皮肤信5息、虚拟小人等。皮肤信息用于不同背景环境下手势动作的调整,减少了系统的误判。62 系统整体方案该系统主要由 FPGA 体感识别系统和 MSP430 小车系统两个部分组成。系统框架图如图 2.1。小车控制系统体感识别系统F P G AM S P 4 3 0摄像头V G A显示器N R F 2 4 L 0 1电源电机驱动器步进电机小车N R F 2 4 L 0 1图 2.1 系统框图在 FPGA 体感识别系统中,首先通过 D5M 采集视频信息,因为该摄像头采集到的图像是 RAW 类型的图像,不便于
6、 VGA 显示,所以必须把 RAW 图像转化为 RGB 模式的图像,存入 SDRAM 中,以便 VGA 显示时使用。在SDRAM 控制时使用了 FIFO 的形式,实现了 SDRAM 的多接口写入和读出。从SDRAM 中读出的 RGB 信息,一方面可以送至 VGA 控制模块中,当(SW17/average a 16x16 cell blockwe_ds8);we_dsB 时,我们则认为该像素点为皮肤。利用上述思想,对视频信息处理后,可得出皮肤信息,算出左右区域皮肤像素点位置的平均值,视为左臂和右臂的位置信息。根据左臂和右臂在屏幕上的位置信息,产生小车控制信息,然后对小车进行无线控制。同时根据左臂
7、和右臂的位置信息,利用 Bresenham 算法从设定好的图表中划出简化的人形。3.2 Bresenham 绘图模块真实的直线是连续的,但由于显示器的精度是有限的,不可能真正显示连续的直线,用一系列离散化后的点来近似表现这条直线,如图 3.1 和图 3.2 所示。图 3.1 实际要求的直线及其近似点图 3.2 离散化后用像素点表示的直线Bresenham 直线算法能够高效地找到这些离散的点,其实现原理如图 3.3 所示。根据 Bresenham 算法,能准确的绘制出与控制者相同的动作信息,并反映到虚拟动画小人上。10图 3.3Bresenham 流程图3.3 无线控制模块从皮肤检测模块中可获知
8、左手和右手的位置信息,将左手 Y 轴的位置信息、两手 X 和 Y 距离差信息和两手位置大小信息打包送至 NRF24L01 无线模块。NRF24L01 是 2.4GHz 的 ISM 频段的单片无线收发器芯片,它是 4 线 SPI通讯端口,通讯速率最高可达 8Mbp。利用 Verilog 模拟 SPI 通信,将数据送至NRF24L01 中, NRF24L01 自动将信息发送出去。无线控制模块具体实现如表 3.2 所示。3.4 小车驱动模块本系统小车由参赛队员自行设计加工完成,使用二项四拍的步进电机,利11用 L297+L298 模块控制小车,控制简易,性能稳定。小车 MCU 是利用 TI 的MSP
9、430 系列的 MCU,拥有时钟资源丰富,功耗低,编程简易等特点。利用MSP430 读表 3.2 无线控制模块代码实现nrf24l01_control U10( .clk(nrf_clk),.reset_n(DLY_En),.key(start_end_1),.ce(GPIO_00),.irq(GPIO_05),.en_signal(nr_se_en_signal1),.tx_isdone(se_nr_end_signal1),.tx_data_byte(Tx_data_byte1),.tx_address_data(Tx_address_data1),.rx_data(rx_data1),.
10、nrf_send_data(send_data)/(6h00,SW);send_function U11(.clk(nrf_clk),.reset_n(DLY_En),.send_en_signal(nr_se_en_signal1),.tx_data_byte(Tx_data_byte1),.tx_address_data(Tx_address_data1),.rx_data(rx_data1),.CSN(GPIO_01),.MISO(GPIO_04),.MOSI(GPIO_03),.SCLK(GPIO_02),.send_end(se_nr_end_signal1);12根据 MRF24L
11、01 接收到的数据,将数据进行处理,转换成不同频率的方波和方向信息,通过 IO 送至 L297 模块。L297 会根据接受的方波产生二项四拍步进电机所需的 PWM 波。L297+L298 电路图如图 3.4 所示。图 3.4 小车 L297+L298 电路图134 系统结果与分析系统对小车运动控制的状态如表 4.1 所示。表 4.1 小车动作控制表控制者动作 小车动作双手摊开,水平朝外 启动双手摊开,向上托举 前进双手摊开,向下平放 后退双手合拢,水平朝外 刹车双手摊开,左手高于右手 左转双手摊开,右手高于左手 右转如图 4.1 所示,当控制者双手摊开,水平朝外时,位于 FPGA 上的皮肤检测
12、模块检测出双手的位置,绘制皮肤点集,如图 4.1 中图所示,图中白色标注点为皮肤点,红色标注点为皮肤中心点。同时,系统还会绘制模拟小人以显示控制者的动作,如图 4.1 右图所示,控制者并拢双手,动画小人也并拢双手,此外,系统还提供了硬件按键,使得控制者可以在皮肤点集图和模拟小人图之间流畅切换。经过反复测试,系统能成功快速识别出启动动作,识别率达90%,位于小车上的无线模块接收到 FPGA 发送过来的前进信息后,小车开始启动,实验表明,小车反映速度极快,能迅速对 FPGA 的控制指令做出反映。图 4.1 小车启动动作检测图小车前进动作的检测如图 4.2 所示,当控制者双手平放并保持向上托举的状态
13、时,位于 FPGA 上的皮肤检测模块检测出双手的位置,绘制皮肤点集,如图 4.2 中图所示,图中白色标注点为皮肤点,聚集在屏幕上部分,系统成功检测出托举动作,经反复实验,该动作识别率达 98%,无线模块接收到 FPGA 发14送过来的前进信息后,做出前进动作命令,小车前进。除了控制前进动作以外,系统还创新性的添加进了速度控制机制,控制者双手托举得越高,皮肤检测模块最终计算出的小车行进速度就越快,同时,为了防止小车速度过快带来的前进不稳定的问题,系统设置了最高运行速度阈值1m/s,当计算出的速度值高于阈值时,将按阈值替代处理。图 4.2 小车前进动作检测图小车的后退动作检测原理类似前进动作,控制
14、者双手摊开,向下平放,如图 4.3 所示,FPGA 皮肤检测模块检测出皮肤点集,并绘制于屏幕下方,动画小人模拟相应的动作。经反复实验,该动作识别率达 92%。图 4.3 小车后退动作检测图控制者双手摊开并且左手放置高于右手时,代表发出小车左转命令,如图4.4 所示,FPGA 皮肤检测模块检测出皮肤点集分别位于屏幕左下角和屏幕右上角,动画小人抬高左手,放低右手,成功模拟出控制者的手势。经实验,该动作识别率达 95%。图 4.4 小车左转动作检测图15小车右转实现方法类似左转,控制者双手摊开并且右手放置高于左手,代表发出小车右转命令,如图 4.5 所示,FPGA 皮肤检测模块检测出皮肤点集分别位于
15、屏幕左上角和屏幕右下角,动画小人抬高左手,放低右手,成功模拟出控制者的手势。经实验,该动作识别率达 94%。图 4.5 小车右转动作检测图小车的刹车与前几个动作较为不同,控制者双手合拢,掌心水平朝外,如图 4.6 所示,皮肤检测模块检测出皮肤点集位于屏幕中下方,动画小人作停止状态。图 4.6 小车停止165 总结本文对基于 FPGA 的小车体感识别控制系统具体设计方案进行了详细介绍,介绍了该系统实现的原理和设计方法。在系统算法方面,本文首先分别介绍了皮肤检测算法和 Bresenham 算法的基本原理,采用 FPGA 实现了图像的采集、显示和复杂算法处理,利用纯硬件的处理方式不仅提高了图像处理速
16、度,而且减小了系统的体积。本次系统设计使用的是友晶公司的 DE2 开发板和 D5M 摄像头实现了体感识别的功能,大大减少了体感识别学习的成本。同时程序简易,更易于更多的人学习。同时,我们的设计还存在很多的不足,去环境的干扰与识别的稳定性和准确度方面都不是太好。以上的不足一方面是 Verilog 语言在图像处理方面的局限性,利用较为成熟的软件图像处理效果会更好,另外一方面由于 FPGA 开发板资源的有限,很多功能被限制了。通过亲身去研究和实现体感识别,更加深入了解这门技术的发展空间之大。相信随着技术的发展,越来越多体感方面的技术会越来越多地应用到我们生活的方方面面,提高了操作电子产品的简易性、有
17、趣性。17参考文献1Ooi, M, P. Hardware implementation for face detection on Xilinx Virtex-II FPGA using the reversible component transformation colourspaceJ. IEEE, 2006, 1109(10): 1-62 夏宇闻Verilog 数字系统设计教程北京航空航天大学出版社2003年 7 月3http:/en.wikipedia.org/wiki/Bresenham%27s_line_algorithm4http:/ 吴继华王诚 Altera FPGACPLD 设计 (高级篇)人民邮电出版社20056 马向前基于 FPGA 的实时图像采集和去噪系统的研究吉林大学硕士学位论文2006 年 5 月