部落格 > BLOG

SigmaGo智慧導盲犬2.0強勢出擊

olami     2017-09-08 10:00

作者:Eugene Jahn( https://www.facebook.com/eugenejahn


近幾年來語音辨識越來越火紅,大家肯定都聽過Siri、Amazon Echo、Google Home……但我們似乎很少聽到「中文」語音辨識。

威盛電子的OLAMI提供了一套中文語音辨識API,完全吸引住我的目光!

重點是!真的超容易使用der~

大概花個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官網建立自己的模組( 點這邊有使用教學可以參考~) 然後Raspberry Pi就能夠照著你寫的模組給你回覆!


我們要的語音辨識很簡單,只要能了解使用者想要去的地名,然後抓出地名關鍵字再放到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就會告訴使用者障礙物理他的距離,以維護使用者的安全!

為了安全,超音波需要一直偵測,但Raspberry Pi也需要一直偵測使用者有沒有在講話

所以使用 threading 把兩個程式串在一起之後,就能同時執行上述兩件事了。


最後來優化硬體結構吧!

克服了重重難關後,Raspberry Pi 已經能夠靠著OLAMI 的語音辨識和Google API帶你前往目的地,並且能夠發現前方是否有障礙物了!

現在還差幾步就能大功告成了!

我們要把Joystick 裝上去,讓使用者能夠藉此操控 Raspberry Pi 車~

然後再加上一個握把

注意:Joystick的部分需要接一顆類比轉數位的IC才能使用喔!

於是,我們現在可以靠著Joystick 控制前後左右!終於大功告成了



後記

材料費湊一湊大約3000多元(樹莓派和GPS最貴了……) 但比起一隻導盲犬便宜很多。

但這還只是個雛形,還有很多硬體上和軟體上的問題要解決呢(例如馬達的馬力稍嫌太弱了……)

還好有OLAMI和Google的API使得開發上方便許多!

雖然有時花了很久de個bug最後才發現是硬體問題 

但Raspberry Pi真的很有趣!容易開發、性能又強!(只是有時設定很麻煩啦)

能夠親手做出成品真的很有成就感~

希望它真的能夠幫助有需要的人,並提供給他們一個更好的生活!


如果有問題或寫不清楚之類的,歡迎來問我呦~

Facebook: Eugene Jahn

Email: eugenejahnjahn@gmail.com

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