Arduino, Beaglebone, Raspberry Pi, Lego Mindstorms 心得比較(中)

Posted by tjwei on 星期六, 9月 14, 2013 with No comments
這大概是這隻 AlphaRex 的遺照了

 

NXT 的心得

除了 Macbook Air 藍牙的問題外,官方軟體大致上沒有問題。Mindstorms 圖形化程式設計相當簡單直覺,很容易上手,至少簡單的程式碼是如此。我沒有也不打算嘗試用它來寫較大的程式碼。
有非常多的語言可以在 NXT 上寫程式,包含 C-like languages,甚至 Python 語言(參考 wikipedia)。
不過我一開始就打算用遠端控制的方式,最多綁一台手機或者 RPi 之類的小電腦上去就行了。
像是 nxt-python 就能讓你在電腦上用 python 寫程式,然後遠端控制 NXT。
我一開始在 mac 上安裝 nxt-python 碰到了一些困難,因為 nxt-python 告訴我找不到裝置,不管是 usb 還是 藍牙。

所以先在 Linux 上試試看(總要先確定 nxt-python 本身能跑)。Linux 完全沒有問題就能很簡單將 nxt-python 安裝成功,然後配合 USB 控制 NXT。
不過我的 Linux 是桌機,連著一條線不太方便,所以還是想辦法追蹤了一下程式碼,成功裝在 Macbook 上。
其實都是一些 python level 的 driver 問題。像是藍牙,因為 nxt-python 支援兩套 pybluez 和 lightblue,但是 lightblue 的支援是自己寫了個 wrapper 用 lightblue 來模擬 pybluez 的 API,所以有些問題。而 Mac 上只支援 lightblue。
這些 python-level 的問題解決之後,就順利能用 USB 及藍牙控制 NXT 了。
有趣的是,官方不支援 macbook 的藍牙,但這種第三方的方式,反而不用 hack 就能支援了。

NXT 本身有機械硬體上的限制,藍牙的反應和速度,較 USB 要差很多。
我一開始的構想,是實作真實版的 Tom Cat(就是那個會學人說話的貓)。不過第一個問題是 NXT 2.0 裡面沒有聲音感測器,而且由於 NXT 採樣頻率的限制,也不可能有類似電腦裡面的錄音功能(雖然還是有人用這樣有限的硬體做出了聲控),所以我決定用遠端的方式處理。
電腦端錄音什麼的沒太大問題,但問題是,怎麼讓將處理過的聲音檔放到 NXT 播放?
答案是你要將想播放的聲音存成一個特別格式的檔案,然後送到 NXT 上。這個格式不是普通的 WAV 或 MP3,而是一種專有格式。有點討厭,但資料都找得到,不難。
但即使是短短 10K 的檔案,透過藍牙傳送到 NXT,也需要令人難耐的延遲(嚴格來說,已經脫離了延遲的等級,應該叫做等待)。
USB 好一點,但仍有讓人能夠察覺的延遲。也許要用修改的 firmware 才能解決這點。

雖然其面寫的看起來像是缺點,但果不是存心自找麻煩,只要乖乖對硬體上的限制認命,其實網路上資源很多。
新的 EV3 在很多方面,也改善了硬體上的限制。

Categories: