博客 > 博客

SigmaGo智能导盲犬2.0强势出击

olami     2017-09-11 14:32

近几年语音识别越来越红火,大家肯定都听过Siri、Amazon Echo、Google Home……但我们似乎很少听到「中文」语音识别。

OLAMI提供了一套中文语音识别API,完全吸引住我的目光!

重点是!真的超容易使用~

大概花个30秒就能写出“如果你说something,他就会回应something”,而且支援Python、Java、c++等语法,真的很方便!

语音识别能使生活变得更便利,比方说用它来控制家电或是远端语音操控等。

但我觉得它似乎有更特别的地方:我们可以在看不见物体的情形下用声音操控!

由这个角度出发,那岂不是可以帮助视障者改善生活吗?

许多的视障者依靠导盲犬来行走,但是导盲犬的时间成本却是如此的高,如果我们能用低成本却打造出机械导盲犬那该有多好!

机械导盲犬优势在于:

1、节省成本

2、能够降低失误率(毕竟狗狗也是生物难免会受外在影响)。

3、提供更完善的功能,比方说障碍回避、导航、影像识别等。

4、提供视障者更好的权利,也还给狗狗自由的权利!


那就来用Raspberry Pi 动手做吧!!!



如影片所示,使用者可以靠着手上的 Joystick 去控制我们的机械导盲犬:SigmaGO。

而且 SigmaGo 前方有一个超音波感测器可以知道前方是否有障碍物。如果前方有障碍物(我将参数调整为20公分以内),SigmaGO 就会自动后退并告知使用者。

SigmaGO同时也具备了导航系统,步骤如下:

1.    先使用GPS模组取得使用者的经纬度位置

2.    用OLAMI 语音识别取得想前往的目的地

3.    靠GoogleMap API 规划出路径

4.    Raspberry Pi 分析路径完后并开始带使用者前往目的地

5.    接着每隔一段时间重新确认路径

SigmaGO 也能够成为使用者的智能语音助手!

使用者可以问时间、天气或算数等,它甚至可以去操控电器之类的(虽然我没有写XD)。

而且,SigmaGO 可以根据使用者的需求自行扩充,可以增加不同的Sensors 或是用OLAMI 的语音系统新增不同功能~


有兴趣的人可以跟著以下的步骤亲自做出属于自己的SigmaGO!


材料:

•     Raspberry Pi 3

•     USB 麦克风版

•     L298N 马达驱动板

•     自走车底盘 + 2x直流马达

•     超音波感测器

•     GPS 模组(NEO 6M)

•     Joystick 摇杆 + MCP3008

这里使用的是OLAMI的microphone以及speaker:https://github.com/eugenejahn/SigmaGO_GuideDog    (SigmaGO 的程式码!!!)

硬件部份请看此链接:https://tw.olami.ai/blog/article/31

我的程式码是使用 OLAMI 提供的 Python code 去加以修改。

如果对 OLAMI 的原始 code 有兴趣的可以先去 OLAMI GitHub 上把 OLAMI Python code 下载到 Raspberry Pi 里。

只要照着上面的 README.md 应该就能成功了(记得要把 hackntu-2017-linux/olami 移到使用者,像这样 /Users/username/olami ,要不然跑起来会有error )。

成功完成后就可以去 OLAMI 官网上建立自己的模块,然后 RaspberryPi 就能够照著你写的模块给你回复!

我们要的语音识别很简单,只要能了解使用者想要去的地名,然后抓出地名关键字再放到 GoogleMap API 上去搜寻该路径~

所以现在要打开 olami/SpeechProcess.py 里面有一个变数叫 nlpResult,它会回传给你语音识别后的结果(JSON格式)。

比方说你写了一个语法叫“向前”,你说了前进它就会回传这是“向前”!

现在只要加一个 if 迴圈,如果符合前往的语法,就去用 Google API 取得到达目的地的路径。

使用这 Google API 需要一个起点,就是现在使用者的位址。

一开始试过用 IP 位置去定位,但十分的不准,所以就买了一颗 NEO 6M GPS Module 来取得自己的位置!(在室内超难接受讯号的,害我以为坏了…搞了超久的!)

得到自己位置的经纬度后,就可以使用API找到去目的地的路程!

现在得到了方向,但我们还需要一台车子带领使用者抵达目的地。所以就把Raspberry Pi 装在自走车上面吧!

然后使用马动驱动版去控制左右两个直流马达,就大功告成了。


要来操控自走车喽~


现在要把 Google map 回传的值和自走车合併在一起!

我们要分析 Google map 回传的值(它一样是 JSON 的格式),并抓出我们要的路线规划。

自走车就能跟着取得的资料执行,如往前、左、右走几分钟之类的。并且每隔30秒更新一次 Google map 的 result,避免走错方向。

这样大致上就完成导航这一块核心了。

现在要来解决避开障碍物的问题~

可以选择使用 camera、超音波或红外线等去处理!

为了方便和节省材料费,我选择使用超音波去侦测距离!

只要在 30cm 以内,Raspberry Pi 就会告诉使用者障碍物理他的距离,以维护使用者的安全!

为了安全,超音波需要一直侦测,但 RaspberryPi 也需要一直侦测使用者有没有在讲话。所以使用 threading 把两个程式串在一起之后,就能同时执行上述两件事了。


最后来优化硬件结构吧!


克服了重重难关后,Raspberry Pi 已经能够靠着 OLAMI 的语音识别和 GoogleAPI 带你前往目的地,并且能够发现前方是否有障碍物了!

现在还差几步就能大功告成了!

我们要把 Joystick 装上去,让使用者能够藉此操控 Raspberry Pi 车,然后再加上一个握把。

注意:Joystick 的部分需要接一颗类比转数位的 IC 才能使用喔!

于是,我们现在可以靠著 Joystick 控制前后左右!终于大功告成了!

后记

材料费凑一凑大约3000多元(树莓派和GPS最贵了……),但比起一只导盲犬便宜很多。不过这还只是个雏形,有很多硬件上和软件上的问题要解决呢(例如马达的马力稍嫌太弱了……)

还好有OLAMI和Google的API使得开发上方便许多!

虽然有时花了很久解决的bug最后才发现是硬件问题,但RaspberryPi真的很有趣!容易开发、性能又强!(只是有时设定很麻烦啦 )

能够亲手做出成品真的很有成就感~

希望它真的能够帮助有需要的人,并提供给他们一个更好的生活!


如果有疑问,可以与这位开发者联系噢~

Facebook: Eugene Jahn

Email:eugenejahnjahn@gmail.com




Copyright © 2017 威盛电子股份有限公司. All rights reserved   |   意见反馈