協會推出的NexusBot是有8軸──每邊手腳各2個馬達──的人形機器人。本篇的目的在撰寫一對全功能遙控程式,讓使用者能只靠另一塊Nexus:bit擴充板來控制NexusBot四處走動,但同時也能移動雙手。
NexusBot的組裝,特別是馬達對應的編號、以及機器人的校正方式,請參閱協會的組裝手冊。
遙控顧名思義,一個指令對一個動作。我們定義動作以及要傳送的廣播代碼如下:
- 搖桿往前推 → 傳送1 → 往前走
- 搖桿往後推 → 傳送2 → 往後走
- 搖桿往左推 → 傳送3 → 往左走
- 搖桿往右推 → 傳送4 → 往右走
- 搖桿往前推 + 按住A鍵 → 傳送11 → 左臂抬起
- 搖桿往後推 + 按住A鍵 → 傳送12 → 左臂放下
- 搖桿往前推 + 按住B鍵 → 傳送21 → 右臂抬起
- 搖桿往後推 + 按住B鍵 → 傳送22 → 右臂放下
- 搖桿往左推 + 按住A鍵 → 傳送31 → 左手抬起
- 搖桿往右推 + 按住A鍵 → 傳送32 → 左手放下
- 搖桿往左推 + 按住B鍵 → 傳送41 → 右手抬起
- 搖桿往右推 + 按住B鍵 → 傳送42 → 右手放下
- 沒做任何動作 → 傳送0 → 機器人腳部站定
- 按下A+B鍵 → 傳送-1 → 機器人全身站定(回到預設姿態)
遙控器的程式如下:(點圖可放大)
點圖可放大 |
在這裡,「重複無限次」迴圈加入了個很小的延遲時間,這是因為機器人動作不快,不需要用極密集的方式對機器人發送廣播訊號。
機器人的程式則如下(同樣點圖可放大):
點圖可放大 |
由於機器人手部的動作需要個別控制,所以這裡使用Nexus:bit本身的伺服馬達積木。馬達編號分別為:
- 5 - 左臂
- 6 - 右臂
- 7 - 左手
- 8 - 右手
雙腿與雙腳(1~4)則沿用擴展套件中內建的機器人走路動作,所以不必設定特定編號的馬達。當然,由於Nexus:bit只有一個搖桿頭,所以我們沒辦法同時控制機器人的手與腳動作。
我們並非直接在「當收到廣播數字」內設定機器人動作,因為這樣會卡住接收廣播的流程,導致機器人拼命想完成稍早收到、但還來不及做的動作。反而,我們用一個變數紀錄廣播信號,並在「重複無限次」迴圈內檢視。如此一來,機器人會先完成一個動作,再去看現在最新的指令為何,這就沒有卡住或反應慢的問題了。
此外,程式中的校正參數僅供參考,您應該根據自己的機器人做出適當調整。進行校正的方式請參閱NexusBot組裝手冊。
在這兩支程式中,我們假設機器人的起始位置是背對著使用者,因此A鍵對應到左手,B鍵對應到右手。如果要面向使用者的話,就要修改機器人程式中的馬達編號及轉動方向了。
沒有留言:
張貼留言