二足歩行ロボットコミュニティサイト

【サイトの使い方】  【サイトマップ】  【お問い合わせ】 
ロボット動画  |   ロボット写真  |   BBS  |   ダウンロード  |   イベント予定  |   スタッフ日記  |   リンク  |  
ログイン パスワード    新規登録   パスワード紛失  

 

第18回 ジャイロ加速度センサ基板「VS-IX001」を使う

※2008/6/2 ジャイロセンサの効かせ方についてわかり辛いとの指摘がありましたので、「モーションデータにジャイロセンサを効かせる」の項目を追加しました。

明けましておめでとうございます。本年もよろしくお願いいたします。

さて、今回はロボット用センサの花形、加速度センサとジャイロセンサを搭載した拡張ボード「VS-IX001」 の使い方について解説したいと思います。

まずは接続・設定

連載第16回 でも説明したとおり、拡張ボードを使用するには、まずは接続ケーブルを作ってCPUボードとつなげる 必要があります。
ちなみに、複数拡張ボードを接続したい場合は、一つのフラットケーブルの途中に10芯コネクタを圧着して ください。
その際、いつものようにコネクタの△印とケーブルの色をそろえてください。

複数コネクタを接続したフラットケーブルの写真
コネクタの△印とケーブルの色に注意

ジャイロ・加速度センサ拡張ボードをCPUボードと接続したら、まず拡張ボードのディップスイッチを下の写 真の通りに合わせてください。

ジャイロ・加速度センサ拡張ボードのディップスイッチ設定の写真
3,4はI2Cバスアドレス、1,2は加速度センサの感度を設定する
まずは写真の通り全てOFFに合わせる

次にRobovieMakerからCPUボードと通信を開始し、メニューの「プロジェクトの設定」→「CPUの設定」をク リックしてください。
そして、LED拡張ボードと同じように「拡張機器」のタブの「追加」をクリックし、「デバイスの種類」か ら「VS-IX001(ジャイロ/加速度センサ)」を選択して「デバイスの詳細設定」をクリックしてください。
すると以下のダイアログを表示します。

ジャイロ・加速度センサの設定ダイアログ
一旦デフォルトの設定で「適用」をクリック

ジャイロ/加速度拡張ボードの設定ダイアログもLED拡張ボードと同様にあらかじめ適切な値が代入されてい ます。
まずは「適用」をクリックして設定を適用してください。
適用したら、実際に正しく通信が行われているかステータスウィンドウを確認してください。
第16回 でも説明しましたが、ステータスウィンドウの「err code」や「addr」が0以外になっていると拡張ボード との通信に失敗しています。
接続ケーブルのつなぎ方や拡張ボードのディップスイッチの設定を見直して問題がないか確認してください 。

ジャイロ・加速度センサ拡張ボードと正しく通信が開始できたら、拡張ボードの設定ダイアログ上の「現在 のセンサ値」という項目に、実際のセンサ情報がリアルタイムで反映されます。
この状態で拡張ボードを振るとジャイロセンサの「X軸」「Y軸」の値が大きくなり、また拡張ボードを傾け ると加速度センサの「X軸」「Y軸」「Z軸」の値に変化が現れます。

ジャイロ・加速度センサの数値フィードバック
接続設定が正しいと、拡張ボードを振ったらそれに対応して数値が変わる

以上で拡張ボードの接続設定は完了です。
一旦、ジャイロ・加速度センサ拡張ボード、CPUボードの各設定ダイアログを閉じて、CPUボードのROMに設定 を書き込みましょう。

ジャイロセンサでバランス制御

ジャイロセンサは、物体の揺れ(角速度)を計測するセンサです。
物体が揺れる方向は、ピッチ/ロール/ヨーの三つの方向に分かれますが、ジャイロ・加速度センサ拡張ボー ドには、2軸のジャイロセンサを搭載しているので、このうちの二つを取得できます。

