发 帖  
原厂入驻New
[问答]

迷你语音助手小机器人设计方案

139 机器人
分享
智能音箱痛点的迷你语音助手小机器人
0
2021-1-14 07:39:15   评论 分享淘帖 邀请回答
6个回答
Pico主要有以下特点:


  • 自主设计的电路硬件,可以方便地增减需要的硬件模块,比如添加多麦模块、手势识别模块,删去不必要的蓝牙音箱功能等等
  • 从最底层实现语音功能,所有代码都可以开放成SDK
  • 使用最常用的Mqtt协议实现自定义硬件接入,将语音识别结果用来控制任何东西(后期加入语义理解的话效果更佳)
  • 带一个OLED显示屏
  • 极致小巧,仅仅比口香糖大一点
2021-1-14 13:55:25 评论

举报

2021-1-14 13:55:33 评论

举报

  对于Pico的ID设计之前想过好几种方案:
  使用铝合金CNC加工,做成类似魔方的正方体外壳样式
  使用DLP树脂3D打印,设计成类似天猫精灵的迷你版圆柱体外壳,以光固化打印的精度也能达到不错的质感
  使用透明亚克力切割成形,设计为三明治夹层式的堆叠设计,这也是我最终采用的方案
2021-1-14 13:55:51 评论

举报

最终选择亚克力作为外壳结构有几个原因:
其一是该方案的“视觉极客感”最强,由于直接使用透明盖板将PCB电路展现出来,个人觉得颜值方面化繁为简,符合个人审美哲学
其次是对于CNC加工和3D打印在之前的作品中都已经有所使用,而亚克力设计方式还是第一次接触,尝试未知技术是很重要的一个考量因素
其三是由于整体体积非常紧凑小巧,因而如果使用封闭式设计的话散热就变成需要考量的因素了,而夹层式的开放设计则在这方面完全无需担心
最后一个原因是,亚克力便宜
如上面草图所示,结构主要为三层:亚克力前盖、PCB电路板、亚克力后盖,使用M2的滚花轴铜柱进行组合连接,其中前板采用热弯折的方式弯折10度左右形成底座,后方走USB线。
机械结构的设计使用Rhinoceros软件完成↓

亚克力厚度使用的2mm, 找了个小伙伴操作机床雕刻成型, 然后用电烙铁加热弯折。值得注意的是亚克力的熔点是300度左右,但100度左右的时候就会变软了,因此这里将烙铁温度设定为100度,不带调温功能的烙铁是不能直接拿来操作的。

使用机床雕刻的亚克力外壳

使用电烙铁进行热弯↑
2021-1-14 13:56:41 评论

举报

电路设计说明:


MiniPi作为核心板,运行Linux系统,使用mini-PCIE的金手指封装引出了需要的IO。
这里Pico主要使用到两个USB接口(一个接USB声卡,一个接无线网卡),串口(用于调试和控制台输出),几个GPIO(用于驱动按键和LED),I2C接口(保留,后期可能会用于和板载的Arduino通信,Arduino用于驱动一些外围交互模块如红外感应、手势识别等),此外OLED也是使用I2C接口驱动的。
由于底板的功能比较简单,主要就是作接口扩展,因此底板的PCB采用2层Layout。板载的IC主要有:
OLED12864,驱动IC为SSD1306,这个应该属于很常用了
PCM2912A,TI出的USB接口声卡(很贵,30多一片,价格快赶上用的CPU了),音质还是不错的
CP2102,USB转串口芯片,也很常用,通过USB线把Pico连接电脑之后,就可以直接用串口控制台使用Linux了
LM4871,功放IC,用于音频放大然后扬声器输出
USB-Type C母座,USB接口当然是使用我最爱的Type C

Pico底板原理图↑
PCB的设计当然使用Altium Designer↓

底板的设计没有太多可讲的,两层板走线很随意,也没有高速器件,USB那边做好差分走线就行,最好再加上ESD(本版属于功能验证性质就没加了)。声卡方面经过试验耦合电容的选择对声音效果还是有一些影响的。
这次的Pico上用的MiniPi核心板做了微调,之前一共做过三版:第一版由于是初次设计高速多层板,虽然功能没问题,但是有不少小缺陷,比如电源电路BUG、没有加板载的关机按键、音频电路没有做数字地和模拟地的隔离等等;第二版则是做了一些IO调整;第三版是比较稳定了,但是考虑到把SD卡设计在核心板上可能会在一些项目中不太方便更换(被夹在核心板和地板中间了),因而在金手指上添加了外置SD卡的接口。

MiniPi核心板的CPU和DDR部分的电路如下,滤波电容非常多,CPU这样极高频率的器件对电源的纯净度要求很高,要尽量保证每个电源脚都有一个滤波电容↓

