ピノキオ、Socket問題

iBotコントローラー、ピノキオに、FTPクライアント機能を持たせようとしている。iBotのサーバーから、モジュールをダウンロードして、ロボット(NAOなりPepperなり)の指定場所に置いて、autoload.iniというモジュールインストール設定ファイルを書き換えなければならない。
iBotのサーバーからモジュールをダウンロードするのは、httpプロトコルレベルでできる。しかし、android端末から、ロボットまでは、FTPで送るしかない。そこで、chromeアプリにネットワーク通信のためのsocketプロトコルを入れる必要がある。そこで、android chromeのAPIページに従って、socketを入れようとした。するとそこに、chrome.socketは古いから、chrome.sockets.tcpを使いなさいと書いてあった、そこで、その通りにした。それは確かに、通常のchrome appsの場合はその通りに動くのだが、android cordovaの場合は、古いものしか動かないことがわかった。
これに日曜日の半日を費やした。腹立たしさはあるがどうしようもない。失った時間は取り返せない。人生とはこんな無駄の塊なのだ。

タブレット端末用アプリ:ピノキオ (動作編)

NAO用に開発した(Pepperでも動くはず)iBotモジュールのコントローラーで、タブレット端末用(現時点では、android端末Nexus7)用のアプリを作成した。一応、ピノキオという名前にしておく。まだ、動作制御しか組み込んでいないが、わっしーで試してみた。以下がそのビデオである。

ピノキオは確かにアンドロイドアプリなのだが、細かく言えば、Chrome Apps for Mobile Using Apache Cordovaである。つまり、CordovaというandroidあるいはiOS端末のバーチャルマシンの上で動く、HTML5アプリである。詳しくは、ここに、たいへん、わかりやすい説明(特に、アプリの作成手続きのわかりやすさが他に例をみない程よい)が書かれている。アプリなので、アンドロイドのPlay Store とかiOSのApp Storeに登録も可能である。
すべての機能が組み込まれれば、アンドロイドのストアには登録する予定だが、iOSのストアに登録する努力はしないと思う。無駄な時間と経費がかかる。
ピノキオスクリーン
なにしろ、HTML5なので、開発が簡単である。今回のピノキオの動作機能も、数時間で基本的なところをつくることができた。
このあと、対話機能のコントロール、対話スクリプトの編集機能、ロボットの基礎管理機能、iBotモジュールのインストール機能を、すなわちクラウド上でやろうとしていることのほとんどをここでできるようにするつもりだ。(すでにアイボットのクラウドサイトはHTML5で作成済みなので、移植は簡単のはず)JAVAのjiBotには、スクリプトの編集機能は載せなかったが、このタブレット端末版には、それも含める。
今回作成してみて、実際ロボットのコントロールをモバイル端末からおここなうことは、ロボットという性質上必須だと感じている。
今回の動作モジュールでは、JAVAのjiBotのプログラムをそのままjavascripにt移植したが、全く異質な言語であるのに、やりやすかった。

jiBot on Windows

jiBotがWindowsでも動くようになった。ただし、32ビットバージョンである。問い合わせに回答があった。
"The only two dependencies that you may not have are MSVCP100.DLL and MSVCR100.DLL. These two dll should be provided by http://www.microsoft.com/en-us/download/details.aspx?id=5555 , try installing that"
ということで、いわれとおりインストールしたら動いた。なんで、visual c++ 2010のdllが必要なのか、不思議だな。

iBotのモバイル端末アプリ

jiBotと同様の、iBotコントロールアプリをモバイル端末用にも作ることにした。いまさら、Androidを作るのが面倒だと思っていたが、いま、Chromeアプリをそのまま、モバイル端末に持っていけるようになっていた。Chromeアプリは以前に二つばっかり作って、Chromeウェッブストアにアップしてある。こちらこちら
Chromeアプリは、ブラウザで動くというよりも、単体で普通のアプリのように動くのだが、基本的にHTML5で作成されている。もちろん、OSに依存しない。
iBotサイト、まだ公開していないが、ロボットにか関わる部分はHtml5で作成してある。html, javascript,sccで作ってあるのだ。だから、それほど手をかけずに、Chromeアプリにできるし、従ってモバイル端末アプリ、さしあたってはAndroid端末のものを作ろうと思う。

javaによるibotコントローラー jiBot

java用のqimessaging.jarを使って、対話管理(スクリプトの開始や表示)、動作制御(5cm〜90cmの移動、10度〜180度の回転)、状態把握(バッテリ、ディスク、メモリ、休息、起床、停止、再起動など)、ibotのインストール(モジュールのロボットへの組込み)などをこなす、jiBotのチェックが終わった。
※ このjiBotは、Pepperにたいしても使えるはずである。使用しているすべてのAPIがNAOとPepperとの共用のものだから。
予定通り稼働した。先にビデオで示した、口頭による動作プログラム(長い距離:0.5m〜10m程度まで移動制御できる)とあわせれば、ほぼ、指定場所に、リモートでロボットをセットでき、対話の制御、また、ibotクラウドにつながらなくても、ibotモジュールの制御ができるようになった。

javaを使ってNAOを管理する。

※ クリックすると原寸表示
(ロボットを含むローカルネットへの接続は必須:macとlinuxでは問題なく動く。Windowsについては、32ビットバージョンで稼働する。)

瀬名秀明氏の『ロボット学論集』を読む

分厚い本なので、じっくり読んだというよりも、猛烈な速さで斜め読みした感じだが、面白かった。いろいろ印象に残った点はある。が、二つだけあげておこう。(1)なぜヒーマノイドでなければならないのか、アシモフは、社会自体が人間の身体性にあわせてデザインされているから、汎用性を持っていた方が経済的、と言ったそうだ。
その点で、私が一番注目したのは、どこに書かれていたかは忘れたが、身体的共感性である(そんな意味ではなかったかもしれない)。ロボットに手があれば、われわれはそれを自分の手と同じように感じ、万が一ロボットの手が壊れれば、自分の痛さや不便さを感覚的に再現できる。
(2)瀬名氏が書いている最後のところにある次の部分に刺激を受けた。
「つくる側がすべきことは何か。それは自分の面白いと思うことをロボットに実装させてゆくことである」

ロボットに口述でコマンドを与えて実行させる

久しぶりにビデオを撮った。

この間、iBotの機能として作成した、口述でロボットにコマンドを与え、削除や追加などの編集をし、歩行、回転、スピーチ、さらに対話をさせる機能の一部をビデオで撮った。私の研究室のような狭い部屋では、ロボットの基礎検知機能、衝突防止機能が自動で働いて、そのままではほとんど動かない。これらは、自動生命機能の配下で動いているから、自動生命機能そのものを止めても良いのだが、それは非常に危険である。そうすることで、何度か失敗したので。最低限上記の二つの部分機能を止めれば良い。それらを動かしておくと何が起こるかはご自身で確かめると良い。
途中で方向が少しずれたので足を触ったら、一部けいれんするような歩行になった。ロボットの不明な仕様である。
このあたりがわかるまで、アルデバランの英語サイトフォーラムに何度も問い合わせた。そこでの討論を参考にすると良いだろう。