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

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

 

第15回 CPUボードの変数の概念について

年の暮れ、大掃除も年賀状もまだ済んでいません。

今回からいよいよ上級編が始まります。
上級編はかなり専門的な内容になるので、プログラミングを経験された方などで無いとなかなか理解しづらい部分があるかもしれません。そこは、年末年始の休み中にゆっくりと勉強してください。

「変数」とは?

皆さんはBASIC、C言語、JAVAなど、何かプログラム言語を勉強したことはありますか?そんな人にはなじみの深い概念ですが、VS-RC003には「メモリマップ」や「変数」と言う概念が存在します。
今皆さんが使っているPCや、家電製品、ゲーム機など、いわゆるコンピュータには必ず、現在自身がこなしている仕事に関するデータを格納する「メモリ」(主記憶装置)と呼ばれるものが存在します。
例えば皆さんは複雑な計算をするときに、計算の仮定の式を紙などにメモしながら作業を進めますね?また、暗算の得意な人は頭の中に途中の答えを記憶して最後の答えを出したりします。
それと同じで、コンピュータにも計算の途中の式や答えを記録しておく部分が存在し、それをメモリ(主記憶装置)と言います。

一般的なメモリのもっと詳しい概念・説明は以下のページを参照してもらうとして、当然VS-RC003にもメモリが存在し、サーボモータの角度や現在の電圧などが記録されています。

パソコンの仕組み

コンピュータのメモリは、我々の記憶やメモと違って、データがかなり整然と管理されています。例えるなら、メモリはとても広大なロッカーのようなもので、コンピュータは仕事を行うときに記録データをロッカーから出し入れしているのです。
このロッカーには、常に何らかの値が入っていますが、それは状況に応じて刻一刻と変化していきます。このロッカー一つを「変数」といいます。
ちなみに、もしロッカーに入っている数値が永久に変わらなければ、このロッカーは「定数」ということになります。
変数には個々に番号が割り当てられており、コンピュータはこの番号を「番地」もしくは「アドレス」と呼びます。
また、当然ロッカーには無限に物が入るわけではありません。コンピュータの場合、記録するデータの大きさ、つまり数字の桁数に制限があります。
桁数の制限はコンピュータの種類によってさまざまですが、VS-RC003の場合は「0〜65535」、もしくは「-32768〜+32767」までの数値を記録でき(数字の情報に符号を入れるか入れないかで、記録できるデータの範囲が異なります)、それ以上の数値、例えば「65539」というデータを記録しようと思った場合、ロッカーを二つ使って「65535」と「4」というデータに分けて記録します。

ここまで読んで、「あれ?数字はともかく絵や文字なんかはどうするの?」と思われる方もいるかと思いますが、コンピュータは、例え文字だろうと絵だろうと音だろうと、全て数字に直して記録します。
文章なら一文字ごと、絵なら1ピクセルごと、音なら1ミリ秒ごとの音の高さ、のように、いくつもロッカーを使って記録します(本当はデータの種類によって記録方法は異なりますが、わかりやすい例として受け取ってください)。

さて、この変数のロッカーですが、コンピュータはそれぞれの番地に好き勝手にデータを出し入れしているわけではありません。各ロッカーには、格納するデータの種類や用途が割り振られているのです。
コンピュータは、常にそのときこなしている仕事に関係のあるロッカーからデータを出し入れします。中には一定時間ごとにCPUボードがデータを自動的に更新するものもあれば、ユーザがロッカーに数値を代入させ、その内容に応じて仕事の内容を変えるものもあります。
ではここで、ユーザが勝手にまったく関係ないロッカーの中身を書き換えてしまったらどうなるでしょう?そう、予期せぬ事態が起こりコンピュータの仕事が狂ってしまうことがあります。
そのため、ユーザが変数の中身を書き換える場合は、その変数が何のために使われており、書き換えても問題の無いものかを確認しなければいけません。

変数の使いどころ

さて、長々と変数に関する説明を続けましたが、では、これがロボットを扱う上で一体どこに関係あるのでしょうか?
これまでのようにRobovieMakerでモーションデータを作るだけなら、変数のことを考える必要はほとんどありませんが、ジャイロセンサやLED、DIOなどの拡張ボードを使用するとなると、それらを制御するデータを格納するために変数を使用する必要が出てきます。

