2016年4月23日 星期六

ROSA 系統開發 35 ─ 藍牙指令遙控

http://4rdp.blogspot.com/2016/04/rosa-35.html



到今天終於可以藍牙指令遙控,這也要謝謝 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,否則編譯會找不到檔案。


沒有留言:

張貼留言