名称

        EDIT - プログラムのロード( PC→AIBO のプログラム転送 )



形式
        EDIT
        〜 program 〜
        END

引数
        無し

解説
        EDIT から END までの R-CODE プログラムをメモリーに記憶します。
        それまでにメモリーに入っていたプログラムはすべて消去されます。


        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END



名称

        END - プログラムのロードの終端



形式
        EDIT
        〜 program 〜
        END

引数
        無し

解説
        EDIT の説明を参照


        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END



名称

        RUN - プログラムの実行



形式
        RUN

引数
        無し

解説
        メモリーに入っているプログラムの実行を開始します。


        RUN



名称

        EXIT - プログラムの終了



形式
        EXIT

引数
        無し

解説
        実行中のプログラムを停止します。


        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        EXIT
        END



名称

        HALT - プログラムの終了 / AIBO のシャットダウン



形式
        HALT

引数
        無し

解説
        実行中のプログラムを停止し、AIBO を Shutdown します。
        Shutdown には数秒の時間が掛かります。


        EDIT
        FOR:i:1:10
          PLAY:ACTION:xxx
          WAIT
        NEXT
        HALT
        END



名称

        INIT - R-CODE の初期化



形式
        INIT:<init_level>

引数
        <init_level>        解説を参照

解説
        INIT:0  R-CODE全体を初期化します。
                起動時に自動的に実行されます。
                ユーザーが使用しないで下さい。

        INIT:1  デバッグモード。
                ユーザーが使用しないで下さい。

        INIT:2  辞書/変数テープルを起動直後の状態に戻します。

        INIT:3  WirelessLAN 接続時の初期化。
                WirelessLAN 接続された時に自動的に実行されます。
                第2引数に機体ID (AiboId) を指定できます。
                ユーザーが使用しないで下さい。

        INIT:4  WirelessLAN Disconnect 通知

        INIT:9  Shutdown & Reboot


        INIT
        INIT:2



名称

        ! - ブレーク(強制停止)



形式
        !        緊急停止を行い、プログラム実行停止
        !!       通常停止を行い、プログラム実行停止
        !!!      緊急停止を行い、プログラム実行停止、環境初期化

引数
        無し

解説
        実行中のプログラムを強制停止します。
        AMS 等の PC アプリケーションからのコントロール用です。


        !



名称

        PLAY - 動作再生



形式
        一般形

        PLAY:ACTION:<action>[:<arg1>:<arg2>:<arg3>]

        PLAY:MWCID:<mwcid>[:<arg1>:<arg2>:<arg3>]


引数

        <action>        Action名

        <arg1〜3>       オプション引数(Actionにより異なる)
                        定数値または変数名を指定できます。

        <mwcid>         MWCommandID

解説
        <action> で指定された動作を再生します。
        <action> に指定できるAction名は ACTION.AMS に定義されたものです。

        <mwcid> で指定された MWCommand を実行させます。
        <mwcid> が既知であれば、MWCommand を実行できます。

        動作の再生を行うために、現在の姿勢が、その動作の開始姿勢であるか
        どうかまず調べられます。
        開始姿勢ではない場合、自動的に開始姿勢までの姿勢遷移が行われます。
        <action> が再生されるのは開始姿勢になってからです。

        引数のパターン
        <水平角>:<距離>   // WALK、KICK、TOUCHなど
        <水平角>          // TURNなど
        <水平角>:<垂直角> // MOVE_HEADなど
        <TARGET>          // SEARCHなど

        角度の単位は [°] です。
        距離の単位は [mm] です。

        <TARGET> に指定できるのは、現在 PINK_BALL だけです。


        PLAY:ACTION:STAND



名称

        STOP - 通常停止



形式
        STOP

引数
        無し

解説
        動作を通常停止します。
        待ち行列(キュー)に溜まっている動作は全て破棄されます。
        現在、動作を再生中の場合は、その動作が完了してから停止します。


        STOP



名称

        QUIT - 緊急停止



