RCB-4変換基板の使用方法(5) setKrrButton編
【ここまでの関連記事】
『RCB-4変換基板の使用方法(3) Rcb4MotionPlay編』
『RCB-4変換基板の使用方法(4) M5StickCからRCB-4のモーションを再生する』
これまでご紹介した手順でArduinoからロボットに搭載しているRCB-4からモーションを再生することが可能になりました。
今回は、『RCB-4 Library for Arduino』に付属するサンプルプログラム「Rcb4SetkrrButton」を例に任意の長さで連続で歩行する方法をご紹介します。
■setKrrButton()関数とは
これまで使用したmotionPlay()関数は、RCB-4内に登録したモーションをモーション番号を指定して再生しました。この方法は非常に簡単ですが、登録したモーションを再生するのみで、例えば5歩歩行したいときは5歩歩くモーションを事前に作成し、登録してく必要があります。
そこで今回ご紹介するsetKrrButton()関数を使用します。setKrrButton()関数は、ボタンデータをRCB-4に送信してモーションを再生することができます。これにより、無線コントローラで連続歩行するように、ボタンデータを送り続けることで連続歩行が可能になり、任意の長さで停止することが可能です。
センサーの値が閾値以下の状態であれば歩行し続け、閾値を超えた時に停止するような制御ができるようになります。
■HeartToHeart4での処理
KXR-L4T カメ型のサンプルモーション「XL4T_105_前進」を例に、ボタンデータをもとに連続で歩行する仕組みを解説します。
Posは、全身のサーボの角度を指定するコントロールです。旗印がついている「Pos0」から矢印に沿ってモーションがスタートします。
「Pos0」の次の「CmpButton8」がボタンによる分岐処理を行うコントロールです。ここで指定したボタンが押されていれば「Pos1」へ移動し歩行を続け、押されていなかったら「ホームポジション」へ移動し処理が終わります。
この処理を繰り返し、ボタンが押されている間は左右の足を交互に出しながらボタンを確認し歩行し続けます。
これが連続歩行モーションの仕組みです。この「CmpButton」コントロールが「ボタンが押されている」と認識するように、setKrrButton()関数でボタンデータを送信し続け、連続歩行を行います。
■ボタンデータ
ボタンデータは、無線コントローラKRC-5FHでロボットを無線操縦する際に使用する値です。各個別にボタン番号が割り当ててありますので、HeartToHeart4(以下、HTH4)のモーション一覧ウィンドウでボタンデータを割り当てることにより、任意のモーションを再生することができます。
また、ボタンを組み合わせてデータを送信することができますので、シフトボタンを押しながら↑ボタンを押してモーションを再生することも可能です。
この画像の一覧内にある「ボタン番号」の欄がボタンデータの値です。また、左のダイアログはボタンデータを登録ためのもので、無線コントローラと同じ位置に配置された各ボタンをクリックすることで、簡単にボタンデータを指定することができます。
■プログラム解説
ライブラリに付属しているサンプルプログラム「Rcb4KrrButton」を解説します。
最初の処理とsetup()は、以前の記事の「Rcb4MotionPlay」と同じですのでそちらを参照してください。また、詳しい解説は、ライブラリ付属のマニュアルをご参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void loop() { rcb4.setKrrButtonData(rcb4.KRR_BUTTON_UP); //↑ボタンの指示 delay(2000); //2s待つが、その間↑ボタンのまま rcb4.setKrrButtonData(rcb4.KRR_BUTTON_DOWN); //↓ボタンの指示 delay(2000); //2s待つが、その間↓ボタンのまま if(rcb4.setKrrButtonData(rcb4.KRR_BUTTON_NONE) == true) //送れたかどうかの合否判定付の書き方(何も押してない状態を送信) { digitalWrite(CHECK_PIN,HIGH); //成功してたらCHECK_PINをHにする } else { digitalWrite(CHECK_PIN,LOW); //失敗してたらCHECK_PINをLにする } delay(2000); } |
setKrrButtonData()関数の引数としてボタンデータを渡します。「KRR_BUTTON_UP」は、無線コントローラの左側の上ボタンを押したデータです。「KRR_BUTTON_DOWN」は下を押した状態です。
RCB-4にボタンデータを渡した後は、そのボタンデータが保持されますので、例えば「KRR_BUTTON_UP」を押している間は前進をし続ける場合、ロボットは前進を続けます。前進を停止する場合は、ボタンを押していないことを示す「KRR_BUTTON_NONE」を送ります。
使用方法としましては、「KRR_BUTTON_UP」を送った後、任意の時間delay()で待ち「KRR_BUTTON_NONE」を送ります。または、センサの値などを頼りにボタンデータを送ることで、人が無線コントローラでロボットを操縦しているように、ArduinoからRCB-4を操縦することができます。
ボタンデータの一覧は下記になります。
ボタンデータを組み合わせることも可能です。下記はシフト1と↑ボタンを同時に押した場合の組み合わせ例です。
例)unsigned short S1_Up = rcb4.KRR_BUTTON_UP | rcb4.KRR_BUTTON_S1
setKrrButtonData()関数は戻り値として通信が成功したかを返します。「KRR_BUTTON_NONE」の方は成功の判定により、デジタルI/Oを切り替えていますが、必要なければrcb4.setKrrButtonData(rcb4.KRR_BUTTON_NONE);のみでも処理を実行します。
ボタンデータを使用することで、連続歩行やボタンデータによるモーションの分岐が可能になります。ぜひお試しください。