EWON:最懂你的树莓派机器人

最近发现因为疫情的缘故,自己疯狂的追了很多Netflix的连续剧。在此,祝大家都平安、健康。

我看到了《黑镜》第五季已经上映。这是一部围绕一群人的私生活以及技术如何操纵他们的行为的连续剧。

其中一个引起我注意的情节是瑞秋,杰克和艾希礼。该剧的一个主要角色是一个名为Ashley O的家庭机器人,这个机器人有很多的特点,我私下对自己说,应该制作一个同款机器人。这是一个初学编程很好的练手项目,至少可以编程让它在我讲笑话时大笑。

Ewon是谁?它能做什么?

在开始动手之前,我设定了一些要遵循的基本原则。这个项目必须:

  • 人人都很容易上手。
  • 不仅可爱,还要有用,以免最终躺在架子上装灰尘。
  • 模块化,以便可以不断添加新功能。
    定好这些原则之后,我决定使用谷歌助手SDK(Google Assistant SDK)。这个SDK不但提供了很多我一直在寻找的特性,而且如果厌倦了Ewon,可以把它当作谷歌家庭设备,做谷歌家庭设备能做的事情。

Ewon要做的是在谷歌助手中添加一个角色。也就是对用户说话作出情感和动作反应。你不仅听到声音,还能看到动作。

注意:本指南正在开发中。我很快会上传所有相关文件。谢谢。

第1步:所需零部件

电子类

  • 树莓派
  • 伺服电机SG90(x4)
  • 伺服电机MG995–标准(x2)
  • PCA9685 16通道伺服电机驱动器
  • USB声卡
  • 麦克风
  • 扬声器(任何小型扬声器都可以,类似这个)
  • 公头和母针头连接器
  • 面包板
  • Nextion显示器

紧固件和轴承

  • M3*10mm(x10)
  • M3*8mm(x10)
  • M3螺母(x20)
  • 轴承
    • 外径:15mm 内径:6mm 宽度:5mm(x2)
    • 外径:22mm 内径:8mm 宽度:7mm(x2)

其他材料

  • 螺柱
    • 40mm (x4)
    • 30mm (x4)

工具

  • 3D打印机

第2步:了解Ewon和编程



在开始编写代码之前,让我简单地解释一下Ewon的电路框图。

RPI(树莓派)是系统的大脑。

RPI(树莓派)通过伺服驱动器控制电机,通过串行通信控制显示器显示表情,通过麦克风和扬声器与Ewon沟通。

既然知道了各个硬件的功能,那就让我们开始给Ewon编写代码吧。

安装谷歌助手SDK

我先解释一下选用谷歌助手的两个原因:

  • 我希望Ewon是一个既有趣又有用的机器人。谷歌助手SDK已经有大量的资源可以用来增强Ewon的功能。
  • 可以在Google和Dialog Flow上操作,让Ewon使用预定义的响应进行聊天。目前我们只关注基本的SDK。

我们从安装谷歌助手SDK开始。这应该不难,因为有大量的资源可以帮助您在RPI(树莓派)上安装谷歌助手SDK。您可以跟着这个教程进行操作:

教程网址:https://developers.google.com/assistant/sdk/guides/service/python

完成上述过程后,应该能够通过键盘上的回车键与谷歌助手交谈。好了,谷歌助手SDK的安装过程就介绍这里吧。

该起个什么名字呢?Ewon?

“嘿,谷歌”!这是用来开始和谷歌助手说话的唤醒词,不幸的是,谷歌不允许使用任何其它定制的唤醒词。让我们看看如何绕过这一点,使得有人呼叫Ewon时,谷歌助手也会被触发。

SnowBoy:一个高度可定制的热词检测引擎,它嵌入在兼容树莓派、(Ubuntu)Linux和Mac OS X的实时系统中。

热词(也称为唤醒词或触发词)是一个关键字或短语,计算机不断监听,作为触发其它动作的信号。

