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

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

 

第2回 RobovieMaker2でのモーション作成(後編)

※2007/7/6追記
RobovieMaker2 Release1(バージョン1,0,0,1)にて、演算ブロックを使用したモーションのファイル保存に関するバグが判明しました。
演算ブロックの設定で右辺の参照数値に変数を指定しても、モーションをファイルに保存すると定数として保存されます。
このバグを修正したRobovieMaker2 Release2(1,0,0,2)を公式サポートページにアップロードしております。Release1をお使いの方は、ダウンロードして再インストールしてください。

【VS-RC003/HV公式サポートページ】

RobovieMaker2講習、今回はモーション作成の後編です。
今回はRobovieMaker2のモーションで新しく追加された「演算ブロック」「分岐ブロック」について解説したいと思います。

一般的にプログラミングには「演算」「反復」「分岐」の機能、及び演算結果などを格納するためのメモリが最低限必要となります。
VS-RC003・RobovieMaker2には「ユーザのために解放されたメモリ領域」「ループ・分岐ブロックによる条件分岐」「演算ブロックによる変数の四則演算・代入」「フローの設定によるジャンプ」など、プログラムを組むための条件が一通りそろっています。
いわば本当にロボットのプログラムが組めるようになったということになるでしょう。

メモリマップの概念復習

演算ブロック、分岐ブロックの解説に移る前に、VS-RC003の変数とメモリマップについて少し説明します。
上記のブロックでは任意の変数を参照したり、任意の変数に対して値を代入するなど、必ず変数を使用する必要があります。
そこで、どの変数にどのような役割があるか、また、どの変数に値を代入しても問題ないかなどを把握していないと、作成したモーションが正しく動かなかったり、ロボットがおかしな動作を行なう危険性もあります。

変数の概念については、過去に本連載でも取り上げたことがあるので詳しくはそちらをご参照ください。
また、RobovieMaker2になって変数表に若干変更が加わりました。
最新の変数表はVS-RC003/HVのサポートページにて、RobovieMaker2の取扱説明書と一緒に公開しています。
必ずお使いのRobovieMakerにあった変数表を使用してください。

変数を非常に大雑把に変数を説明すると、VS-RC003の中に値を取っておけるロッカーが256個あり、それぞれのロッカーにはあらかじめ様々な役割が個別に設定されています。
「加速度センサの値」や「アナログスティックの傾き」などCPUボードから常に特定の値が代入されたり、逆に「ジャイロセンサゲイン」などユーザが特定の値を代入することでロボットに様々な動作をさせるものがあります。

演算ブロック・分岐ブロックでは、この256個のロッカーの中から適した役割の番号を選んで使用します。
例えばモーション中に加速度センサの値を読み込んで自動起き上がりをさせる場合は、129〜131のうちロボットの店頭検出に使用する加速度センサの変数を参照し、その値が一定以上(一定以下)で転倒している状態の時に起き上がり動作を実行するように設定します。
同様にアナログ入力拡張ボードを取り付け、そのうちの最初のchにセンサを取り付けた場合、139番目の変数を参照することでセンサの入力状態による条件分岐が可能です。

また、演算ブロックについては基本的にユーザのために解放された「ユーザ変数」のエリアに計算結果を代入します。このエリアはデフォルトの設定ではCPUボードが一切この変数に値を代入したり動作の際に値を参照することがありません。
ユーザ変数は64〜127の変数で、もしユーザ変数以外のエリアに演算ブロックの計算結果を代入すると、ユーザが代入した値が勝手に書き換わったり、ユーザが入力した値にCPUボードが反応して妙な動作を起こす可能性があります。

演算ブロックの説明

演算ブロックは、その名の通り変数の演算を行なうブロックです。
演算ブロックでは、任意の変数に対して、別の任意の変数もしくは定数の値を四則演算・及び代入することが可能です。
演算ブロックをモーションに追加する場合は、メニューより「モーション」→「演算ブロックの追加」をクリックします。
モーションエリアに追加された演算ブロックは、既に存在するブロックにフローが接続された状態になっています。
フローの接続が想定するモーションと異なる場合はつなぎ変えてください。

演算ブロック
【演算ブロック】
上半分にブロックの名前、下半分に演算の内容を記述。「v[**]」は変数、これが付かない数値は定数を表す。
また、右辺と左辺の計算結果を式の左辺の変数に代入する。計算方法は四則演算及び代入で、「=」の左隣の演算子に従う

