このチュートリアルで実際にR-CODEでプログラミングしてみましょう。 1. サウンドコマンダーでAIBOを操縦する。 簡単な仕様 それぞれのサウンドコマンダーのボタンが押されたときの音を聞いてAIBOが対応したモーションを再生する。 サウンドコマンダーのボタンとモーションの対応は、以下のようにしてみましょう。 サウンドコマンダーのボタン 動作するモーション 前進(2) -------> 前進する 停止(5) -------> 停止する 左回転(4) -------> 左回転する 右回転(6) -------> 右回転する 喜ぶポーズ(#) -------> 喜ぶポーズ 悲しむポーズ(*) -------> 悲しむポーズ AIBOがサウンドコマンダーの音を認識した時は、System変数の一つであるMelody_idに認識した音の番号が代入されます。 以下は、サウンドコマンダー音がAタイプの時のMelody_idの一覧です。 サウンドコマンダーのボタン Melody_id 前進(2) 49 停止(5) 119 後退(8) 56 左回転(4) 70 右回転(6) 63 喜ぶポーズ(#) 91 悲しむポーズ(*) 98 それでは、簡単なフローを書いてみましょう。スタートから始まり、Melody_idが49 だったら 前進コマンドを実行してスタートに戻りMelody_idが56だったら後退コマンドを実行といったように同じ構成のものが並んでいる シンプルなものです。 フローを見ながら、実際にテキストエディターでプログラミングをしてみましょう。 もちろんテキストエディターでなくてもWindowsに標準でついているメモ帳でもかまいません。 まずは最初にコメントでも書きましょう コメントは "//" と記述するとその行の最後までコメントになります。 --------------------------------------------------------------------------- // サウンドコマンダーでAIBOを操縦プログラム // // Create by アイボ太郎 --------------------------------------------------------------------------- AIBOに動作をさせるには、モーターに電源を入れなくてはいけません。 Powerに'1'を代入するのでSET命令を使います。 この一行でAIBOのモーターに電源が供給されます。 --------------------------------------------------------------------------- SET:Power:1 --------------------------------------------------------------------------- ちなみにモーターの電源を切るには SET:Power:0 になります。 次は、System変数のMelody_idの値を見て実行させるコマンドを変えてみましょう。 命令を分岐させるにはIF、SWITCH、CSETなど用意されていますが、ここではSWITCHを使ってみましょう。 SWITCHの構文は、この様になります。 SWITCH:x CASE:1:<x が1だったら実行される> CASE:2:<x が2だったら実行される> CASE:3:<x が3だったら実行される> "x"にMelody_idを当てはめて、PLAYコマンドも入れるとこのようになります。 --------------------------------------------------------------------------- SWITCH:Melody_id CASE:49:MOVE:LEGS:WALK:0:1:1 CASE:119:PLAY:LEGS:WSToStand CASE:56:MOVE:LEGS:WALK:0:6:1 CASE:70:MOVE:LEGS:WALK:13:: CASE:63:MOVE:LEGS:WALK:12:: CASE:91:PLAY:ESC:BANZ_SIT3_C CASE:98:PLAY:ESC:3SAD2B_STA --------------------------------------------------------------------------- Melody_idの値は変更されるまで、保持し続けるので。 このあたりで初期化しておきましょう。 --------------------------------------------------------------------------- SET:Melody_id:0 --------------------------------------------------------------------------- PLAYコマンドを連続して記述すると、命令が上書きされてしまうので、今回は 動作コマンドは最後まで実行させたいので、WAITコマンドを使います。 --------------------------------------------------------------------------- WAIT --------------------------------------------------------------------------- 次は、もう一度処理を繰り返したいので、GO文を使い実行をジャンプさせます。 --------------------------------------------------------------------------- GO:Start --------------------------------------------------------------------------- ジャンプさせる先を定義していなかったので、前半の行のSET:Power:1の次あたりに ラベルを定義しておきましょう。 --------------------------------------------------------------------------- SET:Power:1 :Start --------------------------------------------------------------------------- ここで一度全体を見てみましょう。 --------------------------------------------------------------------------- // サウンドコマンダーでAIBOを操縦プログラム // // Create by アイボ太郎 SET:Power:1 :Start SWITCH:Melody_id CASE:49:MOVE:LEGS:WALK:0:1:1 CASE:119:PLAY:LEGS:WSToStand CASE:56:MOVE:LEGS:WALK:0:6:1 CASE:70:MOVE:LEGS:WALK:13:: CASE:63:MOVE:LEGS:WALK:12:: CASE:91:PLAY:ESC:BANZ_SIT3_C CASE:98:PLAY:ESC:3SAD2B_STA SET:Melody_id:0 WAIT GO:Start --------------------------------------------------------------------------- 全体を眺めてみると、PLAYコマンドを実行しているときは音を認識している時間は ありそうですが。プログラムがぐるぐると回っているときは、認識の途中で SET:Melody_id:0 ですぐに初期化されてしまいそうなので。時間稼ぎのWAITコマンド を入れることにします。 WAITに第2引数に[ms]で時間を指定できますのでこのようになります。 --------------------------------------------------------------------------- WAIT:2000 --------------------------------------------------------------------------- 完成したプログラムの全体を見てみましょう。 --------------------------------------------------------------------------- // サウンドコマンダーでAIBOを操縦プログラム // // Create by アイボ太郎 SET:Power:1 :Start SWITCH:Melody_id CASE:49:MOVE:LEGS:WALK:0:1:1 CASE:119:PLAY:LEGS:WSToStand CASE:56:MOVE:LEGS:WALK:0:6:1 CASE:70:MOVE:LEGS:WALK:13:: CASE:63:MOVE:LEGS:WALK:12:: CASE:91:PLAY:ESC:BANZ_SIT3_C CASE:98:PLAY:ESC:3SAD2B_STA SET:Melody_id:0 WAIT WAIT:2000 GO:Start --------------------------------------------------------------------------- 完成したプログラムを"R-CODE.R"のファイル名で保存しておきましょう。 ついに実行です。 実行させるのに必要なものは、R-CODE110の入ったOPEN-Rフォルダーと先ほど作った R-CODE.Rのプログラムです。
+--------+ |スタート| +--------+ | |<------------------------------------+ | | v | +---------------------+ +--------------+ | |Melody_id=49?(前進) +---->|前進コマンド +--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=119?(停止) +---->|停止コマンド +--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=56?(後退) +---->|後退コマンド +--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=70?(左回転)+---->|左回転コマンド+--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=63?(右回転)+---->|右回転コマンド+--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=91?(#) +---->|喜ぶコマンド +--->| +---------------------+ +--------------+ | ↓ | +---------------------+ +--------------+ | |Melody_id=98?(*) +---->|悲しむコマンド+--->| +---------------------+ +--------------+ | | | +--------------------------------------+
| 1. | "メモリースティック"にOPEN-Rフォルダーごとコピーします。 |
| 2. |
作成したR-CODE.Rのプログラムを 1 でコピーしたOPEN-Rフォルダーの中にコピーします。コピー先 E:\OPEN-R\R-CODE.R 使用環境によっては、"メモリースティック"ドライブ名が違う場合があります。 |
| 3. | "メモリースティック"をAIBOに差込ます。 |
| 4. | AIBOのポーズボタンを押し戻します。 |
| 5. | AIBOが座るに姿勢になったらサウンドコマンダーのコマンドタイプがAになっていることを確認してからGAMEボタンを押してから 2, 4, 6, 8, *, # のボタンを押します。AIBOが認識してそれぞれ割当てられたコマンドを実行するはずです。 |