トピックファイル中の命令変数と引数(1)動作編

iBotのシステムは、トピックファイルを中心にしている。対話の中で様々な動作を入れたり、顔を認識させたり、テレパシーを相手に送ったりするなどの機能は、すべてトピックファイルの記述されている。そして、その基本は、変数であり、変数の名前、変数の引数がいろいろな意味を持っている。
今回、関節を独立に自由に動かすための、コマンドをトピックファイルの中に入れるに当たって、引数の与え方を拡張する。それにあたって、いままで、様々な機能を組み込んできて、複雑になっているので、まず、これまでの方法を整理しておこうと考えた。
(動作)
動作については、トピックファイルの中に、$ファイル名_動作タイプ_番号=1
(※ 二つのアンダースコアーで区切っている。したがって、トピックファイル名にアンダースコアを使ってはならない)
という形で入れることを基本にしていた。
QiChatのトピックファイルの変数は、無条件でグローバル変数になるので、複数のトピックファイルを有効化したときに、名前のバッティングが問題になるのでファイルの中での一意性だけを考えれば良いようにしている。
動作タイプは、
walk
navi
sitdown
standup
lyingback
crouch
をさしあたって組み込んでいる。このうち、walk とnaviについては、引数が必要である。
たとえば、walkの変数が、$testfile_walk_001である場合、次のようなコメント文をトピックファイルの中に組み込む。
## <ibot motion walk>testfile_walk_001,0.5,1.2,30</ibot motion>
これは、前方50cm、左方向1.2mに左に30度回転する形で進むということになる。(実際、方向と回転を同時に指定すると動きが複雑になって思うようにいかない場合が多かった。)
対話の本文の中に、
$testfile_walk_001=1
と入れたところで、歩行が実行される。
引数のいらない歩行のポーズコマンドは、そこに値1が代入された時点でポーズの実行動作に入る。たとえば、
$testfile_sitdown_001=1
と会話本文に入っていれば、座る動作をする。
(動作終了イベント)
一般に、動作が終わると、また次の対話、あるいは動作に入るので、iBotの動作変数については、終了後のイベントを自動的に登録している。たとえば、先の$testfile_walk_001=1というイベントが終了するとdid_testfile_walk_001というイベントが自動的に発火する。それを捉えるためには、たとえば、
u:(e:did_testfile_walk_001) 次は何をしましょうか。
と会話文を置いておくと、動作終了時に「次は何をしましょうか」とロボットが喋ることになる。
(次回は、顔認識のためのトピックファイル)