让我们开始在RPI(树莓派)上安装SnowBoy。

记得激活虚拟环境来安装SnowBoy,就像安装谷歌助手SDK那样。从现在开始,所有需要安装的东西都必须安装在虚拟环境中。

安装SnowBoy可能有一定难度,但这个链接应该可以帮助你扫清障碍。

推荐链接:http://docs.kitt.ai/snowboy/#introduction

下面是安装过程用到的命令。

$ [sudo] apt-get install libatlas-base-dev swig
$ [sudo] pip install pyaudio 
$ git clone https://github.com/Kitt-AI/snowboy 
$ cd snowboy/swig/Python3 
$ make 
$ cd ../.. 
$ python3 setup.py build 
$ [sudo] python setup.py install

安装完成后,试着运行演示文件[在文件夹-snowboy/examples/Python3/]确认是否一切正常。

注意:可以很容易给机器人起个自己喜欢的名字。你只需前往链接https://snowboy.kitt.ai/训练一个自定义的热词,然后将新热词放入ewon.pmdl所在的目录里。

Ewon能理解情感吗?

既然Ewon有了名字,我就叫它Ewon而不是机器人。

至于能否理解情感,简短的回答是不,Ewon不能理解情感,所以我们要做的是让Ewon使用关键字检测我们讲话中的情感,然后播放与之相关的面部表情。

用一个简单的分析脚本就可达到目的。Ewon一共支持6类不同的表情。

快乐、悲伤、愤怒、恐惧、厌恶和惊讶。

这些是主要的情感分类,每个分类都有一个与情感相关联的关键字列表。(例如好、真好、兴奋,都属于快乐的情感)。

所以,每当我们说了情感类中的任何一个关键字时,就会触发相应的表情。因此,当你说“嘿,Ewon!”,然后等着Ewon说话,接着说“今天是个好日子!”,它提取关键字“好”并触发相应的“快乐”情感,进而触发快乐的面部表情。

Ewon长有耳朵吗?

下一步要根据触发的情感播放对应的面部表情。

对于Ewon,面部表情只不过是通过伺服系统移动耳朵和颈部,同时通过改变屏幕显示来改变眼睛的运动。

首先是伺服电机,驱动伺服电机是相当容易的,可以按照这个教程设置Adafruit伺服库。

教程链接: https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi/overview

然后,我们设定伺服电机转动的最大值和最小值。这是通过手动移动每个伺服机构并检查其极限值来获取的。组装好Ewon后就可以做这个工作。

Ewon的眼睛

至于眼睛,我使用一个Nextion显示器,上面有一堆图片,如下所示。

这是我在PhotoShop中设计的图像序列,当按顺序播放时,会生成一个动画。每个情感类都有类似的图像序列。现在要显示任何情绪,你所要做的就是调用组成动画的特定图像序列。这些文件在“Display files”文件夹中。

终于来了!

当快乐的情感被脚本触发时,调用显示快乐表情的函数,伺服电机移动到预设的角度,显示器播放快乐的眼睛动画。

Ewon就是这样做到“理解”人类情感的。这个不是最好的方法,有时关键字与预定义的情感不一致,但就目前而言,这种方法效果很好,可以随时添加更多的关键字来提高检测的准确性。

此外,可以用一个更训练有素的情感分析模型(比如Paralleldots情绪分析模型)代替,以获得更好的结果。但当我尝试的时候,有很多延迟,这会让Ewon反应更慢。也许Ewon 2.0版会有这样的东西。

这是运行EWON所需的所有文件的下载链接。下载该文件并执行以下步骤:

  • 解压缩文件,并将文件夹(Ewon)放在home/pi/
  • 在main.py文件中添加设备ID和型号ID。ID是在安装谷歌助手SDK时获得的。
  • 打开命令提示符并运行以下命令:
source env/bin/activate
python main.py models/Ewon.pmdl