形式
        QUIT

引数
        無し

解説
        動作を緊急停止します。
        待ち行列(キュー)に溜まっている動作は全て破棄されます。
        現在、再生中の動作も、直ちに停止されます。

        ※ QUIT した場合、姿勢は不定状態にリセットされます。


        QUIT



名称

        WAIT - 動作の完了待ち(同期)



形式
        WAIT            直前に実行した動作の完了を待つ

        WAIT:<ms>       指定時間待つ
                        <ms>には定数値または変数名を使用できます
                        但し <ms>=0 の場合には WAIT と同義になります
                        また負の値を指定した時の動作は不定です

引数
        <ms>            ミリ秒  [1〜30000]   注:分解能は 32[ms]


解説
        直前の動作が完了するまで待機します。
        プログラムの実行は一時停止されます。

        何も待つものが無い状態で WAIT を実行しても無効です。

        <ms> を指定した場合は、指定した時間だけ処理を一時停止します。


        WAIT
        WAIT:1000



名称

        SYNC - 外部との同期



形式
        SYNC

引数
        無し

解説
        プログラム中で SYNC を実行すると、入力待ちで一時停止します。
        コマンド文字列 "SYNC" を送信することにより、処理を再開します。


        SYNC



名称

        NONE - ノーオペレーション



形式
        NONE

引数
        無し

解説
        何もしない命令です。


        NONE



名称

        PRINT - 印刷(オンラインデバッグ用)



形式
        PRINT:<format>[:<var1>:<var2>:<var3>:<var4>:<var5>]

引数
        <format>        フォーマット文字列

                        %d 10進表示
                        %x 16進表示

        <var1>〜<var5>  変数名

解説
        C言語の printf() に類似した方法でメッセージを表示します。

        <format> に Space や Tab が含まれる場合には、<format> 全体を
        二重引用符 "" で囲ってください。


        PRINT:"x=%d y=%d":x:y



名称

        :<labe> - ラベル



形式
        :<label>

引数
        <label>          任意の文字列

解説
        GO や IF の飛び先に使用するラベルを定義します。
        CALL で呼び出されるサブルーチンの名前にも使用します。

        ラベルは単独では存在できません。ラベルは次の行に付きます。
        ラベルの通用範囲はプログラム全体(グローバル)です。


        GO:Skip
        PRINT:"Never reach this line."
        :Skip
        PRINT:"Skipped!"



名称

        GO - ジャンプ



形式
        GO:<label>

引数
        <label>          飛び先ラベル

解説
        <label> の付いている行にジャンプします。

        サブルーチンまたはスコープをまたがっての GO は禁止されています。
        もし行った場合は、スタックが破壊されプログラムは暴走します。
        ループ構造からの脱出に GO を使うことは問題ありません。

        可能な限り GO の使用は控えてください。


        GO:Skip
        PRINT:"Never reach this line."
        :Skip
        PRINT:"Skipped!"



名称

        IF - 条件判断



形式
        形式1
        IF:<v1>:<op>:<v2>:THEN
        〜 THEN Block 〜
        ELSE
        〜 ELSE Block 〜
        ENDIF

        形式2
        IF:<v1>:<op>:<v2>:CALL:<label>[:<argc>]

        形式3
        IF:<v1>:<op>:<v2>:BREAK

        形式4
        IF:<v1>:<op>:<v2>:<then>[:<else>]


引数
        <v1>             被演算項1
        <op>             比較演算子
        <v2>             被演算項2


        比較演算子一覧

            =            等しい
            ==           等しい
            <>           等しくない
            !=           等しくない
            <            より小さい
            <=           より小さいか等しい
            >            より大きい
            >=           より大きいか等しい
            &            ビット毎の論理積
            |            ビット毎の論理和
            ^            ビット毎の排他的論理和
            &&           論理積(演算項は Bool 値として扱われる: 0 ならば偽/ 0 以外なら真 )
            ||           論理和(演算項は Bool 値として扱われる: 0 ならば偽/ 0 以外なら真 )


        <label>          サブルーチンのラベル
        <argc>           サブルーチン引数の数

        <then>           条件成立時の飛び先ラベル
        <else>           条件非成立時の飛び先ラベル

