到今天終於可以藍牙指令遙控,這也要謝謝 Daniel 的腦力激盪,讓我想到結合現有的進階紅外線遙控,雖說我想設計更複雜的 ROSA 指令,不過在實施複雜方法之前,先用這個簡單的方法也是不錯,可以很直覺操控機器人。
在進階紅外線遙控中,採用數值編碼分別對應不同的動作,用下面例子來說明,之前 ROSA 程式定義紅外線遙控器前進鈕內碼為13,右轉鈕內碼為15,手機藍牙可以發射 #13## 表示前進一步,機器人收到指令開始執行並回應 #13-0,#13 是被執行的控制內碼,以減號分隔剩餘多少指令待執行,等執行完畢再回應 *,這樣設計目的是因為有些機器人動作需要很久時間,這樣可以知道正在執行那一個動作,以及還有多少動作需要等待執行。發射端程式可以根據這些訊息回應決定適當再傳控制碼的時機,以免機器人動作操控異常。
手機或電腦發射端
|
機器人被控制端回應
| |
前進一步控制
|
#13##
| |
機器人開始前進並回應
|
#13-0
| |
機器人結束動作並回應
|
*0
| |
再前進一步並右轉控制
|
#13#15##
| |
機器人開始前進並回應
|
#13-1
| |
機器人結束動作並回應 (剩一組指令)
|
*1
| |
機器人開始右轉並回應
|
#15-0
| |
機器人結束動作並回應
|
*0
|
為了機器人動作遙控有及時回應特性,ROSA 系統設計採取強行插隊處理,也就是說如果有一堆指令排隊等待執行,此時傳入新的遙控指令進來,它除了會中止正在執行的動作外,也會清除原來排隊中的動作,改為執行新的動作命令,以確保及時遙控動作反應。因此,如果想要循序動作,主控端需要等待機器人排隊中所有指令執行完畢,回應 *0 後,主控端再傳送新的指令串為宜。
因應 ROSA 程式越來越複雜,將程式分割幾個檔案,
SpiderRobot.ino Arduino 的主程式
Spider_Main.cpp Spider 系統主程式
Spider_Define.h 定義常數、陣列、變數
Spider_IR.cpp 紅外線遙控驅動程式
Spider_BT.cpp 藍牙通訊驅動程式
Spider_SERVO.cpp 伺服馬達驅動程式
Spider_Motion.h 機器蜘蛛動作表
隨然程式寫法採 C 語言,但是 Arduino 檔名必須用 cpp,否則編譯會找不到檔案。
沒有留言:
張貼留言