fibx 发表于 2020-8-28 13:05:22

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

# EWON:最懂你的树莓派机 器人
https://www.bilibili.com/video/BV1i5411h716/

![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092933kpyeduk7x0pnn5gd.jpg)
![](https://content.instructables.com/ORIG/FEA/5Z6X/KANXM2RV/FEA5Z6XKANXM2RV.gif)

[点击这里查看更多图片](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=9296)

最近发现因为疫情的缘故,自己疯狂的追了很多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和编程
![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/093654sb77748ubg0t4ubi.jpg)

|||
| -------- | -------- |
| ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/093712ekq434qic7wqfulk.png) | ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/093816xxwd758rpse25spp.png) |

[点击这里查看更多第2步的图片](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=9300)

在开始编写代码之前,让我简单地解释一下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)

下面是安装过程用到的命令。
```shell
$ apt-get install libatlas-base-dev swig
$ pip install pyaudio
$ git clone https://github.com/Kitt-AI/snowboy
$ cd snowboy/swig/Python3
$ make
$ cd ../..
$ python3 setup.py build
$ python setup.py install
```

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

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

**Ewon能理解情感吗?**
既然Ewon有了名字,我就叫它Ewon而不是机器人。至于能否理解情感,简短的回答是不,Ewon不能理解情感,所以我们要做的是让Ewon使用关键字检测我们讲话中的情感,然后播放与之相关的面部表情。

用一个简单的分析脚本就可达到目的。Ewon一共支持6类不同的表情。
![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092141qnbhrbfq67xkku7m.jpg)

快乐、悲伤、愤怒、恐惧、厌恶和惊讶。这些是主要的情感分类,每个分类都有一个与情感相关联的关键字列表。(例如好、真好、兴奋,都属于快乐的情感)。

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

**Ewon长有耳朵吗?**
下一步要根据触发的情感播放对应的面部表情。对于Ewon,面部表情只不过是通过伺服系统移动耳朵和颈部,同时通过改变屏幕显示来改变眼睛的运动。

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

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092152zm2szn447r2sv88m.jpg)
然后,我们设定伺服电机转动的最大值和最小值。这是通过手动移动每个伺服机构并检查其极限值来获取的。组装好Ewon后就可以做这个工作。

**Ewon的眼睛**
至于眼睛,我使用一个Nextion显示器,上面有一堆图片,如下所示。
![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092202h982eeblo209d0io.jpg)

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

**终于来了!**
当快乐的情感被脚本触发时,调用显示快乐表情的函数,伺服电机移动到预设的角度,显示器播放快乐的眼睛动画。Ewon就是这样做到“理解”人类情感的。这个不是最好的方法,有时关键字与预定义的情感不一致,但就目前而言,这种方法效果很好,可以随时添加更多的关键字来提高检测的准确性。此外,可以用一个更训练有素的情感分析模型(比如(https://www.paralleldots.com/emotion-analysis))代替,以获得更好的结果。但当我尝试的时候,有很多延迟,这会让Ewon反应更慢。也许Ewon 2.0版会有这样的东西。

这是运行EWON所需的所有文件的[下载链接](https://bit.ly/2Vu20E7)。下载该文件并执行以下步骤:

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

```shell
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装配在一起
|||
| -------- | -------- |
| ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/094045goz2052l1zoeoob1.jpg) | ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/094101vq798iggki4o474k.jpg) |
| ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/094122edart0rjjc6fdaja.jpg) | ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/094154zfwnpflki1pl6bcc.jpg) |
[点击这里查看更多第4步的图片](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=9309)

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

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

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

## 第5步:给Ewon接线
![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092238pwqddl6d0xbtlw4q.jpg)

|||
| -------- | -------- |
| ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092252jdrfd35s4r655b9h.jpg) | ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092314kpn9vfnp49vncfl4.jpg) |
| ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092328s0vhv0er0vn0en4r.jpg) | ![](https://mc.dfrobot.com.cn/data/attachment/album/202008/28/092340xwkknqttwkq72zan.jpg) |

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

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

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

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


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

```shell
./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打印文件**


> 英文链接:(https://www.instructables.com/id/EWON-Raspberry-Pi-Powered-Home-Robot/)
> 英文作者:(https://www.instructables.com/member/sharathnaik/) \[(https://www.youtube.com/channel/UCgZXbvgZOogE6ImMPq3fsew)\]
> 中文翻译:(https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=profile)
> ![](https://www.instructables.com/assets/img/license/by-nc-sa_small.png)

rzyzzxw 发表于 2020-8-29 11:08:52

帅气

hnyzcj 发表于 2020-8-29 11:39:34

帅气+1

gada888 发表于 2020-8-30 15:30:12

牛人

成明亮 发表于 2020-8-31 08:22:03

厉害厉害

发表于 2020-9-2 21:29:03

帅气+2

20060606 发表于 2020-9-2 21:40:14

好创意,赞一个

发表于 2020-9-2 21:51:21

厉害厉害@fibx {:6_215:}

DFS1w2cb8o8 发表于 2020-9-4 21:21:09

厉害厉害

佛系唐法官 发表于 2020-9-6 20:40:17

帅气+3

三三两两 发表于 2020-9-11 12:12:26

酷酷的 学习mark

DFBJFz5siXP 发表于 2020-9-11 22:40:24

成本大概要多少米啊

TIM宝宝 发表于 2020-9-14 17:13:29

怎么漏了耳朵尖尖的模型

飞霜 发表于 2023-5-27 10:47:45

大神!NB

流浪剑士 发表于 2023-7-3 22:11:37

大佬太厉害了

三春牛-创客 发表于 2023-7-14 18:42:31

厉害厉害

三春牛-创客 发表于 2023-7-14 18:43:32

太赞了!{:6_215:}

花生编程 发表于 2023-7-30 19:51:27

厉害厉害

花生编程 发表于 2023-7-30 21:13:46

赞赞赞赞赞
页: [1]
查看完整版本: EWON:最懂你的树莓派机器人