演算ブロックは上半分にブロックの名前、下半分に演算内容を表示します。
また、ポーズブロックと同じくフローが一つ存在します。
下半分の演算内容については、「v[**]」という記述は計算に使用する変数の番号を表します。また、それが付かない数値は定数を表します。
また、各演算子は、それぞれ「=」(代入)「+」(加算)「-」(減算)「*」(乗算)「/」(除算)を表します。
「+=」や「-=」等の書式は、C言語などでプログラムを知っている方はご存知かと思いますが、「「=」の左の演算子に従って左辺と右辺を計算し、その結果を左辺に代入する」ということになります。
具体的には、「v[90] += 6」であれば、「90番目の変数の値に6を加算して、その解を90番目の変数に代入する」ということになります。
また、「v[90] /= v[75]」であれば、「90番目の変数の値を75番目の変数の値で割って、その解を90番目の変数に代入する」ということになります。

演算ブロックの式表示のサンプル
演算ブロックの式の表記サンプル
下半分の式の表記に関するサンプル。格式の表記については、画像中の説明の通りに処理が行なわれる

これらの演算内容はブロックのプロパティダイアログで設定します。
プロパティダイアログを開く場合は、演算ブロックをダブルクリックするか、演算ブロックにマウスカーソルを合わせて左クリックのメニューより「プロパティ」をクリックしてください。

演算ブロックのプロパティダイアログ
演算ブロックのプロパティダイアログ。
「結果代入変数」に左辺となる変数を設定する。式の右辺は「定数」と「変数」のどちらかを選択する。
「計算方法」にて加算(+)減算(−)乗算(×)除算(÷)の演算子と代入(=)の5通りの計算方法を選択する。
ダイアログ上部では他のブロックと同様名称と座標を設定できる

「結果代入変数」には、式の左辺となり更に演算結果を代入する変数の番号を設定します。基本的にユーザ変数を使用するので、通常は64〜127の任意の値を設定します。
ダイアログ右側では式の右辺を設定します。右辺には「変数」と「定数」のどちらかを設定でき、どちらを使用するかは「変数」「定数」のラジオボタンで設定します。 「変数」を使用する場合は、その右の「参照変数」にて右辺の変数を設定します。「定数」を使用する場合は、その右の「定数」にて右辺の定数を設定します。
その下の「計算方法」は右辺と左辺の計算方法を設定します。前述の通り、「代入」(=)「加算」(+)「減算」(-)「乗算」(*)「除算」(/)の5種類から選択します。
ちなみに、「現在値」の項目には、CPUボードと通信中の場合は設定した番号の変数の現在値がリアルタイムで表示されます。
また、ポーズブロックなどと同様にブロックの名称と座標を設定できます。

なお、一つの演算ブロックでは一つの計算しかできないため、例えば「v[90] = v[90] * 4 + 8」というような計算をする場合は、「v[90]*=4」と「v[90]+=8」の二つの演算ブロックを作成してフローを接続します。(このとき、ブロックのフローを逆にしないように気をつけてください)。

分岐ブロックの説明

分岐ブロックは、任意の変数が任意の条件を満たすかどうかでモーションの再生順序を変更するためのブロックです。
分岐ブロックをモーションに追加する場合は、メニューより「モーション」→「分岐ブロックの追加」をクリックします。
モーションエリアに追加された分岐ブロックは、既に存在するブロックにフローが接続された状態になっています。
フローの接続が想定するモーションと異なる場合はつなぎ変えてください。

分岐ブロック
【分岐ブロック】
上半分にブロックの名前、下半分に分岐条件を記述。
条件分岐は、「一つの任意の変数に対して、一つの条件と一つの比較対象(定数)の状態に応じて、条件の成立の可否の二択」で行なわれる。
形状はループブロックとほぼ同等で、フローもループブロックと同じく通常のフロー(青)、分岐のフロー(赤)の二つが備わっている

分岐ブロックはループブロックと同じく6角形で表示されます。
分岐ブロックは、上半分にはブロックの名前が、下半分には分岐の条件が表示されます。
また、分岐ブロックにはループブロックと同じく「通常のフロー(青)」「分岐のフロー(赤)」の二種類のフローが備わっています。

分岐ブロックの分岐条件の設定は、演算ブロックと同様にプロパティダイアログで行ないます。
プロパティダイアログを開く場合は、分岐ブロックをダブルクリックするか、分岐ブロックにマウスカーソルを合わせて左クリックのメニューより「プロパティ」をクリックしてください。