各軸が取得できる揺れの方向は、ロボットにジャイロ・加速度センサ拡張ボードを搭載する向きで決まりま す。
ジャイロ・加速度センサ拡張ボードのジャイロセンサは以下の二つの方向を取得できるので、まずはこれを 参考に基板の搭載位置を考えてください。
ちなみに、一般的にはジャイロセンサはロボットの前後左右(=ピッチ/ロール)の揺れを検出するために 使用するため、ジャイロ・加速度センサ拡張ボードは地面と水平に配置するのが基本です。スペースなどの 都合で垂直に搭載した場合、前後と左右のどちらを使用するかを考えて搭載する必要があります。

ジャイロセンサの検出方向

また、体全体の揺れ具合を検知するので、当然手先や足先、頭など余計な動きまで感知してしまう場所に搭 載しても意味がありません。 基本的には胴体内に搭載します。
搭載箇所が決まったら、ロボットが動いても基板がずれないように固定してください。固定方法はテープで 貼り付けたり基板の四隅の穴でネジ止めしたりしてください。注意として、基板の裏面などに金属の板が直 接触れてショートするようなことがないようにしてください。

RB2000への搭載例
RB2000への搭載例。CPUボード横のネジ穴に、スペーサ+ネジで固定する

次に、任意の関節にジャイロセンサの値を効かせる設定をRobovieMakerから行います。
連載第15回 でも少し触れましたが、サーボモータの角度の値はポーズスライダ0〜29の変数の値を読み取っていま す。この設定は任意に変更可能で、RobovieMakerのCPUボードの設定で行うことができます。
それでは、ロボットと通信を開始してメニューの「プロジェクトの設定」→「CPUの設定」をクリックして ください。
クリックしてCPUボードの設定ダイアログを表示したら、続いてダイアログの「サーボモータ出力」のタブ をクリックして内容を以下のように切り替えてください。
切り替わったら、ダイアログ中央の「出力値設定」の項目にご注目です。
こちらでは各サーボモータがどの変数を参考に、どのような計算を行って角度の値を決めるかを設定できま す。

サーボモータ出力

まずはジャイロセンサの効き具合を確かめるため、激しく動いてもモータロックなどを起こす可能性が低い 関節をいじってみましょう。
ダイアログ上部の「サーボモータ選択」の項目より、首ヨー軸や腰ロール軸など、大きく動かしても比較的 安全な関節を選んでください。
ちなみにRobovie-iの場合は腰ロール軸のCN2-2、RB2000の場合は首ヨー軸のCN5-3を設定してください。

「サーボモータ選択」を設定したら再び「出力値設定」に目を戻します。
項目の上部にはなにやら「x = v0 + k * v1 / 0x0100 * v2 / 0x0100」という表示があります。
これと似たような式に見覚えはありませんか?そう、前回出てきたLED設定式と似ています。
LED設定式のように、サーボモータの関節の角度は上記の式の解を使用するのです。
それでは、式の内容を詳しく見ていきましょう。
式の解xは、最終的にサーボモータに送信される関節の角度値です。
v0〜v2は、それぞれ参照する変数の番号です。サーボモータでは最大3つの変数を参照できる形になってい ます。また、v1、v2の参照変数を0番に設定すると、それらの変数は使用しない(式中では0になる)ように なります。
kは任意に設定できる係数です。

