以下のサイトのビデオをご覧ください。
こちら
月別: 2014年12月
生き物はつながっている:教科書準拠、ぴっきー、のっきーのロボット対話
東京書籍の『新しい理科6』の「4 生き物の暮らしと環境」をはじめるにあたって、子供達に見せたら刺激になりそうな、ぴっきー、のっきーの対話です。ぴっきー、のっきーは、通常の人との対話のようなものもできますが、それでは会話が間延びしてしまうので、ibotのテレパシー機能を使って、対話を実現しています。
今回は特に、ロボット同士の対話の間に、児童との質問と回答のやりとりも挟んでいます。
虚構と真実について、ぴっきー、のっきーが語り合う
テレパシー機能実演:ぴっきー、のっきー地球温暖化問題を語り合う
複数ロボットの動作記録
ロボットの動作を記録することができるようにしたことは既に書いた。が、複数のロボットの場合に、問題が生じる。1台のピノキオで、複数のロボットをコントロールすることを前提にしているので、ロボット名で動作をlocalStorageに1回分だけ記録することができるようにした。テレパシーのロボット探査機能を使って、その時動かしているロボットの名前をセットし、動作を記録する。そして、記録の実行は、そのとき繋いでいるロボットの記録を実行することにした。
テレパシーモジュール:もう一つ問題そして解決
先に困難を書いたが、テレパシーモジュールを機能させる上で、決定的な問題は、ローカルモジュール内で子プロセスからALMemoryのイベントを呼び出せないことだ。数日無駄にした。最終的に、forkでサーバー機能を持たせることを諦めた。そして、結果的にそれでうまくいった。今日、二台のロボットに、人と同じような、素早いレスポンスの対話をさせることができた。2、3日中に、youtubeにアップできると思う。
動作のマクロ機能を追加
ピノキオ(スマホコントローラー)に、動作を記録して再現する機能を追加した。予定した行動をさせる機能としては、口頭でコマンドを与える機能も持っている。二本立てになった。これによって、複数のロボットを操りやすくなった。事前に動作を決めておいて、マクロの実行コマンドだけを与えれば、複数のロボットが一連の動作を、ほぼ同時に開始させることができる。
理解できないことに直面して
この数日テレパシーに関わる作業を続けてきたが、どうしてもうまくいかないことが続いた。ある方向で実行すると動かない、別の方向では動く、これが多種多様に発生して何が何だかわらかなくなってきた。が、おそらく次の二つが原因になっているのではないかと思う。それを書き留めておこう。
(1)あるローカルモジュール内で登録したALMemoryイベントを、同一モジュール内で、raiseEventメソッドで、イベント発生させハンドラを呼び出すことはできない。
そもそもやろうとしていることが奇妙に思える。同一モジュール内だったら、直接そのイベントハンドラに対応する関数を呼び出せば良いからである。ただ、ここで必要になったのは、子プロセスから親プロセスのハンドラを呼び出すことをしたかったわけだ。Linuxのネイティブなシステムコールなどを使えばできるのかもしない。また、naoqiのリモートモジュールだったらこれもできることは確認した。が、ローカルモジュールになった途端できない。そのハンドラを、他のモジュールや、外側のPythonから呼び出すと正常に呼び出すことができる。
できないなら仕方がない。本質的には、他のモジュールから呼び出せる限り問題ないとは言える。
(2)これも不思議なのだが、子プロセスから、textspeechなどの機能を呼び出せないーようだ。親プロセスと子プロセスを取り替えた途端しゃべるので、たぶん、そうだろうと。
JAVAだったか、グラフィックツールはメインスレッドでしかうごかせないなどという制約があったのと同じかもしれない。つまり、ハードウェアをコントロールするAPIは、メインプロセスでしかうごかせないのかもしれないということである。
上記の二つが本当かどうか、絶対にそうだとは言えない。何か他の要因でできないでいるだけかもしれない。しかし、何日も無駄にしたので、腹立ち紛れに書いておいた。
イソップ物語にある、狐と葡萄の話だ。ブドウのふさに跳びついて取れないとわかった途端、狐は「こんなぶどうは酸っぱいに決まっている」と言い捨てて立ち去ったという話だ。高校生の頃に知ったのだが、いまだにこの狐のたくましさが好きだ。