分岐ブロックのプロパティダイアログ
分岐ブロックのプロパティダイアログ。
「参照変数」には条件の参照元となる変数を設定、「条件設定」で条件比較の方法、「条件詳細」で比較対象となる定数を設定する。

分岐ブロックのプロパティ設定は、「操作マップ」の「アナログ入力」の設定に酷似しています。
ダイアログの「参照変数」には、条件として参照する変数の番号を設定します。
「条件設定」には、分岐条件の設定を以下の8種類より選択します。

  • 未定義:何も条件分岐しません。そのため、必ず通常のフロー(=「NO」)に進みます。
  • 閾値以上:任意の定数を一つ設定し、変数の値がそれ以上なら分岐のフロー(=「YES」)に、

        それ未満なら通常のフローに進みます
  • 閾値以下:任意の定数を一つ設定し、変数の値がそれ以下なら分岐のフローに、それより上なら

        通常のフローに進みます
  • ビット合致:参照変数の下位8bitの内の任意のbitを選択し、選択したbitが任意に設定した条件と

        同じ状態なら分岐のフローに、それ以外なら通常のフローに進みます
  • 閾値=:任意の定数を一つ設定し、変数の値がそれと同じなら分岐のフローに、それ以外なら

        通常のフローに進みます
  • 閾値≠:任意の定数を一つ設定し、変数の値がそれ以外なら分岐のフローに、それと同じなら

        通常のフローに進みます
  • 常に成立:常に条件が成立します。そのため、必ず分岐のフローに進みます。
  • 常に非成立:常に条件が成立しません。そのため、必ず通常のフローに進みます。
「条件詳細」には、「条件設定」で選択した条件に従って、条件の判断に使用するパラメータの設定を行ないます。
基本的には、「ビット合致」の条件設定ダイアログ、「閾値」の関係する設定ダイアログ、ダイアログの関係ない物の三つに分かれます。

「閾値以上」「閾値以下」「閾値=」「閾値≠」の4つの条件については、「条件詳細」で下記のダイアログより任意の閾値を一つ設定します。

閾値の設定ダイアログ
分岐ブロックの閾値の設定ダイアログ。
「閾値以上」「閾値以下」「閾値=」「閾値≠」の四つの条件の「条件詳細」の設定ではこのダイアログが開く。
ロボットと通信していると参照変数の現在値が表示されるので、想定する条件を満たすように閾値を設定する。

ダイアログ中のエディットボックスに任意の閾値を設定してください。
閾値は-32768〜32767の範囲で入力してください。
また、「現在値」には参照変数の現在の値がリアルタイムで表示されます。

「ビット合致」の条件については、「条件詳細」で下記のダイアログより条件判定に使用するbitとそのbitの状態を設定します。

ビット合致の設定ダイアログ
分岐ブロックのビット合致の設定ダイアログ。
「ビット合致」の条件の「条件詳細」の設定ではこのダイアログが開く。
ロボットと通信していると参照変数の現在値が表示されるので、「有効ビットの選択」の項目で条件分岐に使用するbitを選択し、「条件成立値の設定」の項目で条件成立時のbitの状態(0か1か)を設定する。

ダイアログ上部には、変数の現在値とその現在値より条件判定に使用する有効bitのみを抽出した値、そして条件反転の比較の値を表示します。
この、「⇒効ビットのみを抽出した値」と「条件成立値」が一致した場合に条件が成立します。
「有効ビットの選択」の項目では、条件判定に使用するbitを選択します。チェックボックスにチェックを入れたbitを条件判定に使用します。
「条件成立値の設定」では条件成立値を設定します。
この「ビット合致」の条件は、主にデジタル入力やゲームパッドの入力など、一つのbitに一つの役割が与えられている変数に対して有効です。

「未定義」「常に成立」「常に非成立」の3つの条件については、参照変数の状態に関係なく必ず同じ分岐を行なうため、詳細を設定するダイアログが存在しません。

プロパティダイアログで選択した各条件に応じて、分岐ブロックの下半分の条件表記が変わります。
各条件に対する表示は下記をご参照ください。

条件分岐の表記例
分岐ブロックの条件分岐の表記例。
各条件の種類に応じた書式は図中の説明のようになる。

スタートブロック・エンドブロック

