- UID
- 872339
|
关键字:嵌入式Linux 多任务 共享内存 语音控制 模糊控制
2.4 语音识别
在系统运行过程中,语音识别进程独立完成对语音模块的初始化和读取识别结果的任务,因此,能够及时响应操作人员发出的语音指令。程序中使用了select()函数监控read()是否可读。当语音识别模块LD3320有识别结果时,将在中断引脚输出高电平以触发系统中断,结束驱动程序中的等待状态,同时应用程序可以通过read()函数读取LD332O的识别结果,并写入到相应共享内存区M中。在没有中断时,read()函数将被阻塞,如图6所示。
图6 语音识别进程流程图
使用select机制监控是否语音识别结果,在超出等待时间后,会退出等待并重新初始化语音模块LD3320,释放公共资源,这样也使得系统能够及时响应LD332O的MP3播放功能,避免了在长时间没有语音识别结果时,系统进入卡死状态。
2.5 航向测量
为了使移动机器人能够沿指定的方向行驶并能修正由外界干扰因素产生的航向偏差,系统采用陀螺仪航向测量模块MPU - 6050,该模块将其测量的模拟量转换为可输出的数字量,并通过串口发送到S3C2440。系统通过read(fd_uartl,bur,10)函数读取相应串El,得到航向数据并写人到共享内存区S中。
2.6 超声波测距
本系统采用渡越时间法,超声波测距模块在收到发射控制信号时,换能器将发出40 kHz的连续脉冲信号。接收器的输出高电平时间和距离成正比,同时触发处理器的中断,上升沿中断开启定时器,下降沿关闭定时器,利用处理器内部的定时器1测量出输出信号的高电平的持续时间△T,经过式(1)的计算,可得到检测距离S:
S— V × △T/2 (1)
式中,V 为超声波的传播速度,常温下超声波在空气中的传播速度是340 m/s。程序中根据所编写的驱动程序,使用ioctl(fd_chao,SEND_BEGIN)、ioctl(fd_chao,SEND_STOP)控制GPIO以实现超声波的发射和停止。系统中对某个方向连续测量5次,进行中值滤波并将滤波后数据传递到信息处理进程。
2.7 电机控制
移动平台中采用L298驱动直流减速电机,平台尚未安装速度反馈单元,简化了控制模式。程序通过ioctl()控制L298以实现电机的正反转以及停止操作。
在电机驱动程序中定义了相应GPIO的输入/输出方式:ioctl(fd,TURN_LEFT)中,fd为驱动程序的文件描述符;TURN_LEFT 是命令掩码CMD,驱动程序根据命令掩码CMD对相应的GPIO赋值以控制L298的状态。
|
|