RCB-4でモーションとは別に個別にサーボを動かす方法
はじめに
HeartToHeart4(以下HTH4)でモーションを作成しているとき、個別でサーボを動かしたい場合があります。例えば、モーションとは別に首に振ったり、腕を上げるなどです。
このような時に便利な機能が「ミキシング」です。今回は、ミキシングを利用してサーボを個別に動かす方法をご紹介します。
ミキシングについて
二足歩行ロボットでは、ジャイロ等で姿勢を安定させるために使用しているミキシングですが、内部では下記の処理が行われています。
サーボモータの動作角 =
ポジション(モーション等で設定する角度)
+ トリム(トリム調整で設定している値)
+ ミキシング1
+ ミキシング2
ミキシングの値は、AD値や変数の値に設定した倍率(ゲイン)をかけた値です。
ミキシング = MIXソースの値(AD値や変数の値) × MIXの倍率
つまり、サーボモータの動作角は、モーション内のポジション以外にミキシング分を足し合わせた角度になります。
動作角 = ポジション + ミキシング(MIXソースの値 × MIXの倍率)
ジャイロのミキシングについて
KHR-3HV等では、ジャイロセンサをもとにしてミキシング機能を使用し機体を安定させています。
ジャイロを使ったミキシングでは、MIXソースの値をジャイロセンサの値に割り当てることで、
ジャイロセンサの値からミキシング値を計算し、サーボの動作角に足し合わせる
という処理を実行しています。この処理は、モーション中、待機中に関係なく常に実行しています。
ただし、ジャイロセンサから取得した値をそのままMIXソースとして使用しているわけではありません。ジャイロセンサは、直立状態で動かないときは基準値(0点)として設定した電圧が出力されますが、歩行などで傾いた時に値(実測値)が変化します。この基準値から変化した実測値の大きさ(差分)をMIXソースとして使用します。
この処理により、以下の動作が実行されロボットが安定します。
①基準値(0点)から
↓
②倒れそうになった時、③角速度が倒れる方向に発生します。
↓
角速度で反応したジャイロセンサのデータ(実測値)を取得し、基準値(0点)との差がA:AD値として得られます。
↓
④A:AD値にB:倍率をかけるとC:ミキシング値が計算されます。
↓
⑤ミキシングの機能によって、もともと指示をしているD:サーボモータのポジションにC:ミキシング値を足し合わせる事で E:サーボの出力角度が機体を戻す方向の角度に変化します。
↓
その結果、⑥機体は倒れる方向とは逆向きに戻そうとするので機体が安定します
となります。
センサ情報は常に取得しており、サーボの更新周期(フレーム毎)で制御をかけていますので、モーションの指示で姿勢を正すよりも早く反応することができます。
そのほかのミキシングについて
ここまではジャイロの話でしたが、ミキシングの基本はポジションに対して何かしら値を足すということになります。
つまり、モーション再生によりサーボは指定したポジションに移動しようとしますが、ミキシング値を足し合わせるとこで、モーションの指示値とは別にサーボを動かすことができます。
HTH4では、ミキシングはAD値以外にも下記のものが設定できます。
・KRRから取得できたアナログスティックの値(StickMix)
・ユーザ変数の値(URemix)
つまり、モーションとは別に角度を指定したい場合は、ユーザ変数にミキシングをかけた状態で、ユーザ変数に値を代入することで、指定したサーボにミキシング値が足されることになります。
ユーザ変数ミキシングの設定方法
ユーザ変数にミキシングを設定したい場合は、ジャイロミキシングの設定のようにプロジェクトウィンドウからは設定できません。
URemixコントロールを利用してモーション中に設定をする必要があります。
初期設定でミキシングを設定する場合は、スタートアップモーションに入れておきます。
①URemixの設定
Toolboxの中にはURemixがあります。
モーション中にURemixを設定することで、ミキシングの設定ができるようになります。
上の図はSIO1-4のID0のMIXソース1にU1(ユーザ変数1)をセットし、倍率を1にしています。
チェックボックスを入れない場合は書き換わることがありません。
また、起き上がりなどミキシングがかかると不都合が出る場合はMIXソース部分をOFFにすることでミキシングが効かないようになります。
②ユーザ変数の値の変更(モーション内)
Toolboxの中にSetValueがあります。SetValueでは指定した値を書き込むことができます。
上の図はユーザ変数1に-1500を入れています。
先ほどゲインを1に設定していますので、モーション等で指示をしているサーボモータの現在位置から-1500ずらしたところに設定できます。
なお、ユーザ変数は書き換えない限り値は保持されます。
③ユーザ変数の値の変更(外部)
ArduinoやRspberryPi、C#で書かれたライブラリ経由など外部のコマンドからもユーザ変数を書き換えることもできます。
※Arduinoライブラリ(V1.1以前のもの)及びC#のライブラリはユーザ変数を直接変更できるような関数を用意しておりません。変更させる場合は、Move命令の関数でコマンドを作成し、送受信を行う必要があります。
注意
ミキシングを行いながら動かす場合は、下記の注意点があります。
- ユーザ変数の値は起動時は決まってはいないので、ミキシングをかける前に初期値を入れてください。
- ミキシングはサーボの指令値に足し合わされるだけです。サーボはフレーム数で動く速度を変更できますが、ミキシングを行った場合はフレーム数に関係なくすぐにその角度に移動します。
- ミキシングは指令値に足し合わせるだけですので、フレーム同士の干渉チェックは行いません。モーションを作る際は考慮して使用してください。
KHR-3HV Ver.3.1 リフェバッテリー付きセットの詳細をみる KHR-3HV Ver.3 リフェバッテリー付きセットの詳細をみる KMR-M6 Ver.3 リフェバッテリー付きセットの詳細をみる KXR-L2 ヒューマノイド型 Ver.2の詳細をみる KXR アドバンスセットB Ver.2の詳細をみる KHR-3HV Ver.2 リフェバッテリー付きセットの詳細をみる KXR アドバンスセットA Ver.2の詳細をみる KXR-L2 ヒューマノイド型の詳細をみる の詳細をみる