最後に、モーションの開始・終了を表す「スタートブロック」「エンドブロック」について説明します。
スタートブロックは一つのモーションに必ず一つだけ存在します。移動はできますが削除、コピー、名前の変更はできません。
モーションを再生すると必ずスタートブロックからモーションが再生されます。
また、スタートブロックより前に再生するブロックは存在しないため、スタートブロックにはフローがつながらないようになっています。

エンドブロックはモーションの終端を表すブロックです。
モーション再生中にエンドブロックを実行するとそこでモーション再生が終了します。
エンドブロックはスタートブロックとは異なり、一つのモーションに複数存在し、メニューの「モーション」→「エンドブロックの追加」でモーションに追加できます。
エンドブロックはコピー、ペースト、削除は可能ですが、名前の変更はできません。
ちなみに、エンドブロック以外のブロックでもモーション再生中にフローのつながっていないものを実行するとそこでモーション再生が終了します。
そのため、モーションにエンドブロックを組み込まなくてもモーション自体は再生できますが、いわゆる見た目に分かりやすくするため、なるべく末端はエンドブロックを追加して接続するようにしてください。

スタート・エンドブロック
【スタートブロック】【エンドブロック】
モーションは必ずスタートブロックから開始され、再生中にエンドブロックを実行すると再生を終了する。。
エンドブロックに接続しなくても、フローの接続の無いブロックを実行するとモーション再生が終了するが、見た目の分かりやすさなどからモーションの末端にはエンドブロックを接続すべき。
いずれも名前の変更は不可能。
スタートブロックは削除、コピー、フローの接続不可能。また、エンドブロックは削除、コピーは可能だがフローが存在しない

暴発の無い起き上がり

さて、ここからは演算ブロック・分岐ブロックを使用したプログラミングテクニックについて解説していきます。
まずは分岐ブロックを使用した暴発の無い起き上がりです。このモーションを作成する場合は加速度センサが必要なのでご了承ください。
RB2000のデフォルトの操作マップなど、起き上がりモーションをボタンに割り当てる設定をしていることは結構多いのではないでしょうか。
しかし、その場合うつ伏せ、仰向け二通りのモーションを使用するためコントローラのボタンを二つも使ってしまいます。更にうつ伏せの時に間違って仰向け起き上がりをして時間をロスしたり、更には通常のアイドリング時に起き上がりを出してしまって転倒してしまうようなこともあります。
一方、加速度センサを「アナログ入力」で判定し、うつ伏せ・仰向けの状態で自動的に起き上がりをさせることも可能ですが、稀に激しい動きをしたあとなど加速度センサの値を誤認して起き上がりモーションが暴発することがあります(RobovieMaker2では操作マップ側でもこの事態を回避できる設定が追加されたのですが、それはまたの機会に説明します)
そこで、分岐ブロックを利用してボタン一つでうつ伏せ・仰向け両方の状態に正しく反応でき、更に直立状態に間違って起き上がりを入力しても動作が暴発しないモーションを作成してみましょう。

やり方は非常に簡単です。
まず一つのモーションにうつ伏せ・仰向けの二通りの起き上がりモーションを組み込みます。
ちなみに、ファイルに保存したモーションを現在編集中のモーションに結合する場合は、メニューの「ファイル」→「モーションのインポート」をクリックし、結合したいモーションファイルを選択します。すると、現在編集中のモーションに読み込んだモーション一式が追加されます。
既に二通りの起き上がりモーションが別ファイルで存在する場合は、これを利用して二つの起き上がりモーションを融合すると便利です。

モーションに両方の起き上がりをインポート
メニューの「ファイル」→「モーションのインポート」で、うつ伏せ・仰向けの両モーションを追加する

続いて分岐ブロックを二つモーションに追加します。
追加したらスタートブロックとエンドブロックの間に二つの分岐ブロックをつなげます。この間にポーズは接続してはいけません(下図を参照してください)。
次に、分岐ブロックのプロパティダイアログを開き、参照変数をロボットの前後の転倒に応じて変わる軸のものに設定します(通常は129か130になると思います)。
そして、「条件設定」の項目で「閾値以上」か「閾値以下」を選択し「条件詳細」をクリックします。
ここで、ロボットと通信していて、且つサーボモータをONにしている場合、ロボットを寝かせてそのときの加速度センサの値を確認します。
ロボットの仰向け・うつ伏せの各状態においてそれぞれ条件が成立するように閾値の設定を行ないます。
最後に、分岐ブロックの分岐のフローをそれぞれの起き上がり動作に接続します。これで、モーションを再生した瞬間の加速度センサの状態により、うつ伏せ・仰向けを自動判別して正しい起き上がりを再生します。
また、うつ伏せ・仰向けどちらの状態でもない場合は何もポーズを実行せずにモーション再生を終了します。