ジャイロ設定などを行う前は、v1、v2、kが全て「0」に設定されているので、式中の「k * v1 / 0x0100 * v2 / 0x0100」の部分の答えは0になり、結果としてサーボモータへの出力は「x = v0」(=v0の変数の値が そのまま解になる)という形になります。
それでは、ジャイロセンサの値をサーボモータに効かせるためにはこの式をどう設定すればよいでしょうか ?
なにはともあれ、まずは取得したジャイロセンサの値を使用しないことには始まりません。
まず、v2にジャイロセンサの値が代入される132番(X軸)の値を設定してください。
さて、これだけでは式は成り立ちませんね。v1とkも0以外の数値になるように設定しないと結局これまでの 設定と動作が変わらなくなってしまいます。
ここでは、kに1024、v1に31を設定してください。
kの値は、ジャイロセンサなどにかかる係数であるため、関節ごとのゲイン(効きの強さ)であることがわ かりますが、v1はなんでしょうか?
ここでv1に代入した変数番号31は、ポーズスライダ31番の変数です。ポーズスライダ31番を変数表で確認す ると「ジャイロセンサX軸ゲイン」とあります。つまり、モーション中のポーズごとにジャイロセンサのゲ インを調整するために存在するのです。例えば直立姿勢や起き上がりなど、あまりジャイロを効かせたくな い場面では、ポーズスライダ31番の値を0にしてジャイロセンサのゲインを0にし、逆に歩行などジャイロセ ンサをフル活用する場面ではポーズスライダ31番の値を大きくしてうまくバランスをとるようにします。

サーボモータ出力の設定
首ヨー軸などの軸について、v1を31、v2を132、kを1024に設定する

ジャイロセンサの設定ができたら、一旦ダイアログの「適用」をクリックして設定を反映してください。
設定を適用したら、一度CPUボードの設定だアイログを閉じてください。

続いてメニューの「ポーズ」→「ポーズスライダのプロパティ」をクリックし、ポーズスライダのプロパテ ィ設定ダイアログを開いてください。
設定ダイアログを開いたら、「設定するポーズスライダ」で31番目のポーズスライダを選び、「スライダの 位置/フラグ設定」の「スライダ有効」にチェックを入れて「適用」をクリックしてください。
すると、ジャイロセンサのゲインを設定するポーズスライダを表示するので、新しく表示されたポーズスラ イダの値を256付近に設定してください。
これで、ジャイロセンサを振るとそれに合わせてロボットのサーボモータが動くようになりました。
試しにジャイロセンサ基板を持って振ってみましょう。ジャイロを本体に搭載している場合は、本体ごとゆ すって見てください。

このとき、揺れが小さい場合はCPUボードの設定ダイアログより先ほどの計算式のkの値をもう少し大きくし てください。
また、逆に揺れが大きい場合は、kの値をすぐに変更せず、まずは31番のポーズスライダの値を小さくして ください。
こちらの値を半分くらい(127近辺)にしてもまったく揺れの大きさが変わらない場合は、CPUボードの設定 ダイアログよりkの値をもう少し小さくしてください。

全ての設定が完了したら、メニューの「プロジェクトの設定」→「モードスイッチ/音声の設定・書き込み 」をクリックして、現在の設定をCPUボードのROMに書き込んでください。
これでジャイロセンサの設定は一通り完了です。

では、これと同じ事を他の関節にも設定していきます。
設定に際してのポイントを以下に列挙します。

  • v2に設定する変数は、拡張ボードの搭載方向により132番(X軸)、133番(Y軸)のどちらかを選択する
  • v1には、v2に132番を設定した場合は31、133番を設定した場合は32を設定する
  • kには最初に1024を代入し、変更する場合は数値を倍加/半減させて大まかな当たりを見てから調整する
  • 各種設定後ロボットを立たせて、ポーズスライダのゲインをある程度効かせた状態で前後・左右から

        軽く押してみて、揺れの収まり具合を確かめる。このときの様子で各種ゲインの設定を調整する
  • ジャイロセンサの各軸のゲインをまとめて変更する場合は、

        ジャイロセンサ自体の設定ダイアログより「ジャイロセンサ設定」の「ゲイン」の項目で変更できる
  • 揺れに対する関節の回転方向を逆にしたい場合は、kの値をマイナスにする

ちなみに、RB2000における設定例を以下に記述します。
使用状況によって設定は異なるので必ず以下が正しい設定とは限りませんが、参考としてお使いください。

  • 左足首ピッチ軸(CN1-5):v1=31,v2=132,k=220
  • 右足首ピッチ軸(CN2-5):v1=31,v2=132,k=-220
  • 左足首ロール軸(CN1-6):v1=32,v2=133,k=-220
  • 右足首ロール軸(CN2-6):v1=32,v2=133,k=-220