CPU部分外围电路↑
PCB投板回来之后就是蓝翔技能施展阶段了,主要用到的工具有:热风枪、烙铁、镊子、锡浆、吸锡带、助焊剂等。这里科普一下贴片元件的焊接方法:与直插元件不同,贴片的器件由于焊盘太小(我用的0402阻容),器件分布太密集,是基本不可能用烙铁一个一个去焊接的,手工焊接采用的方法主要是回流焊。
所谓回流焊,其实就是利用液体的张力,让融化之后的液态锡把器件拉到焊盘中央完成焊接,不太理解的可以百度搜索一下“回流焊”。进行回流焊的第一步是制作钢网,也就是器件焊盘的掩模,这个在设计好PCB之后把相关的加工文件发给厂家就可以进行激光切割制作了,价格也不贵一般50左右。

PCB钢网掩膜↑
把空PCB对准钢网掩模之后就可以刮上锡浆了,这样就完成了一次性对所有的焊盘上锡。然后把元件都按设计摆放上到PCB上,这一步不需要讲位置摆的非常准确因为再下一步回流的时候器件会由于液态锡的张力自动归位的。

上好锡膏的PCB板子↑
上一步贴片完成之后就需要用风枪进行吹焊回流了,相对于一般的器件来说BGA的吹焊难度要大很多因而将其放在最后焊接。吹焊温度大概控制在250-300度,风枪的吹嘴去掉以增大风口便于均匀加热,这一步对焊接经验要求较高,只能多练习尝试掌握技巧了。

底板的焊接相对简单,就不多罗嗦了,焊接完毕之后首先用万用表测电源是否短路,没问题的话上电检测电压,没有BUG的话就可以进行功能测试了。


焊接完的成品↑
2021-1-14 13:57:58 评论

举报

软件开发说明:
硬件搞定之后就开始移植软件啦,MiniPi核心板运行的是Debian系的Ubuntu系统,完全兼容树莓派的各种软件,所以可以利用上很多优秀的开源资源。

软件的实现上也参考了另外一个基于树莓派的智能音箱项目叫做叮当,主页在这里:叮当主页
整个软件框架借鉴了Jasper项目。
软件主要分为以下几个模块:
ASR模块(Automatic Speech Recognition,语音识别),用于获取用户的指令,其中包括语音唤醒功能
TTS模块(Text-To-Speech,语音合成),用于给出语音应答
NLP模块(Natural Language Processing,自然语言处理),用于理解指令的语义,以便采取相应的动作,包括对话功能
MQTT模块,用于实现智能家居联网控制功能
智能音箱正常工作要解决的第一个问题就是如何接收指令,这里主要涉及两个问题:
被动唤醒(Passive Listening),即“什么时候开始听”。这个阶段只监听唤醒词,当听到唤醒词时,进入主动聆听。
主动聆听(Active Listening),即“什么时候结束听”。这个阶段主动聆听用户的任何语音指令,然后对听到的内容进行分析处理。
被动唤醒阶段的基本策略是:以1s的时间窗口通过麦克风进行滑窗采集语音,计算每一帧的波形强度,超过设定的阈值的话就把语音送到ASR模型中判断是否是唤醒词(“你好Pico”),判断为真的话,进入下一个阶段进行主动聆听。
主动聆听的策略与被动唤醒基本相似,以1s的时间窗口通过麦克风进行滑窗采集语音,计算每一帧的波形强度,超过设定的阈值的话,就认为用户已说完了指令。
唤醒关键词的识别使用的是一个开源引擎叫snowboy(另外还有一个库叫PocketSphinx也很好用), 这两个引擎都是离线工作的,不需要连接云端,识别率经测试还是比较高的,当然实际效果跟关键词的选取有关。
snowboy个人使用是免费的↓

SnowBoy的主页
前端的唤醒和指令获取工作完成之后,剩下的功能都由讯飞SDK实现,具体的API介绍和使用说明可以参考官方的Reference文档:
在线语音合成 Linux SDK 文档
当然讯飞作为中文语音技术的扛把子,SDK开放的功能是非常丰富的,只要不是商业使用,很多功能基本也是免费的:

对于智能家居的控制功能,这个就很有意思了,因为我之前用Android平台做过一个机器人项目,也实现了几乎一样的需求,所以智能家居控制的大部分的功能可以直接移植过来使用,包括自制的物联网网关硬件。但是跟上面那个娱乐向的手机器人不一样的是,这次要做的是一个正儿八经的语音助手设备,如果最后只能控制几个LED的话显然无法满足我的无理要求。
所以我做出了一个大胆的决定,让Pico向【小爱同学】伸出魔爪,进行“语音接口对接”,具体效果可以看后面的演示视频。
2021-1-14 13:58:58 评论

举报

只有小组成员才能发言,加入小组>>

11580个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表