分岐ブロックでうつ伏せ・仰向けの両方の起き上がりの分岐を設定
分岐ブロックで仰向け・うつ伏せの両方の分岐を作成して、それぞれの動作にジャンプする。
図中の条件分岐の設定は適当なので、実際に作成する場合はロボットを傾けてみて計測すべき

for文ループの再現

一般的なプログラム言語にはだいたい備わっている「for文」によるループを分岐ブロックと演算ブロックを利用することで可能です。
まず、カウンタとして使用するユーザ変数を一つ設定します。
カウンタの変数を決めたら、ループの先頭でカウンタを0に初期化します。演算ブロックを一つ追加し、カウンタの変数に0を代入してください。
次にループ中のカウント処理を追加します。まずは基本にのっとり1回のループでカウンタが1加算されるようにします。演算ブロックをもう一つ追加し、カウンタの変数に1加算する処理を設定します。
続いて折り返し処理を追加します。分岐ブロックを一つ追加し、条件分岐の設定で参照変数を設定したループカウンタにします。そして、条件に「閾値以上」を設定し、「条件詳細」で想定の繰り返し回数を入力します。
あとは、各モーションのフローの接続を下図のように設定します。

for文ループ
変数80をカウンタ変数として使用。最初に変数の値を0に初期化し、1ループごとに変数に1加算する。
ループ回数が規定を超えるかどうかを分岐ブロックで確認

最初に一度だけカウンタを初期化する演算ブロックを実行し、後は「動作」→「カウンタ加算」→「カウンタの条件分岐」の動作を繰り返すという仕組みです。
この仕組みでは、従来のループ構造と異なり、一つのモーションで正常に機能する複数のループを作成できたり、ループの中にループを入れることができます(ループ中にループを入れる場合は、カウンタ変数を複数用意してください)。

ちなみに、whileループはもっと簡単に実現できます。
分岐ブロック一つで以下のようにループを組むだけですね。

while文ループ
分岐ブロック一つでwhile文ループを作成

変数同士の比較

「分岐ブロックは変数と定数しか比較できないので、二つの変数を比較しようとしてもできない」という考えは一見当然のように思えます。
しかし、演算ブロックとユーザ変数を使用することで、間接的に二つの変数の値を比較することが可能です。

ここに比較したい二つの変数A,Bがあったとします。この二つを比較する場合、一つのユーザ変数と二つの演算ブロック、そして一つの分岐ブロックで比較ができます。
まず演算ブロックで任意のユーザ変数に変数Aの値を代入します。
次に、別の演算ブロックで変数Aの値を代入したユーザ変数に変数Bの値を引き算します。
そして最後に、分岐ブロックで変数Aの値を代入したユーザ変数に対して、「閾値以上」の条件で閾値を「0」にします。
これで、変数A≧変数Bの場合、分岐ブロックの分岐のフロー(「YES」)に、変数A<変数Bの場合、通常のフロー(「NO」)にそれぞれ分岐します。

二つの変数の比較
二つの変数の比較。
ユーザ変数に一方の変数を代入し、代入したユーザ変数ともう一方の変数を引き算する。
その答えが0以上かどうかで、どちらの値が大きかったかを判断できる。

種明かしをすると、最初に演算ブロックで間接的に「変数A-変数B」を行なっています。
ここで、変数Aの値を代入したユーザ変数が0より大きい場合は、変数Aは変数Bより大きいことになります。
逆に、変数Aの値を代入したユーザ変数が0より小さい場合は、変数Aは変数Bより小さいことになります。
もちろん、ユーザ変数を使わずに変数Aと変数Bを直接引き算する方法もありますが、変数A,Bがセンサの値などの場合は逐次CPUボードが最新のセンサ値を変数に上書きするので、求めた引き算の答えがすぐに消えてしまい使い物になりません。

平均値を求めるプログラム

さて、次は平均値を求めるプログラムです。
モーション中に、センサなどの平均値を求める場面というものがあるかもしれません。
例えば同一方向に向けた複数のPSDセンサの平均値を求める場合は このように複数の変数の平均値を求める場合は、演算ブロックで任意のユーザ変数に平均を求める値を加算していき、最後に除算すると求められます。
しかし、同じ変数の値を時系列で記録し平均値を求める場合は、「毎回書き換わる変数の値を、別の変数に分けて時系列にデータを蓄積する」という処理を行なわないと実現を求められません。
これについては一つずつ説明していくと大変なので、先に答えを載せてしまいましょう。

