李伟东+陈小龙+罗晓
【摘 要】本设计实验通过基于树莓派3代B型来实现对外界图像和声音信息识别来控制电机运动。研究这个项目的意义在于为CCS提供一个可以通过声音和手势来调整汽车的前期成果。巡航控制系统(CCS)是一种利用电子控制技术保持汽车自动等速行驶的系统。由巡航控制组件读取车速传感器发来的脉冲信号与设定的速度进行比较,CCS的ECU来调整节气门开度的增大或减小,增加或降低车速,达到动态调节车速的目的使车进入稳态行驶。汽车的节气门开度通常是CCS的ECU通过Raspberry用声控和手势控来控制电机的速度和运动方向。
【关键词】树莓派3;CCS;语音识别;手势识别;电机控制
引言
汽车巡航控制系统发展至今己有四十多年的历史,它经历了机械控制、晶体管控制、模拟式微机控制和数字式微机控制四个阶段。随着高速公路的迅速发展,巡航控制系统的装车率也在不断提高,根据次此设计的实际情况,选电子式巡航控制系统。采用以树莓派3带B型为ECU,声音控制通过Microphone接入Raspberry,手势识别通过CCD或CMOS用图像传感器接入Raspberry将控制信号转换成控制命令来驱动伺服电机或者步进电机的运动速度和运动方向。
1.基本原理及设计思路
本系统模块主要部件有USB或LINE IN 普通麦克风,CMOS和CCD的图像传感器,树莓派3代B型,直流伺服电机或步进电机。整体构想Raspberry是整个系统的控制核心,内部使用ARM/Linux操作系统其中可以使用C语言和Python语言进行开发和扩展,C语言和Python语言开发的库可以使用第三方类似于0pencv库来处理图像传感器和声音传感器的信号。通过麦克风得到的声音信号通过LINE IN或USB接口连入Raspberry,图像信息可使用CMOS或CCD的摄像头通过USB或Raspberry的内部摄像头接口接入。Raspberry控制器分析出声音和手势控制的命令信号,得到控制电机转速和转向的参数,通过电机驱动芯片来控制伺电机或者步进电机的转速和转向。
2.系统硬件部分准备
(1)树莓派系统镜像可到树莓派官网:www.raspberrypi.org下载。
(2)USB转TTL模块用于电脑和树莓派的连接,通过串口输入命令及代码。
(3)Win32DiskImager软件用于系统镜像的烧写。
(4)PuTTY软件官网:putty.org
電脑与树莓派通信的输入输出串口监视软件,支持快捷键操作。
(5)USB无线网卡。
(6)WiringPIWiringPi(官网: wiringpi.com)是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转。
(7)microSD卡用于烧写系统镜像,由于系统较大,尽量使用8GB以上的卡,高速卡更佳。
(8)5V 2A左右的电源,电源线为通用的microUSB线。
3.系统环境搭建
插入microSD卡至读卡器连接到电脑上,先用网上下载的打开Win32DiskImager软件选择好下载的镜像文件,点击(Write)进行烧写。选SD Formatter 4.0 现将SD卡格式化,然后登陆树莓派官网下载最新2017版的Raspberrybian 的操作系统并且在电脑上解压。打开下载好点的Win32DiskImager选择好下载的镜像文件,点击Write进行烧写,开机登陆树莓派系统插上烧写好镜像文件的microSD卡,插上USB无线网卡,连接好串口线,串口通信连接三根线,GND-GND、TX-RX、RX-TX。将USB转TTL串口模块连接电脑,在电脑设备管理器中查看串口号(如:COM3)。打开PuTTY软件,先选择22端口(SSH) >> 选择对应的串口号(COM15)给树莓派插上电源供电开机,串口监视串口会输出系统开机信息,输出显示(raspberrypi login:),输入用户名:LWD,输入密码(LWD):raspberry 回车。显示输出如上pi@raspberrypi:~$时 开机完成。配置树莓派连接wifi网络使用wpa_cli命令行配置wifi无线网络,中途输出信息可无视,配置完成,输入Ctrl + c退出wpa_cli命令行。退出后可输入ifconfig查看网络连接。通过网络使用GIT工具安装wiringPi。安装完GIT工具后可通过GIT获得wiringPi的源代码安装过wiringPi,程序工作环境安装完毕。
4.语音模块系统搭建
首先将树莓派声卡连接到一个USB端口,在操作系统启动的最后我们在控制台介入这个命令以列出所有连接的USB设备:lsusb 看到“C-Media Electronics, Inc. Audio Adapter”,则USB音频卡已成功检测到。想要USB卡音频输出而不是树莓派,则必须编辑配置文件,控制音响设备的操作系统。打开文件/etc/modprobe.d/alsa-base.conf,使用sudo nano/etc/modprobe.d/alsa-base.conf 进行文本编辑,然后重新启动树莓派。前面已经应该能够使用USB卡作为默认的音频设备,你可以上传音频文件到树莓和试试看能不能听到声音,用命令:aplay/home/pi/test.wav 如果一切顺利,你就没问题地能听到声音。安装免费的语音识别软件:PocketSphinx,执行命令:
sudo apt-get install rpi-update
sudo apt-get install git-core
sudo rpi-updateendprint
PocketSphinx:
安装后可以运行命令:/pocketsphinx_continuous来启动。
打开python需要登陆PocketSphinx官网获得相应的代码和范例程序进行相应的更改语音命令组利用官网所给的语音库来实现开发。
5.图像模块系统搭建
设置好树莓派,升级相关软件安装好OpenCV的相关库,确定摄像头和树莓派是兼容的。
调用一个摄像头的例子:
VideoCapture cap(0); // 使用默认摄像头
if(!cap.isOpened()) // 检查摄像头是否成功打开return -1;Mat edges;
namedWindow(“edges”,1); //建立一个窗口
cap >> frame; // 获得摄像头的一帧。下面三句代码是利用canny算子进行边缘检测cvtColor(frame,edges,COLOR_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); Canny(edges, edges, 0, 30, 3)。imshow(“edges”, edges); 在名字为“edges”的窗口显示。最后看到the camera will be
Deinitialized automatically in VideoCapture destructor系统提示则完成图像識别。
6.电机模块系统搭建
安装Python,连入电机下面是简单的代码片段基本的开关引脚的Python代码片段:
import RPi.GPIO as GPIO
# Use GPIO numbers not pin numbers
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
在树莓派上运行命令使电动机运转:sudo python motor.py
输入以下代码规范进程:
GPIO.setup(Motor1E,GPIO.OUT)
print “Turning motor on”
GPIO.output(Motor1A,GPIO.HIGH)
完成电机驱动模块。
参考文献:
[1]Maik Schmidt,Raspberry Pi A quick Start Guide,Progmatic Bookshelf,August 8,2012.
[2]Matt Richarsxon &&Shawn Wallace jklfd,Start with raspberry pi, OReily medio,December7,2012.
[3]Fredrik Lundh,Python standard library,oreily media,May 2001.
[4]Mendel Copper,Advanced Bash-Scripting Guide,The Linux Document project,Nov 2012.
[5]Robert Sedgewick,Algorithem in C,Addison-Wesley, Sep 1997.
[6] Richard Stallman,Freee in Freedom,orelly,march 2002.endprint