複数台のロボットの動作制御を統一的な形式で表現するために,個々のロボット やセンサー系をロボティックエージェントとみなし,エージェントの階層モデル の提案を行なった.その階層モデルを記述するために,KLICを親言語としたエー ジェント言語R2とエージェント記述形式D2,及びR2で記述されたプログラムを KLICに変換するためのコンパイラを開発した.
R2はエージェント間のストリーム通信によるメッセージの送受信を 簡潔に記述できる. 上位(下位)エージェントに対するメッセージを ^メッセージ(*メッセージ)で記し, それがガードにある場合は受信, ゴールの中にある場合は送信を意味する. 例えば,次の動作が記述されていたとする.
run :- ^do(pickup(X,Y,R)) | (1) *do(mp(X,Y,70,-90,R)), *do(mp(X,Y,40,-90,R)), *do(gc), run.
これは,上位エージェントから do(pickup(・))
メッセージを受け取ると,
下位エージェント
に do(mp(・)),do(mp(・)),do(gc)
のコマンド列を送信する.
ストリームを表す論理変数は省略され,
メッセージ送受信文は順序づけられている.
R2によるロボティックエージェントの定義は図1 のようになる. エージェントは new述語を呼び出すことによって生成され, 下位エージェント群の生成( init述語)と 動作制御のゴール( run述語)が実行される.
メッセージ送受信文では通信相手となるエージェントは省略される. 上位エージェントは1つしかないので問題ない. 下位エージェント群へのメッセージはブロードキャストで送られる. 下位エージェント群からのメッセージはマージされ, 上位エージェントで1つずつ処理される. 同じ上位エージェントをもつ兄弟エージェントへのメッセージは 一旦上位エージェントに送られ, 兄弟エージェントにブロードキャストされる.
R2-D2により様々な協調作業が複数の,また異なったロボット間で実現できる. 図2はその一例として,移動ロボットと腕型ロボットの 記述例を示したものである.
R2-D2プログラムを並行論理型言語処理系KLICのプログラムに変更する コンパイラの作成を行なった. 表1は上記の 移動ロボットマニピュレータのR2-D2によるプログラムがKLICに変換される際, プログラム量がどれだけ変化するかを示したものである. この表の数値は,R2-D2/KLICの各々の個数,行数を表している. 特に,記述すべき論理変数の数においては, 双方ともKLICの4割弱まで簡易化されている. これは,本仕様を用いることでロボットの種類に関係なく, 複数ロボットのマルチエージェントシステムを容易に記述できることを示している.
R2-D2を用いることで, 複雑なロボット協調制御プログラムを階層的なエージェント定義として, 簡潔に記述することができる.
エージェント | 節 | ガード | ゴール | 論理変数 |
root | 3/3 | 0/0 | 7/13 | 12/35 |
robotic_agent | 7/11 | 8/13 | 11/23 | 42/150 |
nomad | 4/8 | 2/6 | 8/16 | 16/87 |
arm | 4/8 | 2/6 | 15/23 | 44/122 |
socket | 2/4 | 1/3 | 9/11 | 26/51 |
合計 | 20/34 | 13/28 | 50/86 | 140/445 |
その他 | 15 | 14 | 12 | 132 |