:我們要做一個讓觀眾可以動起來的作品
於是經過了半年的努力,安尼就這樣誕生了

安尼維爾 團隊成員:
Imgur 左起:羅大有 吳羿璉 洪羕喆 簡令謙

另外,也要特別感謝陳少甫ARrow的技術支援!

Who Is Any? 

安尼(Any)是一個會自動跟隨體驗者的都市更新機器人

在與安尼配對成功後,安尼會跟隨著你到處行走
當你選定好一個地點,可以停下腳步將鏟子輕輕地往下壓
平板螢幕上的虛擬城市便會立即產生一棟隨機的建築物
結束體驗前,須關閉鏟子的電源放回安尼上並隨地停放安尼,以供下一位觀眾參與互動。
Imgur

體驗流程圖 

Imgur Imgur

這篇文只會介紹安尼控制系統的部分

控制系統 

先來一張Topology
Imgur

其實就是3個東西在運作

  1. Raspberry Pi 樹莓派
    • 負責控制安尼的跟隨方向、速度
    • 避開障礙物動作的切換
  2. ESP8266(NodeMCU)
    • 判斷控制系統的跟隨啟動與否
    • 當觀眾按壓鏟子,會透過HTTP Requests
      觸發 «ARrow» 隨機產出一棟建築物
  3. «ARrow» - An iPad AR APP
    • 一款AR的應用程式
      在體驗過程中會隨鏟子生成建築物,也能同時瀏覽到«ARrow»畫布上的創作內容

UWB 跟隨模組 

全名 PDOA-UWB 定位系統
(phase-difference-of-arrival assisted ultra-wideband)
分為兩個元件:

  1. 標籤(Tag)
    被嵌在體驗者的那端
    經配對後,會主動發送位置訊息給基地台(Base)
    Imgur

  2. 基地台(Base)
    透過板子上的兩個PCB天線接收鏟子上的標籤(Tag)訊號,再經由UART通訊介面傳送給控制板進行運算,判斷裝置跟隨的方向、速度
    Imgur Imgur

基地台(Base)接收到的數據有兩種格式:

  • JSON
  • Hex

在本機校正跟隨模組時,一定要先調回JSON格式
寫控制程式用的是Hex格式

位元欄 位元組數 意思(低位優先)
Head 1 Byte 固定為0x2A
Length 1 Byte <sn-Acc_Z>的長度
SN 1 Byte 序號
Address 2 Byte Tag Address
Angual 4 Byte 角度(degree)
Distance 4 Byte 距離(cm)
F_Path_Power_Level 4 Byte 第一條路徑訊號強度
RX_Level 4 Byte 訊號強度
Acc_X 2 Byte Tag X軸加速度
Acc_Y 2 Byte Tag Y軸加速度
Acc_Z 2 Byte Tag Z軸加速度
Check 1 Byte 校驗位(XOR)
Foot 1 Byte 固定 0x23

Imgur 這是Serial.println 抓到的數據,可以看到他們的規律
再利用抓到的角度、距離等數據來控制步進馬達該行走的步數

避障系統 

TOF10120 雷射測距感測器 

為了讓測距的結果更精確,使用了 ToF (Time of Flight) 飛時測距技術的感測器,降低了感測器受目標物體的反射率干擾
Imgur Imgur

這種感測器是利用發光二極體(LED:Light Emitting Diode)或雷射二極體(LD:Laser Diode)
發射出紅外光,照射到物體表面反射回來
由於光速(v)已知,可以利用一個紅外光影像感測器,量測物體不同深度的位置反射回來的時間(t)
利用簡單的數學公式就可以計算出物體不同位置的距離(深度)
Imgur Imgur

TOF10120有兩種控制介面

  • I2C
  • UART

由於Raspberry Pi上唯一的UART介面已被UWB跟隨模組佔走了
安尼的避障模組採用I2C Bus控制

佈置 

一組安尼共使用了六個TOF10120
分別是R, FR, MR, ML, FL, L
Imgur

Imgur 安尼會依據所讀取到的距離數值來判斷避障的方向、動作
避障的動作分為:

  1. 左/右前轉
  2. 左/右後轉
  3. 自轉

開發過程 

控制板的選擇 

Arduino 

在測試的第一階段,我們選用Arduino作為控制板
搭配Arduino的第三方Library - AccelStepper 控制步進馬達

實驗後發現,步進馬達的轉速很仰賴控制板的的運算速度
而Arduino的處理效能無法達到我們的期望,使得步進馬達的轉速受到限制

  • Arduino UNO
    Clock Speed: 16MHz
  • Arduino Due Clock Speed: 84MHz

即使換到 Arduino Due,運算的速度是有明顯提升
但轉速還是不夠快,大約只有90RPM而已

Raspberry Pi 

為了提高運算效率,以及未來可能的其他功能擴充
我們也將控制板升級為樹莓派

