冬營營招生中

2019年7月21日 星期日

[micro:bit x NexusBot] 可遙控行走並擺出手部動作的全遙控版NexusBot




協會推出的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鍵對應到右手。如果要面向使用者的話,就要修改機器人程式中的馬達編號及轉動方向了。







沒有留言:

張貼留言