机器人声控系统的研究一直是机器人研究的主要内容之一。传统的声音控制系统一般采用PC机作为核心平台对机器人进行控制,虽然其具有处理能力强大、语音库完备、系统更新能力强等优点,但是PC机体积大,功耗大,成本高,不适合于中、小型机器人使用。本文以SPCE061A为核心,设计了一套机器人声控系统,和传统的PC机声控系统相比较,具有成本低、体积小、耗能低和使用灵活方便等特点。
本系统采用的机器人平台是北京博创兴盛机器人技术有限公司提供的VoyagerII型地面移动机器人,该机器人采用了模块化的设计理念,高负载能力的直流伺服控制,可选配声纳、红外、视觉、罗盘、GPS等传感器和机械手等执行器。完全可以满足声控系统的设计要求。本文提出了一种以凌阳单片机为核心的VoyagerII型机器人声控系统的设计方案,该产品具有低成本、低功耗、体积小和使用灵活方便等特点,不仅适合于中、小型机器人使用,还适合与教学科研使用。
系统的整体设计分为硬件设计和软件设计两部分,下面首先介绍一下系统的硬件设计。
系统硬件结构
根据机器人平台情况,声控系统的硬件结构主要由微处理器单元、供电单元、声音采集单元和串口输出单元四部分组成,如图所示:
1微处理器单元
本系统采用凌阳公司的16位单片机SPCE061A作为核心控制芯片,内置32K闪存,其较高的处理速度能使芯片非常快速的处理复杂的数字信号,适用于语音识别等应用领域。
SPCF061A的工作频率范围为0.32-49.152MHz.具备8通道10位ADC输入功能,内置了具有自动增益控制的麦克风输入功能。双通道10位DAC音频输出功能及A、B两个I/0口输入输出功能。具有集成度高、性能可靠、价格低廉、功耗小等特点。这些特点充分体现了微控制器工业发展的新趋势。目前,凌阳单片机SPCE061A的应用越来越广,深受广大用户的欢迎。
2声音采集单元
声音采集单元的换能器采用驻极体话筒,通过话筒将采集到的声音信号通过MIC_IN通道传送给CPU,MIC_IN通道专门用于对语音信号进行采样。语音信号经MIC转换成电信号,由电容将其中的直流成分滤除,然后输入到集成在SPCE061A内部的前置放大器中。SPCE061A的内部增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号的电平,当输入信号过大时,自动减小放大器增益;当输入信号减小时,自动增大放大器增益。这样即可以使A/D转换器接收到的信号一直保持在最佳电平,又可以使声音损失减至最少,从而提高语音识别的精度。
3外接供电单元
外接供电单元是声控系统的选配单元,由于声控系统的能耗很低,可以外接3个1.5V电池,作为外接供电单元给系统供电。在没有选配外接供电单元时,也可以直接使用VoyagerII型地面移动机器人的蓄电池为关济实:讲师工学硕士声控系统供电,VoyagerII型机器人的蓄电池供电电压为24V,将24V电压先经过7805转换成5V电压,然后使用SPY0029将5V电压转换成3.3V电压给SPCE061A供电。
4存储器单元
存储器单元也是声控系统的选配单元,当需要识别的语音资源较少时,则使用单片机中集成的FLASH存储器,就可以满足要求。当语音资源较丰富时,就需要连接外部存储器单元,对语音资源进行存储。为了保证系统的兼容性,选用凌阳公司的SPR4096作为外部存储器,LASHSPR4096内部有512K×8bitsF和4K×8bitsSRAM在进行FLASH编程或擦除的时候,可以并发执行SRAM的读写,SPR4096内置了一个总线存储器接口和一个串行接口,它允许单片机通过8_bit并行模式或者1_bit串行模式访问FLASHSDRAM的存储区。在本系统中,将SPR4096的SCK和SDA与SPCE061A的IOB0和IOB1连接,构成串行数据通信。
5串口输出单元
由于SPCE061A单片机的输入、输出电平是TTL电平,而VoyagerII型机器人配置的是RS-232标准串行接口,二者的电气规范不一致。因此,要完成SPCE061A和机器人之间的串行通信,必须对SPCE061A输出的TTL电平进行电平转换,本系统中使用MAXIM公司的MAX232作为电平转换芯片。MAX232使用单电源供电,只需外接5个0.1uF的电容,就可以实现SPCE061A和VoyagerII型机器人之间的电平转换。
系统软件设计
软件设计中最重要的部分就是编写语音识别程序。语音识别过程本质上是一种多维模式识别过程。针对凌阳单片机编写语音识别程序,主要可以分为:训练、辨识、辨识结果输出三部分。
1训练程序
当程序第一次运行时,需要进行语音识别训练。完成识别训练后,会在FLASH存储器中设定标志位,下次重新启动时,可以跳过语音训练过程,直接进行语音识别程序。如果用户需要重新训练,也可以通过按键来擦除标志位,该部分程序框图如下:
2语音识别程序
语音识别程序是整个程序编写过程中最重要的部分,主要可以分为辨识器初始化、识别过程实时监控、获取辨识结果和终止辨识四部分。
2.1辨识初始化
辨识初始化使用voidBSR_InitRecognizer(intAudioSource)函数来实现。当参数AudioSource取1时为LINE_IN电压模拟量输入;当参数AudioSource取0时为MIC语音输入。
2.2识别过程实时监控
该功能调用voidBSR_EnableCOUIndicator()函数来实现,主要用来辨识是否正常工作。如果辨识正常,CPU会产生一个占空比为50%的方波。如果CPU超载,则会产生不稳定的波形,这时为了避免语音辨识产生错误信息,就需要删除命令或者优化程序。
2.3获取辨识结果
该功能调用intBSR_GetResult()函数来实现,当无命令识别出来时,返回值为0;当识别器未初始化或识别未激活返回-1;当识别不合格时返回-2;当识别出来时,返回命令的序号。
2.4终止辨识
该功能调用voidBSR_StopRecognizer()函数实现,主要用于停止识别,并关闭FIQ_TMA中断。
3辨识结果输出
通过BSR_GetResult()可以得到命令的序列号,将命令的序列号改写成VoyagerII型机器人的相关协议,然后通过RS232口传输给机器人即可达到语音控制的目的。
4串口通信程序
为了方便用户对VoyagerII型机器人进行二次开发,北京博创兴盛机器人技术有限公司提供了标准串行接口,并制定了详细的通信协议,供用户使用。为了提高通信的效率和稳定性,在VoyagerII型机器人内部,先将RS-232标准电平转换为TTL电平,再将TTL电平通过MAX491转换为RS-485的标准电平。
由于协议中,只支持一个主机,所以在本声控系统中,将声控系统的单片机作为整个硬件系统的主机,即整个硬件系统的最高管理者,其地址默认为0.其他设备的地址默认为1-255.具体分配如下:系统设备占用地址0x01-0x0F;电机设备地址0x100-0x1F;系统保留地址为0x20-0x7F;用户设备地址:0x80-0xAF;在系统运行过程中,主机一直占用自己的TXD线,从机的RXD线在不进行通信时为高阻状态,只有在接收到与自己地址相符的数据帧时,才能占用总线,一旦通信结束,立即释放总线,回到高阻状态。
主机和从机采用标准的“一问一答”通信机制,如果主机的命令需要有数据反馈,则返回需要的数据;如果不需要数据反馈,就返回上位机发送的命令。
下面,以控制机器人前进为例说明串口通信的协议格式:
(1)发送固定通信字头两字节:0x550xAA
(2)发送接收设备地址:0x01
(3)发送数据长度:0x04
(4)发送命令字:0x26
(5)发送左电机速度两字节:0x000x06
(6)发送右电机速度两字节:0x000x06
(7)发送数据效验和:0x3A
在明确了协议格式和需要发送的内容之后,就可以编写串口通信程序。首先,根据SPCE061A的PLL频率和需要设定的波特率,计算出P_UART_BaudScalarHigh和P_UART_BaudScalar-Low的取值,完成串口参数的设定。在完成设定后,将需要发送的数据存储到P_UART_Data中,SPCE061A就可以将数据发送给VoyagerII型机器人。由于,SPCE061A的串口每次只能发送1个字节的数据,所以需要采用循环的方式,依次将通信内容发送给VoyagerII型机器人。VoyagerII型机器人收到指令后,就可以按照指令,进行相应的动作。
总结
本系统采用了低成本的DSP-SPCE061A作为主控芯片,和传统的基于PC机的语音识别系统相比,虽然识别的语音库相对较少,但是其具有低成本、低功耗、体积小和使用灵活方便等特点,不仅适合于中、小型机器人,还适合于教学科研使用。所以,本声控系统具有良好的市场前景和广阔的使用空间。