(基板を地面と平行に、またコネクタを体の正面の方向に向けて搭載した場合)

全ての設定が完了したらCPUボードのROMにデータを書き込んでください。

モーションデータにジャイロセンサを効かせる

ここまでで基本設定は完了ですが、実際にロボットを動かしてみてもどうもジャイロセンサが効いていないようなことがあります。
これは、モーション中にも、各ポーズでジャイロセンサをどれだけ効かせるかという設定をする必要があるためです。

ロボットによっては、新しいプロジェクトを作成した時点でこちらの設定がされていたり、モーションファイルにもbジャイロセンサの効かせ方の設定がしてあるものも多いですが、自作のロボットを使用していたり、ジャイロセンサをつける前に自分オリジナルのモーションを作成した場合は、改めてジャイロセンサをモーションに効かせる設定をする必要があります。

まず、モーション中の各ポーズでジャイロセンサのゲイン(効きの強さ)を設定するポーズスライダを追加します。 ポーズエリアにマウスカーソルを合わせて右クリックし、メニューより「ポーズスライダのプロパティ」をクリックしてください。 クリックするとダイアログを開くので、ダイアログ上部の「設定するポーズスライダ」の項目をクリックし「31:Gyro X Gain」を選択します。


選択したら、ダイアログ下部の「スライダの位置/フラグ設定」より「スライダ有効」にチェックを入れて、ダイアログ最下部の「適用」ボタンをクリックしてください。
最初から「スライダ有効」にチェックが入っている場合は特に設定を変更する必要はありません。


「31:Gyro X Gain」を設定したら、続いて「32:Gyro Y Gain」も同じように設定を変更してください。 両方設定を変更すると、ポーズエリアに図のようなポーズスライダが追加されます。
こちらが、ポーズごとにジャイロセンサの効きの強さを設定できるポーズスライダです。


ここで、ロボット本体と通信を開始してサーボモータをONにしてから、「Gyro X Gain」「Gyro Y Gain」の値を変更してロボットをゆすってみると、数値を大きくするほどジャイロセンサがよく効くようになることが確認できます。
なお、X,Yのどちらが横揺れ・縦揺れに相当するかは、ジャイロセンサ基板のロボット本体への取り付け方によって異なります。

ジャイロセンサをモーションに効かせたい場合は、まずは何も考えずにジャイロを効かせるモーションを読み込み、モーション中のすべてのポーズで「Gyro X Gain」「Gyro Y Gain」の数値を最大にしてください。
多くの場合はこの設定で問題なく動くようになります。


中には、「直立しているときに、逆に揺れが発生するようになった」などの問題が見られる場合があります。これはジャイロセンサが効きすぎている場合におこるもので、この場合は該当するモーション中のポーズより「Gyro X Gain」及び「Gyro Y Gain」の数値を減らしていってください。いきなり半分にしてみてどうなるかなど、比較的大雑把に数値を設定していっても大丈夫です(この調整はモーション作成と同じくトライ&エラーが中心になります)。


ちなみに本サイトのダウンロードコーナーで公開しているモーションデータは、基本的にジャイロセンサの設定をしているため、ダウンロードコーナーにアップロードされている歩行動作などを持ってくるのが手っ取り早いです。

加速度センサで転倒検出

さて、ジャイロ・加速度センサ拡張ボードのもう一つのセンサ「加速度センサ」の使い道についても説明し ます。
加速度センサは物体の傾き具合(加速度)を検出するセンサです。
ジャイロセンサと同じように一軸ごとに検出を行います。
物体の傾き具合を検出するということは、ロボットが倒れたときの体の傾き具合を検出すれば、ロボットが 現在倒れているのかどうかを知ることができます。
ちょうどCPUボードでは、コントローラで操作しているときに操作マップの設定で任意の変数の値を読み取 って、その時の値に応じて設定したモーションを再生する機能が備わっています。
そこで、加速度センサの値を格納した変数を使って、ロボットに転倒検出&起き上がりモーション自動再生 をさせてみたいと思います。