樹莓派處理器的Clock Speed有1,500MHz(1.5GHz)
這個版本的控制程式是用Python撰寫的,我們也成功地將AccelStepper移植到Python運作
參考: https://github.com/alangibson/steppyr

然而,又遭遇到了另一個困境…
CPython的執行緒(Thread)有全局解釋器鎖 Global Interpreter Lock (GIL) 的問題
無法發揮樹莓派的多核心處理效能
也就是,無法同時進行運算、執行控制兩顆步進馬達的功能

為了解決此問題,我們將AccelStepper改使用C來撰寫
這是一大工程,我們也成功解決的馬達轉速受限的問題!
-> https://github.com/yilianwu/steppyr/tree/cpp

訊號 

有時候車子會跟隨到一半沒有反應,感覺訊號斷斷續續的 後來發現,因為戶外路況顛簸,車體在行走的時候會震動、搖晃,造成跟隨模組訊號線的接口接觸不良

我們將樹莓派的GPIO升級成這種端子台,穩定訊號
Imgur

UWB跟隨模組的基地台(Base)也從原本的綠色裸板升級為有外殼的版本
訊號線也從杜邦線改為PH 2.0的端子接頭
Imgur Imgur

控制程式的模式切換 

程式的架構分為4個模式:

  • STANDBY : 安尼靜止不動
  • FOLLOWING : 安尼依體驗者鏟子上的標籤(Tag)來判斷跟隨的方向、速度
  • SPINNING : 若體驗者短時間內大幅度變換方向,安尼會自轉來保持正面朝向體驗者
    (由於基地台的天線只有單一方向性,若背對安尼,會造成數據的錯誤判斷)
  • AVOID : 避障感測器若偵測到有障礙物,會執行避障動作

關係圖如下所示:
Imgur

與«ARrow»的整合 

ARrow是我們畢展另一個組別的作品 - 一款可以讓你自由創作的畫布 AR APP
安尼的iPad安裝了ARrow的特製版本,一旦鏟子被體驗者往地面輕壓
就會立即在ARrow的AR世界中隨機產出一棟建築物

Imgur
建築造型參考臺灣的多元建案設計
建築類型包括商辦大樓、飯店、集合式住宅、博物館、宗教建築等
並賦予每一棟建築專屬名稱

ARrow是用Unity開發的應用程式
我們在鏟子裡放置一塊 NodeMCU,讓ESP8266 (HTTP Client)能在鏟子被按壓時
透過 HTTP Requests 與 Unity (HTTP Server)溝通
Imgur

Unity (HTTP Server) 

在Unity新增一個HttpListener
Port是5555
如果接收到Client的路徑為/build
就產生建築物,並且回傳202

ESP8266 (HTTP Client) 

NodeMCU會讀取霍爾感測器的數值
在Button Down的時候會傳送http://192.168.0.3:5555/build給Server
並且GET Server的狀態碼 (HTTP StatusCode)
Imgur

電系構成 

安尼主要的電力來源是24V 16800mAh的鋰電池
兩顆步進馬達、LED燈可直接接上電池使用

Raspberry Pi、避障模組、跟隨模組、NodeMCU、繼電器
則須在接上24V - 5V的降壓模組才能使用

這是安尼艙門內的線路:
Imgur

SOS緊急斷電系統 

我們在展期臨時新增了一塊NodeMCU板
寫了一個可以遠端控制馬達電源的開關
這樣在展覽遇到突發狀況需要緊急斷電時,只要拿出手機就能直接操控
Imgur

網路 

所有的控制元件都必須連上網路才能互相溝通

需求 

«安尼維爾»總共有4種裝置需在同一個網域下運行:

  • Raspberry Pi
  • ESP8266(NodeMCU)
  • iPad
  • 筆電

而且這些裝置的活動範圍涵蓋了整個場域(安尼可以跑遍整個四四南村)
顧及預算的限制,我們決定使用4G SIM卡的網路分享器

無線網路分享器通常有兩種頻率波段可以選擇:2.4GHz、5GHz
由於我們展覽的場地在高樓大廈林立(辦公室)的都會市中心,選用5GHz的網路會比較不容易受到干擾
其中NodeMCU板只能使用2.4GHz的網路
所以我們需要可以同時發送兩種頻率波段的網路分享器!
Imgur

選擇 

粗略的比較兩家網路分享器租借公司
Imgur

租借場商 iVideo Wi-Ho! 特樂通
廠牌 HUAWEI D-Link
型號 5573 DWR-933
電信公司 中華電信 遠傳電信
Wi-Fi 頻率波段 只能2.4GHz、5GHz 兩者二選一 可以同時發送2.4GHz、5GHz兩種頻段的網路
月租租金 NTD$640 NTD$690

最後選擇了D-Link DWR-933
他還有管理介面可以設定SSIDpasswd之類的東西,還不錯用

username:admin
passwd:預設空白

Imgur 記得歸還的時候再幫設備Reset,才不會讓櫃姐驚慌失措XD

紀錄影片