解説
        <v1> <op> <v2> で構成される条件式を評価し、その結果に
        応じて処理を行います。

        形式1の場合:
        条件式が真の場合は THEN Block を実行します。
        条件式が偽の場合は ELSE Block を実行します。
        ELSE 〜 ELSE Block 〜 は省略可能です。
        必ず ENDIF で終端してください。

        形式2の場合:
        条件式が真の場合に、関数 <label> を CALL します。
        <label> 以降の引数に関しては CALL の説明を参照してください。

        形式3の場合:
        条件式が真の場合に BREAK を実行します。
        ループからの脱出に用います。
        詳しくは BREAK の説明を参照してください。

        形式4の場合:
        条件式が真の場合は <then> ラベルに GO します。
        条件式が偽の場合は <else> ラベルに GO します。
        GO の 注意 を参照してください。
        可能な限り、この形式の使用は避けてください。

        形式5の場合:
        条件式が真の場合は THEN Block を実行します。
        条件式が偽の場合は ELSEIF の条件式を評価 します。
        必ず ENDIF で終端してください。


        IF:x:=:0:THEN
          PRINT:"x is 0"
        ELSE
          PRINT:"x is not 0"
        ENDIF



名称

        SWITCH - 多分岐(コンテクスト値の設定)



形式
        SWITCH:<v>

引数
        <v>            変数名もしくは定数

解説
        <v> の値をコンテクスト値として設定します。

        CASE との組み合わせにより、多分岐を実現します。


        SWITCH:x
        CASE:1:PRINT:"x = 1"
        CASE:2:PRINT:"x = 2"
        CASE:2:PRINT:"(two)"
        CASE:3:PRINT:"x = 3"
        CASE:ELSE:PRINT:"x is not 1"
        CASE:ELSE:PRINT:"x is not 2"
        CASE:ELSE:PRINT:"x is not 3"



名称

        CSET - 多分岐(コンテクスト値の設定)



形式
        CSET:<v1>:<op>:<v2>:<v3>

引数
        <v1>           被演算項1
        <op>           比較演算子
        <v2>           被演算項2

        <v3>           変数名もしくは定数

解説
        <v1> <op> <v2> で構成される条件式を評価し、その結果が真ならば
        <v3> の値をコンテクスト値として設定します。

        CSET は「縦積み命令」です。
        CSET が連続して現れた場合、真になった CSET 以降の CSET は無視
        されます。

        CASE との組み合わせにより、多分岐を実現します。


        CSET:x:<:10:1
        CSET:x:<:20:2
        CSET:x:<:30:3
        CSET:x:<:40:4
        CSET:x:<:50:5
        CASE:1:PRINT:"x < 10"
        CASE:2:PRINT:"x < 20"
        CASE:3:PRINT:"x < 30"
        CASE:4:PRINT:"x < 40"
        CASE:5:PRINT:"x < 50"



名称

        CASE - 多分岐(条件付実行)



形式
        CASE:<const>:<command>

        CASE:ELSE:<command>

引数
        <const>          コンテクスト値(定数でなくてなならない)

        <command>        任意の R-CODE コマンド(但し CASE は除く)

解説
        コンテクスト値が <const> と等しければ <command> を実行します。

        連続した CASE の最後部には CASE:ELSE も指定できます。
        どの CASE の <const> にも等しくなかった場合に ELSE の <command>
        が実行されます。


        SWITCH:x
        CASE:1:PRINT:"x = 1"
        CASE:2:PRINT:"x = 2"
        CASE:2:PRINT:"(two)"
        CASE:3:PRINT:"x = 3"
        CASE:ELSE:PRINT:"x is not 1"
        CASE:ELSE:PRINT:"x is not 2"
        CASE:ELSE:PRINT:"x is not 3"