操作マップの作成方法については、連載第6回で詳しく説明していますね。
操作マップを作成する前に、ロボットと通信を開始しておいてください。サーボモータは特にONにする必要 はありません。
次に、メニューの「プロジェクトの設定」→「モードスイッチ/音声の設定・書き込み」をクリックして書 く込みダイアログを表示し、ダイアログ左側のリストから任意のモードスイッチの番号をクリックして選択 し、「操作マップの新規作成」をクリックしてください。
すると操作マップの設定ダイアログが開きます。

ダイアログを開いたら、右側の「アナログ入力設定」に注目してください。
この項目で、数値を読み取る変数と、その変数がモーションを発動するための条件を設定します。
この設定は最大で4つまで個別に使用でき、アナログ1〜4に対して発動するモーションは、ダイアログ左側 のモーションリストの「アナログ1〜4」に割り当てたモーションに対応します。

操作マップのアナログ入力設定

それでは、まず「アナログ入力設定」の項目から設定を開始します。
ここではアナログ1とアナログ2に、うつ伏せからの起き上がり、仰向けからの起き上がりをそれぞれ設定す ることにします。
加速度センサの値を格納する変数は129〜131なので、この中からロボットの前後の倒れ具合を検出する軸の 変数を選び、「参照変数」に番号を設定してください。
拡張ボードを地面と水平に、またコネクタ側が正面に来るように搭載した場合は、加速度センサのY軸(=変 数130番)が前後の倒れ具合を検出できます。

次に、モーションを発動する条件を設定します。
まず「条件選択」より、モーションを発動する条件のパターンを選択してください。パターンは「未定義」 「閾値以上」「閾値以下」「変数=設定値」の四つから選択できます。
この場合、それぞれ「閾値以上」「閾値以下」のどちらかを選択してください(どちらがどちらの条件にな るかは、拡張ボードの搭載方法で異なります)。
続いて「条件詳細」の「設定」ボタンをクリックしてください。すると、以下のようなダイアログを開きま す。

アナログ入力の設定
「参照変数」「条件選択」「条件詳細」をそれぞれ設定する
(写真はRB2000のうつ伏せ時の設定例)

このダイアログでは、加速度センサの値がいくつ以上/以下になった時にモーションを発動するか、その具 体的な値を設定します。
ここで、実際にロボットをうつ伏せ、もしくは仰向けにしてみてください。
「参照変数」に正しく変数の値を設定できていれば、ロボットを倒したときにそれに合わせてダイアログ中 の「変数??の現在値:」の数値も変化します。
ロボットを完全に倒したときの変数の値を調べ、それよりちょっと中心に近い時の値をダイアログに入力し てください。倒したときの数値をそのまま入力すると、ロボットが倒れても設定値に届かない可能性があり 、なかなか起き上がりモーションを発動しない場合があります。
数値を入力したら「OK」をクリックしてダイアログを閉じてください。

最後に、ダイアログ左のモーションリストより、「アナログ1〜4」の対応する箇所に起き上がりモーション を設定してください。
設定が完了したら操作マップを名前をつけて保存し、CPUボードにデータを書き込んでください。

最後に

年末年始のブランクのせいか、イマイチ感を取り戻せていません。
さて、次回はデジタル入出力拡張ボード「VS-IX007」について説明したいと思います。
また、余力があればアナログ入力拡張ボード「VS-IX008」についても説明したいと思います。
これらは比較的扱い方が似ており、またこれまでに説明した「VS-IX001」や「VS-IX004」とも似ている部分 があります。


前のページ
第17回 LED拡張ボードの高度な設定
コンテンツのトップ 次のページ
第19回 アナログ入力拡張ボードを使用する


検索
Loading
メインメニュー