外部からRCB-4のモーションを再生させる方法について
はじめに
弊社ロボットキットに採用されているRCB-4は、KRSサーボで構成されたロボットを使用して、ボード内部に登録されたモーションに沿ってサーボモータを動作させます。モーションの作成はHeartToHeart4(以下HTH4)を利用します。ほとんどの作業をマウス操作で行うことができ、自由に動きを作成することができます。また、トリム(原点)調整やミキシングなどロボットに便利な機能も実装させています。
このRCB-4は、通常はHeartToHeart4や受信機KRR-5からの情報によりモーションを再生させますが、外部のマイコンボードやPCなどからコマンドを送ることでモーションを再生することも可能です。
モーションを再生させる方法は2種類あります。
①モーション番号を指定して直接モーションを起動する方法(MotionPlay)
②KRR等のボタンデータをトリガにしてモーションを起動する方法(SetButton)
以下、再生方法と原理について説明します。
どちらもArduino向けライブラリやPython向けライブラリには実装済みです。
『RCB-4 Library for Arduino ver.1.1』
『RCB-4 Library for Python ver.1.0.0B』
.NET Frameworkが使用できるC#で書かれたRCB-4リファレンスセット Ver.2.2でも実行することは可能ですが、下位部分の関数しか用意していないため、モーションの中断等上位部分の関数を実装する必要があります。
直接モーションを起動する(MotionPlay)
MotionPlayについては、以前に公開されたサポート記事「KMR-M6をリモートブレインで動かす(6回目)」で紹介しました。
Arduino向けライブラリのRCB-4変換基板の使用方法(3) Rcb4MotionPlay編も内部では同じ方法を行っています。
この方法は、下記の手順で実行しています。
①再生しているモーションを中断(サスペンド)する
②プログラムカウンタのリセット
③モーションのアドレスをセット
④モーションをリスタートする
詳しくは、リモートブレイン編をご参照ください。
また、Arduino向けライブラリの中に、Rcb4MotionPlayのサンプルがありますので、こちらも参考にしてください。
Rcb4MotionPlayに関しては、RCB-4変換基板の使用方法(3) Rcb4MotionPlay編にて詳しく書かれていますので説明は割愛しますが、以下のように1行でモーションを再生できますので非常に便利です。
1 |
rcb4.motionPlay(1); //モーション1を再生 |
この方法では、上記の手順①で万が一モーション再生途中で中断(サスペンド)してしまった場合に、ロボットがバランスを崩して倒れる等の問題があります。よって、安定したモーション再生を行う場合は、モーションが終了するまで待つか、RCB-4から合図を受け取る必要があります。
また、モーション内のボタン分岐に対応していないため、前進歩行などの連続動作を再生することができません。
そこで、下記のボタンデータをトリガにしたモーション再生が必要になります。
ボタンデータをトリガにしてモーションを再生する(SetButton)
弊社ウェブサイトで配布されている各ロボット用のサンプルモーションは、無線コントローラKRC-5FHなどで無線操縦できるように、予め各モーションにボタンデータが割り当てられています。
また、前進など連続動作が必要なモーション内には、CmpButton(ボタン分岐)機能を利用してボタンが押されている間ループをするように作成されています。
今回紹介するSetButtonを利用したモーション再生では、RCB-4の各モーションに割り当てられたボタンデータ、及びモーション内のボタン分岐を利用したモーションの再生ができます。人が無線コントローラで操作している状況と同じように、ロボットに対してモーション命令を送信することが可能です。
ただし、RCB-4に受信機KRRやKRIなどの受信デバイスが接続されている場合は注意が必要です。各デバイスは、常にRCB-4に対してコマンドを送信しています。マイコンボードなど外部からRCB-4のボタンデータを変更しようとしても、各デバイスから受信した値が上書きしてしまうので、適切にモーションを再生することができません。SetButtonで再生する場合は、必ず受信機などを取り外してください。
SetButtonの詳しい方法は、Arduino向けライブラリの中にあるRcb4SetKrrButtonのサンプルを参考にしてください。
1 |
rcb4.setKrrButtonData (rcb4.KRR_BUTTON_UP); //↑ボタンの指示 |
関数の中身は、受信機KRRの受信データに割り当てられているRAMの領域に、外部のCOMからRCB-4のRAMに送るMOVE命令でボタンのデータを書き込んでいます。
このボタンデータに関しては、ボタンを離したかわかりませんので、モーションを止めたいときはボタンを離したデータを送付する必要があります。
(つまりボタンを離した状態にしないとボタンが押された状態をループし続けます)
1 |
rcb4.setKrrButtonData (rcb4.KRR_BUTTON_NONE) //(何も押してない状態を送信) |
直接起動とボタンデータトリガの実行順序
外部からのコマンドによりMotionPlayで直接モーション命令を送信すると、現在再生されているモーションを強制的に止めて、指定したモーションが再生されます。
一方、SetButtonによりボタンデータをトリガにする方法は、モーションを再生していない(終わっている)状態から判定が行われ、次の指定したモーションが再生されます。
直接起動とボタンデータのトリガの違い
直接モーションの起動 |
ボタンデータをトリガにした起動 |
---|---|
モーションの再生がどこからでもできる |
他のモーションが再生している間は再生されない |
モーションの再生の切り替えはうまく切り替えないと倒れたりバランスを崩したりする | モーションはホームポジションまで戻ってから再生の判定をされるため、バランスを崩すことがない |
KRRが接続されていても動作させることができる |
KRRが接続されていたらトリガが上書きされるので再生ができない |
最後までモーションを再生してから同じモーションを再生させることになるので、連続動作にはならない |
ボタン判定の連続動作がサンプルモーションとして用意されているので、連続動作の息継ぎがなく動かすことができる |
どちらとも一長一短がありますのでうまく使い分けていただければと思います。
■関連記事
RCB-4 Library for Python ver.1.0.0B
RCB-4 Library Arduino版(V1.1)とPython版(V1.0.0B)の違いについて
KHR-3HV Ver.3.1 リフェバッテリー付きセットの詳細をみる KHR-3HV Ver.3 リフェバッテリー付きセットの詳細をみる KMR-M6 Ver.3 リフェバッテリー付きセットの詳細をみる RCB-4HVボードのみの詳細をみる RCB-4miniの詳細をみる KHR-3HV Ver.2 リフェバッテリー付きセットの詳細をみる KXR-L2 ヒューマノイド型 Ver.2の詳細をみる KXR-L4T-R カメ型・ローバー型 Ver.2(アカデミックパック)の詳細をみる KXR-A5 アーム型 Ver.2の詳細をみる KXR アドバンスセットA Ver.2の詳細をみる KXR アドバンスセットB Ver.2の詳細をみる