RCB-4変換基板の使用方法(3) Rcb4MotionPlay編(R4改訂版)
【ここまでの関連記事】
前回の記事に続きまして、今回は『RCB-4 Library for Arduino Ver.2』に付属するサンプルプログラム「RCB4MotionPlay2」を利用して簡単なモーション再生を行います。
なお、こちらのサンプルプログラムはArduino UNO R4などUARTとUSBが別になっているボードを対象とします。Arduino UNO R3などUARTとUSBが共通になっているボードは『RCB-4変換基板の使用方法(1) 準備編』を参考にしてください。
■プログラム概要
「Rcb4MotionPlay2」は、RCB-4に登録されたモーションを番号で指定して再生するプログラムです。モーションの再生は、motionPlay();関数を使用します。
モーション番号は、HeartToHeart4のモーション一覧ウィンドウに表示されている番号です。この番号を()内に記入するだけで、モーションを再生することができます。下の画像の「M001」が該当します。
モーション再生方法は、motionPlay();関数の他にsetKrrButton();関数があります。こちらは、無線コントローラなどでモーションを再生する際に登録する「ボタンデータ」をもとにモーションを再生する方法です。この方法を使用すると、無線コントローラで操縦しているように連続歩行や、ボタンが押されている間は〇〇をする、などの制御ができるようになります。setKrrButton();関数に関しては、次の記事でご紹介します。
■プログラム解説
ここからArduino用のプログラム環境であるスケッチを使用します。
『RCB-4 Library for Arduino Ver.2』に付属するサンプルプログラムの「Rcb4MotionPlay2」の内容をポイントを絞って解説します。プログラムの詳細は、ライブラリ付属のマニュアルをご参照ください。
サンプルプログラムは、「ファイル」→「スケッチ例」→「Rcb4Class_V200」から開くことができます。
最初に記述されている下記の内容は、RCB-4と通信するための初期設定です。
この箇所の詳細は、ライブラリ付属のマニュアルをご参照ください。
●ライブラリ ver.2
1 2 3 4 5 6 7 8 9 |
#include <Rcb4HardSerialClass.h> const long BAUDRATE = 115200; //RCB-4の通信速度 const int TIMEOUT = 100; //RCB-4とのシリアル通信に設定する応答待ち時間 //インスタンス+UARTの指定 //ボードに接続しているシリアルポートに合わせて&Serialを変更してください。 //(&Serial / &Serial1 / &Serial2...) Rcb4HardSerialClass rcb4(&Serial1,BAUDRATE,TIMEOUT); |
下記は、RCB-4と通信を開始するためのプログラムです。この関数が記述されている場所からArduinoがRCB-4と通信を開始します。
プログラムの最初にsetup()が実行されますのでここに記述してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void setup() { Serial.begin(9600); //PCとの通信を開始する delay(1000); //通信が可能になるまで待つ rcb4.configData.word = 0xFFFF; //ConfigDataは間違えないように0xFFFFで初期化 while(rcb4.open() == false) //Configをとれないとモーション再生ができないため、取得できるまでループ { Serial.println("RCB-4 Open False"); delay(500); } Serial.println("RCB-4 OPEN: True"); if(rcb4.checkAcknowledge() == true) //RCB-4と通信ができているか確認 { Serial.println("RCB-4 Check Ack: True"); } else { Serial.println("RCB-4 Check Ack: False"); } } |
motionPlay関数では、RCB4内部のコンフィグデータが必ず必要となります。open()関数内でRCB4内部のコンフィグデータをクラス内で取得しますので、while(rcb4.open() == false);で通信が確立し、データを取得できるまで繰り返し返事を待ちます。通信結果はSerial.println()によりArduino IDEのシリアルモニタに表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void loop() { if(rcb4.motionPlay(1) == true) //モーション1を再生 { //通信に成功した場合 Serial.println("Motion:1 play"); } else { //通信に失敗した場合 Serial.println("Motion:1 False"); } delay(2000); |
rcb4.motionPlay(1)でモーションを再生します。
この関数は、戻り値として正常に通信ができたかを返します。正常に再生されればTrue、失敗した場合はFalseが返ってきます。返事はSerial.println()でシリアルモニタに表示にします。返事を確認する必要なければ、rcb4.motionPlay(1);のみでもモーションを再生することは可能です。
motionPlay()関数の引数に当たる(1)は、HTH4のモーション一覧ウィンドウに表示しているM001です。例えば、M002に後進が登録されている場合は、rcb4.motionPlay(2);とすると後進モーションを再生することができます。
最後にdelay(2000);がありますが、これはここで2秒間待つという処理です。RCB-4がモーションを再生している最中に次のモーション命令を送ると、再生中のモーションをキャンセルしてしまう場合があるためdelay()でモーションが終了するまで待っています。
ただし、この方法はおよその長さで待っているため、モーションが終わった後余計な待ち時間が発生してしまう場合があります。そこで、ライブラリVer.2ではgetMotionPlayNum()関数を用意しました。この関数は、現在再生されているモーション番号を受け取ることができます。さらに、モーションが終了し待機状態にある場合は0を返しますので、モーションを再生中か、終了したかを知ることができます。この関数は、下記のように使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// モーションが終わるまで確認し、終わったところでループを抜ける while(true) { int playNum = rcb4.getMotionPlayNum(); if(playNum == 0) { // モーション再生が終わって待機中(Motion:0) Serial.println("Motion finish"); break; } else if(playNum < 0) { // モーションの取得に失敗した Serial.println("Communication failed"); break; } } |
【morionPlay()関数を使用した連続歩行】
motionPlay()でモーションを再生した場合、無線コントローラのボタンを押した状態で連続再生するモーション(CmpButtonコントロール)は、最初の分岐までしか再生できませんので注意が必要です。この方法でArduinoから再生する場合は、次に解説するsetKrrButton()関数を使用します。
motionPlay()関数で連続歩行をする場合は、HTH4のSetCounterコントロールと、Loopコントロールを使用して、予め歩行する回数を指定しましょう。
KXR-L4TのサンプルモーションM001/002がこの方法で作成されていますので参考にしてください。
■プログラムの書き込みと実行
サンプルプログラムの「Rcb4MotionPlay2」を書き込んで実行してみます。
1)プログラム書き込み完了後に自動で実行されるので、ロボットの電源をONにしておきます。
2)RCB4変換基板上のスイッチは、「実行」のまま切り替える必要はありません。
3)ArduinoにUSBケーブルを接続します。
4)スケッチの書き込みボタンを押します。
5)プログラムの書き込みが完了すると、Ardionoは自動でプログラムを実行します。
RCB-4からの返事を表示する場合はシリアルモニタを開いてください。
【ロボットの動作】
RCB-4との通信が正常にできているか確認した後に、M001のモーションを再生し、M002のモーションを再生します。
KXR-L4Tの場合は、前に5歩進んだ後に、後ろに5歩戻ります。
モーション番号を変えるだけでモーションを指示できますので非常に手軽にロボットを動かすことができます。センサーの値をもとにswitch文で分岐すれば、簡単な自律ロボットを作成することも可能です。Arduinoの豊富なオプションラインアップと組み合わせて、ぜひご利用ください。
次の記事『RCB-4変換基板の使用方法(4) M5StickCからRCB-4のモーションを再生する』