平均値の算出
過去5回分のセンサ値をユーザ変数90〜94に記録し平均値を求める。

処理は大まかに二つに分かれます。
まず最初はセンサ情報の蓄積を行ないます。このモーションでは、過去5つのセンサ値が変数90〜94に蓄積されます。
「v[94]=v[93]」「v[93]=v[92]」「v[92]=v[91]」「v[91]=v[90]」という一連の流れで、古い数値より順次次の変数へ受け渡しして行きます。
そして、「v[90]=v[130]」にて最新のセンサ値をログに追加します。ここまでで、常に最新から6つ分のセンサ値のログが変数に記録されます。
次に平均を求める処理です。ここは単純に、ユーザ変数95に変数90〜94の値を加算し最後に6で割るだけです。
この一連の流れで、何度ループさせても毎回その時に応じた平均値を求めることが可能です。

ちなみに、モーション開始直後には変数90〜94には何の値が入っているか分かりません。 変数90は最初のループで最新のセンサ値が代入されるため正しい値になりますが、それ以外の変数はどのような値が入っているのか分からず正しい答えが出ません。
さらに、5回ループを行なわないと変数94まで正しくセンサの値が代入されません。
そのため、最初から正しい処理を実行するためには、モーション開始時に変数90〜94の値すべてに現在のセンサ値を代入し初期化する必要があります。

最後に

さて、今回の内容はプログラム寄りになったため、分からない人には難しく感じたのではないかと思います。
要はロジックの組み立て方なので、プログラムを全く分からない人でも、変数の変化を順序だてて考えられれば簡単にモーション作成ができるようになるのではないかと思います。

ちなみに、VS-RC003には別売りの拡張ボードで入力ポートを拡張しますが、一体どのくらいまで入力ポートを増やすことができるのでしょうか?
アナログ入力拡張ボード「VS-IX008」は、1枚の拡張ボードで8chのアナログ入力を追加できます。更にIXBUSはデバイスをチェーン状に接続可能な通信形式、つまり同時に複数の拡張ボードを接続して使用できます。
8chアナログ入力ボード「VS-IX008」は、VS-RC003に合計4枚同時に接続でき、合計32chのアナログ入力を使用できます。
このボードはジャイロセンサと共通の仕様となっているため、ジャイロ・加速度センサ基板「VS-IX001」を1枚使用する場合はVS-IX008は同時に3枚までの接続になりますが、それでも24chのアナログ入力を使用できます。
また、デジタル入出力拡張ボード「VS-IX007」は、1枚の拡張ボードで16chのデジタル入出力を追加できます。「VS-IX007」は最大でVS-RC003に8枚まで接続可能なので、合計128chのデジタル入出力を使用できます。
更に前述のアナログ入力ボード「VS-IX008」と「VS-IX007」はジャイロセンサのように同時に使用する場合の制限が無いので、最大で32chのアナログ入力と128chのデジタル入出力を使用できます。
ここまでセンサ類をつなげられるCPUボードもそう無いのではないでしょうか(もちろん各デバイスの電源確保や重量という物理的な問題はありますが)。

せっかくなのでもう一つウラ技の紹介を。
CPUボードのメモリについて、今回の内容でユーザ変数を使うように説明していますが、実はユーザ変数以外にも役割は決まっていても実際にはまだ使われていない変数が存在します。
例えば128〜191のIXBUS用変数については、IXBUSを使用しなければユーザ変数として使うことができます。
メモリ不足の折、こういう普段使われていないエリアを開拓するのは古のマイコン技術に通ずるものがあります。
ただし、ユーザ変数以外の使用はあくまで想定範囲外なので、使うときは自己責任でお願いします。

さて、今回でモーション作成編は終了です。
次回はRobovieMaker2で加わったサーボモータの個別脱力機能について解説したいと思います。
単純な脱力機能の説明にとどまらず、コントローラのボタンに「脱力ボタン」を設定する方法や、更には時間があれば脱力設定用のチェックボックスの応用までできればと思います。


前のページ
第1回 RobovieMaker2でのモーション作成(前編)
コンテンツのトップ 次のページ
第3回 サーボモータの個別脱力機能


検索
Loading
メインメニュー