名称

        FOR〜NEXT - ループ構造



形式
        FOR:<var>:<from>:<to>[:<step>]
        〜 commands 〜
        NEXT

引数
        <var>             ループ変数
        <from>            開始値
        <to>              終了値
        <step>            増分値

解説
        変数 <var> の値を <from> から <to> まで <step> ずつ増加させながら
        NEXT までの文 〜commands〜 を繰り返し実行します。


        FOR:i:1:10
          PRINT:"i=%d":i
        NEXT

        FOR:i:10:1:-1
          PRINT:"i=%d":i
        NEXT



名称

        WHILE〜WEND - ループ構造



形式
        WHILE:<v1>:<op>:<v2>
        〜 commands 〜
        WEND

引数
        <v1>                被演算項1
        <op>                比較演算子
        <v2>                被演算項2

解説
        <v1> <op> <v2> で構成される条件式を評価しその結果が真である間、
        WEND までの文 〜commands〜 を繰り返し実行します。


        SET:i:0
        WHILE:i:<:10
          PRINT:"i=%d":i
        WEND



名称

        REPEAT〜UNTIL - ループ構造



形式
        REPEAT
        〜 commands 〜
        UNTIL:<v1>:<op>:<v2>

引数
        <v1>                被演算項1
        <op>                比較演算子
        <v2>                被演算項2

解説
        UNTIL までの文 〜commands〜 を、<v1> <op> <v2> で構成される
        条件式が真になるまで繰り返し実行します。

        〜 commands〜 は必ず1回は実行されます。


        SET:i:0
        REPEAT
          PRINT:"i=%d":i
        UNTIL:i:>=:10



名称

        DO〜LOOP - ループ構造



形式
        DO[:WHILE|UNTIL:<v1>:<op>:<v2>]
        〜 commands 〜
        LOOP[:WHILE|UNTIL:<v1>:<op>:<v2>]

引数
        <v1>                被演算項1
        <op>                比較演算子
        <v2>                被演算項2

解説
        DO〜LOOP 間の文 〜 commands 〜 を繰り返し実行します。

        DO および LOOP には条件式を指定可能で、どちらかの条件を満たした時に
        ループを抜けます。

        WHILE を指定した場合は条件式が真の間ループし続けます。
        UNTIL を指定した場合は条件式が真になった時にループを抜けます。

        DO にも LOOP にも条件式を指定しなかった場合には無限ループに
        なります。





名称

        BREAK - ループ構造からの脱出  


形式
        BREAK[:<break_level>]

引数
        <break_level>   脱出したいループ構造のネスト数を指定します。
                        定数値である必要があります。
                        変数は指定できません。
                        指定の無い場合は 1 です。

解説
        現在実行中のループ構造から脱出します。
        すべてのループ構造で共通に使えます。


        FOR:i:1:100
          IF:i:>:10:BREAK
          PRINT:"i=%d":i
        NEXT



名称

        CALL - サブルーチンの呼び出し



形式
        CALL:<label>[:<argc>]

引数
        <label>            呼び出すサブルーチンのラベル
        <argc>             事前に PUSH した引数の個数

解説
        <label> のサブルーチンをコールします。
        事前に PUSH 命令で任意個の引数をスタックに積み、渡すことが可能です。
        <argc> にはスタックに積んだ引数の個数を指定します。

        サブルーチンを呼び出した場合、それまでのコンテクスト値はスタックに
        退避され、RETURNで呼び出し元に戻った時に回復されます。


        CALL:sub1

        PUSH:10     // 引数1
        PUSH:200    // 引数2
        PUSH:3000   // 引数3
        CALL:sub2:3



名称

        ARG - サブルーチン引数の取り出し



形式
        ARG:<var>

引数
        <var>                変数名