第3步:3D打印主体

您可以在此处找到3D文件:https://www.thingiverse.com/thing:4511545

既然设置好了Ewon的大脑,是时候3D打印它的主体了。有18个独特的部件要打印,其中大部分是很小的,总打印时间约15-20小时。(不包括外壳)。

我用白色PLA、50%填充,层高2mm。如果需要,您可以更改这些值。它应该可以正常工作,但要确保小部件用100%填充,以增强强度。

文件打印完成后,可以使用砂纸或手锉清理打印部件,尤其是部件间相互滑动的接头。光滑的关节将使机构平滑,并将减少伺服电机的阻力。这个过程可以花去很长时间,因为很容易沉迷在追求完美当中。

附加说明:可以使用3mm钻头在3D打印部件上重新钻孔。所有孔的尺寸都一样。这将使后面装配时更容易拧入螺母。

第4步:把Ewon装配在一起

其余24张图,点击原文查看

在开始装配之前,打印部件需要做一些修改。名为伺服链接的文件必须匹配伺服链接,这使得3D打印链接与伺服连接良好。

Ewon的装配应该是直截了当的。我已经附上了图片,让你跟着做。

附加说明:确保不要把螺栓或螺钉拧得太紧,因为这可能会损坏和磨损打印部件。

第5步:给Ewon接线

我们正处在激活Ewon的最后一步。这是组件的接线图以及显示连接的图像。

  • 伺服驱动器连接到I2C引脚,即RPI的SDA和SCL。
  • 显示器连接到RPI的RX和TX引脚
  • 麦克风和扬声器连接到USB声卡,声卡通过USB端口连接到RPI。

警告:小心你的RPI短路。请检查所有的连接两次,确保你没有犯任何错误。扬声器、伺服驱动器和显示器都由单独的5v电池供电,而不使用树莓派的5v线路。树莓派只是用来给配件发送数据,而不是给它们供电。

第6步:嗨,Ewon!你能听见我说话吗?

至此,我们已接好了全部配件,并安装了所有必要的库。可以通过运行shell脚本来启动Ewon

./run Ewon.sh

但这个.sh脚本是什么?Ewon通过不同脚本使用许多不同的库(谷歌助手SDK、SnowBoy、Adafruit等)。所有脚本都放在各自的文件夹中。(我们可以移动同一路径中的所有文件,但目前,某些库不允许移动源文件,因此,我们只将它们保留在各自的位置上)

.sh是从每个目录逐个运行所有这些脚本的shell脚本,因此您不必手动到每个目录运行这些脚本。这样就更容易处理所有命令。

一旦运行了shell脚本,只需说“嘿,Ewon!“你应该看到Ewon开始听你说话。现在你可以用Ewon做谷歌助手,和它说话,你可以看到Ewon随着你说的话改变表情。试着说“嘿,Ewon!我今天很难过”,你可以看到Ewon和你在一起难过。试试跟Ewon开个玩笑,你看,它真的笑了。

第7步:下一步怎么办?

Ewon不会就此停止。Ewon现在有了一种检测和显示情感的方法,但我们可以让它做得更多。这只是个开始。

在接下来的更新中,我们将研究如何:

  • 让Ewon探测人脸,跟踪你的脸,跟着你的脸移动。
  • 添加音效以使角色具有额外的深度。
  • 增加机动性,让Ewon能和你一起行动。

注意:由于目前疫情严重,采购零件变得非常困难。考虑我现有的库存,让我改变了设计和功能。一旦获得所需的部件,我会更新这个项目。

更新

  • 对代码进行了一些更改,删除了shell脚本。
  • 为Ewon增加了一个长方形的主体。

代码及3D打印文件

可以点击阅读原文下载,或者在DF创客社区公众号后台回复“EWON”下载。

原文链接:https://mc.dfrobot.com.cn/thread-306990-1-1.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值