名称
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