2011年1月29日 星期六

Segway and Bluetooth

http://4rdp.blogspot.com/2011/01/segway-and-bluetooth.html

最近與 CAVE 經常通電郵,討論新書與藍芽通訊等問題,在此分享個人觀點給大家參考。

毓祥想嚐試以 Android 手機為感測器,透過藍芽通訊把 Segway 運動狀態回傳給 NXT,遭遇到迴授延遲的困擾。

在迴授控制系統,也就是有檢知再調整的系統,迴授的速度應該要快於控制的速度,如果控制快於檢知,那將會控制過度。這樣的系統下該如何控制呢?我的建議是
放慢控制的時間,也就是說檢知到最新的狀況才來調整,如果可以的話,甚至等到控制穩定再進行下一步動作

個人粗略估計,這系統可能需要 200ms 週期時間,因為 Android 感測需要時間、藍芽傳送需要時間、NXT解碼也需要時間,甚至馬達的穩定時間, 如果系統可以設計成 NXT 直接檢知、直接控制那是最好,延遲問題可以有顯著改善。

還討論到藍芽不配對可否加速通訊?因為這不是標準 Bluetooth SPP 做法,NXT 需要改寫韌體,它像是發射端對外廣播,不管接收端是否收到資料,因此有遺失資料風險,很像藍芽耳機會丟失封包。另外曾聽別人說有一種藍芽廣告機傳簡訊,做法很相近,不過接收端也要確認是否接收。就算有辦法搞出來,這系統的感測週期還是會很慢,通訊時間不會縮短太多,難以達成即時反應的需求。

最後再補充一點,藍芽通訊會有斷斷續續傳送資料的情形,當有一串較長的資料要傳送時,藍芽可能會分段傳輸,如果傳送的資料沒有結尾字元,那有誤判的可能,接收端須以結尾字元當結束,以免誤判。

2 則留言:

  1. 今天嘗試讓segway直立後,用手機藍芽控制來操作segway前進後退,結果好像沒用?是不是當segway在程式run的過程,不接受外部的direct command control?

    http://cmackimo.blogspot.com/2011/08/segway.html

    回覆刪除
  2. 薛老師您好,

    Direct command control 它隨時可以控制 NXT 動作,因為不清楚你控制端程式如何設計,無法詳細說明問題在何處。

    回覆刪除