これらの制御は、拡張ボードが取得したデータをCPUボードのどの変数に格納するか、また、拡張ボードに与える指示はCPUボードのどの変数に入っているのか、などを設定する必要があります。
また、拡張ボード以外にも、上級編では様々なところで変数の設定を行う機会が登場します。実は、サーボモータの駆動もコントローラによるロボットの操作も全て変数を使って動いているのです。
これらの変数を組み合わせることで、通常のモーションでは実現できないような複雑な動きも可能ですが、使い方を誤るとロボットの動きがおかしくなってしまいます。

上級編では、使いこなせれば強力な性能を発揮する変数の有効利用を主軸に進めていく予定です。

VS-RC003の変数表

では、CPUボードには具体的にどのような変数があるのでしょうか?具体的に説明していきましょう。

まず、こちらの「VS-RC003変数表」をダウンロードしてください。こちらには、CPUボードに備わっている全ての変数が一覧で記録されています。
CPUボードには「0〜255」の256個の変数が存在し、ユーザが各変数に対してどの程度の使用目的まで許可されているかが「概要」の項目に、また、ユーザがその変数に対してどのような操作ができるかが「R/W」の項目に記述されています。
「R/W」のRはユーザが読み込みできる、Wはユーザが書き込みできる、という状態を表しています。R/Wの場合は読み書きが両方ともできると言う意味です。
中には、概要が赤や黄色の変数にも「R/W」が可能な変数もありますが、あくまで「操作が可能」という意味であって、実際に内容を書き換えると不都合が生じるものが多いので注意してください。

各変数に対し割り当てられた役割を大まかに分類すると、以下のようになります。

0〜63・・・ポーズスライダの値
RobovieMakerで操作したポーズスライダの値もCPUボードの変数に格納されています。通常、画面中に表示されるポーズスライダはサーボモータと音声を含めて31番までですが、それ以降の番号のポーズスライダも使うことができます。32番以降は主に拡張ボードなどの設定に使用します。
この変数は常にポーズスライダの値がCPUボードから書き込まれるため、ユーザが別の値を書き込むことに使用できません。
ただし、41〜63のポーズスライダをユーザがどう使っても問題ありません。

64〜127・・・ユーザ変数
この部分は基本的にユーザが好きに読み書きできる領域で、CPUボードに何らかの参照命令を与えない限り、勝手に読み書きされることはありません。

128〜191・・・拡張ボード関連変数
この部分は、拡張ボードの制御に関する変数の領域です。この変数に拡張ボードを制御するための情報を書き込んだり、拡張ボードが取得した情報を書き込ませたりします。
147〜191は現在のところ何も使われていませんが、将来的に新しい拡張ボードに対する役割が与えられる可能性があるので、基本的に自由に使用できません。

192〜221・・・サーボモータへのオーバーライド値
サーボモータに対して、ポーズスライダの値を無視して直接角度を指示する場合に、こちらの変数に数値を書き込みます。
かなり専門的な変数なので、内容が理解できる人意外は使用しないでください。変な値を書き込むと、サーボモータがおかしな角度に曲がってしまいます。

222〜255・・・その他
ゲームパッドの入力情報、バッテリ電圧、モード切替スイッチの番号など、様々な役割の与えられた変数のまとまりです。一部未使用の変数がありますが、将来的に何らかの役割を与えられる可能性があり、基本的に使用できません。

このように見ると、余りユーザが自由にいじれる余地が無いように見えますが、そうでもありません。
拡張ボードなど制御に変数の割り当てが必要なものに対しては、あらかじめ専用の変数が設定されているのでユーザ側の変数をつぶす必要がありません。
また、基本的にユーザが変数の内容を読み込む分については滅多に問題が起こらないため、各変数に代入された様々なデータを読み込んで動作に反映させることができます。
例えば、現在の電圧値を読み込んで拡張ボードのLEDの明るさを変えたり、ゲームパッドのアナログ入力の値を読み込んでマスタスレーブを行ったりすることもできます。

次回予告

今回で変数の基本的な概念について説明が完了しました。
次回から拡張ボードの制御について進めて行きたいと思います。
まずはLED拡張ボード「VS-IX004」からです。


前のページ
第14回 年末蔵出し・小技特集
コンテンツのトップ 次のページ
第16回 LED拡張ボード「VS-IX004」を使う


検索
Loading
メインメニュー