解説
        サブルーチン引数の値を変数 <var> に取り出します。
        PUSH で積まれた引数と同数のものを ARG で受け取る必要があります。
        受け取りの順番は、PUSH で積まれた順番 FirstIn-FirstOut です。
        通常のスタックのように FirstIn-LastOut ではないので注意してください。


        呼び出し元:
        PUSH:10
        PUSH:200
        PUSH:3000
        CALL:sub
        …

        サブルーチン:
        :sub
        ARG:arg1    // arg1 ← 10
        ARG:arg2    // arg2 ← 200
        ARG:arg3    // arg3 ← 3000
        …          // arg1〜3 は LOCAL 変数として用意されます。
                    // 別途 LOCAL 宣言する必要は有りません。



名称

        RETURN - サブルーチンからの復帰



形式
        RETURN[:<return_value>]

引数
        <return_value>        戻り値

解説
        サブルーチンからの復帰を行います。
        戻り値 <return_value> を指定することが可能です。
        戻り値は呼び出し元で POP を使って受け取ります。


        呼び出し元:
        CALL:sub
        POP:rc     // 変数 rc に戻り値 (123) を受け取る
        …         // 戻り値を返すサブルーチンを呼び出した場合は必ず必要

        サブルーチン側:
        :sub
        …
        RETURN:123



名称

        RET - サブルーチンからの復帰(コンテクスト値切替版)



形式
        RET:<context>

引数
        <context>        コンテスクト値

解説
        サブルーチンからの復帰を行います。
        復帰後、コンテクスト値が <context> に設定されます。
        <context> の値が 0 の時は、呼び出し時のコンテクスト値が回復されます。


        呼び出し元:
        CALL:sub
        CASE:1:PRINT:"case 1..."
        CASE:2:PRINT:"case 2..."
        CASE:3:PRINT:"case 3..."
        …

        サブルーチン:
        :sub
        …
        RET:1
        …
        RET:2
        …
        RET:3



名称

        ONCALL - 割り込み処理ルーチンの登録/抹消



形式
        ONCALL:<v1>:<op>:<v2>:<label>[:<resume_type>:<resume_label>]

        ONCALL:<-n>

引数
        <v1>                被演算項1
        <op>                比較演算子
        <v2>                被演算項2

        <label>             割り込み処理ルーチンのラベル

        <resume_type>       復帰形式
        <resume_label>      復帰後のジャンプ先ラベル

        <-n>                登録削除する割り込みルーチンの数

解説
        <v1> <op> <v2> で構成される条件が成立した時に割り込みルーチン
        <label> を CALL するように登録します。
        条件の指定方法は IF と同等です。

        割り込みルーチンからの復帰は以下のように行われます。
        <resume_type>
          0  割り込みが発生した文に復帰する
          1  割り込みが発生した文に復帰した後、<resume_label> に GO する。
          2  ONCALL文の位置に復帰する
          3  ONCALL文の位置に復帰した後、<resume_label> に GO する。
          4  プログラムの先頭に復帰する(すべてのスタックはクリアーされる)
          5  プログラムの先頭に復帰した後、<resume_label> に GO する。

        上記 2〜5 の場合、対応する ONCALL 以降の ONCALL 登録は抹消されます。
        但し 3,5 の場合には、復帰位置と同レベルの ONCALL 登録は保存されます。

        条件の判定はステートメント(R-CODE の1行)の実行毎に行われます。

        多重割り込みは禁止されています。(無視されます)

        ONCALL はサブルーチンのネストの影響を受けます。
        あるサブルーチン内で登録された ONCALL は、そのサブルーチンを
        抜けると無効になります。


        <-n> を指定した場合、直前に登録した n 個の ONCALL を抹消します。
        <-n> は負の数でなくてはいけません。


        ONCALL:RFLeg_ON:=:1:9000



名称

        RESUME - 割り込みルーチンからの復帰



形式
        RESUME

引数
        無し

解説
        割り込みルーチンからの復帰を行います。
        CALL に対する RETURN に相当します。
        割り込みルーチンからの復帰に RETURN を用いてはいけません。
        復帰位置は対応する ONCALL の <resume_type> に依存します。


        RESUME



名称

        GLOBAL - 大域変数宣言



形式
        GLOBAL:<var>[:<init_value>]

引数
        <var>               変数名
        <init_value>        初期値

解説
        大域変数 <var> を用意します。
        <init_value> を指定した場合は、その値に初期設定されます。

        GLOBAL にも LOCAL にも宣言されていない変数名を使用をした場合は
        R-CODE によってその名前の大域変数が自動的に用意されます。


        GLOBAL:x:0



名称

        LOCAL - 局所変数宣言



形式
        LOCAL:<var>[:<init_value>]

引数
        <var>               変数名
        <init_value>        初期値

解説
        局所変数 <var> を用意します。
        <init_value> を指定した場合は、その値に初期設定されます。

        局所変数はスタック上に用意されます。
        サブルーチンやスコープを抜けた場合、その領域は開放されます。


        LOCAL:y:0



名称

        LET - 変数への値の代入


形式
        LET:<var>:<value>

引数
        <var>                変数名
        <value>              値(変数名もしくは定数)

解説
        変数への値の代入を行います。
        SET のような特殊機能は働きません。


        LET:x:1



名称

        SET - 変数への値の設定



形式
        SET:<var>:<value>

引数
        <var>                変数名
        <value>              値(変数名もしくは定数)

解説
        変数への値の設定を行います。
        変数によっては以下の特殊機能が働きます。

        Power           電源の On/Off を制御します。
                        ※※ 2001/03/09 ※※※
                        挟み込み検出で脱力状態にある時に SET:Power:1 すると
                        ゲインが戻ってしまいます。
                        安全性確保のため、変数 Power による電源 On/Off は
                        機能しなくなりました。
                        変数そのものは残っていますので、プログラムの変更は
                        必要有りません。

        Head_ON        これらの値はセンサーによって一度セットされると自動で 0 に戻らないので
        Head_LONG      SET を使って 0 に戻す必要があります。
        BackF_ON        
        BackM_ON        
        BackR_ON        
        BackFR_LONG      
        BackF_Jaw_LONG  
        Back_Pat        
        BackR_Hit        
        Jaw_ON          
        RFLeg_ON        
        RFLeg_OFF        
        LFLeg_ON        
        LFLeg_OFF        
        RRLeg_ON        
        RRLeg_OFF        
        LRLeg_ON        
        LRLeg_OFF        


        SET:Power:1



名称

        GET - 変数値の参照



形式
        GET:<var>

引数
        <var>                変数名

解説
        変数 <var> の値をコンソールに表示します。
        デバッグ用です。


        GET:x



名称

        CLR - センサー変数のクリアー



形式
        CLR:SENSORS

引数
        無し

解説
        センサー変数のうち、最終値を保持する形式の変数の値を
        0クリアーします。


        CLR:SENSORS



名称

        VSAVE - 変数値の保存



形式
        VSAVE:<var>

引数
        <var>                変数名

解説
        変数の値をメモリースティック上のファイルに保存します。
        保存されるファイル名は

            /OPEN-R/APP/PC/AMS/<変数名>.SAV

        です。

        注意!
        ファイルシステムの制限により、保存できる変数名は
        最大8文字までです。


        VSAVE:x



名称

        VLOAD - 変数値の読込



形式
        VLOAD:<var>

引数
        <var>                変数名

解説
        変数の値をメモリースティック上のファイルから読み込みます。
        読み込まれるファイル名は

            /OPEN-R/APP/PC/AMS/<変数名>.SAV

        です。

        注意!
        ファイルシステムの制限により、読み込める変数名は
        最大8文字までです。


        VLOAD:x



名称

        VDUMP - 変数値の表示



形式
        VDUMP:<var>

引数
        <var>                変数名

解説
        変数の値を以下の書式でコンソールに出力します。

            <変数名> = <変数値>

        WirelessLAN経由で接続している時のデバッグ用機能です。


        VDUMP:x