埋め込みサイトで、apache2も正常に機能し、先に作成したファイルアップロード受け口用のC++で書いたcgiファイルも正常に実行されることが確認できたが、肝心のqimessaging.jsがうまく機能しない。呼び出し中に、ソケットIDがらみのエラーが出る。そのとのサーバーからの呼び出しでは問題なく機能していたのだが。
色々やれば、解決できるのかもしれないが、ふと、そこまでqimessaging.jsに位存在なければならないの??という疑問がふつふつと湧いてきた。ロボットのローカルでサーバーが動いている、C++で書いたcgiの実行ファイルも正常に動く。ロボット内部のライブラリ(システムのも、こちらで作成したもの)も問題ない。だったら、C++で書いたcgiの実行ファイルから、直接、ライブラリのメソッドを呼び出せばいいのではないか??
ふと、それをpythonで書こうかと思ったが、いやいや、それは面倒だ。直接C++で書けば良い。brokerを使えば、コンパクトで汎用性のあるものが作れるのではないかという気がしてきた。
ロボットnaoにapache2ウェッブサーバーをインストール
前に書いた理由で、新たにnaoにapache2をインストールすることにした。手順をメモがわりに書いておく。
(1)apache2の最新版をダウンロードする。ここでは、apache2-2.4.25を使った。
(2)opennaoバーチャルロボットにpsftpなどで転送し、解凍する
(3)解凍したフォルダで、./configure --prefix=ロボット上のインストールしたいフォルダの指定する。私は、rootじゃなく、naoで実行したいので、/home/nao 以下のフォルダを指定した。
(4)普通にmakeとmake installを実行する。エラーは出ない。
(5)インストールしたフォルダごとアーカイブし、naoの実機に転送する。
(6)httpd.confを編集する。私の場合は、portを80から8080に変更。変更しないと、通常のrobotページとバッティングするので。cgiを動かす設定、ドメイン名がコメントアウトされているのをそのまま外す。関係のないドメイン名になっているが、コメントアウトするとスタート時に警告が出るを避けるだけの目的。
(7)ただ、これだけでは、apachectl startとやるとライブラリがらみのエラーが出て、実行できない。そこで以下の操作をやる。
opennaoの/usr/libディレクトリから、次の二つのファイルを取ってくる。
libaprutil-1.so.0
libapr-1.so.0
これをapache2のあるフォルダ以下libフォルダを作成してその下に入れておく。今そのフォルダを、
/home/nao/hoge/lib
だったとしよう。/etc/ld.so.conf.d/にnanoを使って、apache.confファイルを作り、そこに、上記フォルダのパスを書いて保存する。
ロボットのrootになって、ldconfigを実行する。その後、
ldconfig -p | grep libapr
をrootで実行すると、
libaprutil-1.so.0 (libc6) => /home/nao/ibot/www/lib/libaprutil-1.so.0
libapr-1.so.0 (libc6) => /home/nao/ibot/www/lib/libapr-1.so.0
となり、これでOKである。
あとは、ポートを8080にしている限り、rootにならなくても、naoユーザーのままで、apachectl
./bin/apachectl start
を起動すれば、サーバーが立ち上がり、ロボットのipとポートを指定すると、
と、無事立ち上がった。
ロボットにapache2を入れようと
naoには、nginxというウェッブサーバーが入っている。それはそれでいい。しかし、c++で作った実行ファイルをcgiにしたいのだが、nginxにはcgiを直接動かす機能がないので、fastcgiなどを追加しなきゃいけないらしい。それもまた入っているようなのだが、pythonしか動かないような設定になっているように見える。nginxやfastcgiに不慣れなので、不確かなのだが。
これ以上、いじると、元のロボットページなどに影響が出るかもしれないので、別にウェッブサーバーを動かそうと思う。ポートを、80じゃなくて、8080あたりにしておけば、nginxとバッティングしないだろう。
apache2は長年使い慣れている。ちょっと重たいが、まあ、それほどディスクを食うわけではない。
ただ、前にも書いたように、ロボットには、g++などの開発ツールは入っていないので、opennaoというvirtual-naoを使う必要がある。ここで開発すれば、まあ、naoに持ち込めると踏んでいる。そこで、opennaoでapache2をコンパイルするところまではやった。
あとは、ロボットに持ち込んで、動かすだけだが、今日はこれ以上それをやっている余裕はないので、やめておく。明日は時間が取れると思う。
埋め込みibotシステムへのファイルアップロード
パソコンからトピックファイルを送った時に、受け手のロボットのサーバーにphpがないので、C++で受け取るCGI実行ファイルをつくっていたが、なんとかできてきた。
ドラックアンドドロップで、送ることができて、べんりだ。
見通しが立ってきた。
埋め込み用ibotサイト
ロボットをコントロールするためのWEBシステムibotをロボット自身のサーバー上で動かすための改変をしていたが、それは終えた。いざ、通常のロボットサイトの下にibotというフォルダを作りそこに入れようとしたら、そもそも、ロボットのLinuxでphpが動いていないことに気づいた。
phpでサーバーサイドの処理を行うhtml5システムなので、困った。phpを入れようとすると、gccやらgmakeなどをインストールしなければならず、それが限りなく重たい。そこで、naoqiの指摘ライブラリの中で、ファイルを操作などを行うようにしようと思った。つまり、javascriptからqimessaging.jsでC++で作成したnaoqiのライブラリを呼び出して、サーバー内のファイル操作をやらせるのだ。ただ、パソコンからのファイルのアップロードの受け取り処理をphpにやらせていたのだが、それをライブラリでやる方法が今ひとつわからない。
iBotをロボットに埋め込む
naoには、ウェッブサーバーが常に稼働しているので、そのサーバーの元でibotを動かし、PCやスマホからそのibotにアクセスすればロボットをこれまでのようにコントロールできるようにする。
そうすればサーバーとしてのPCも不要になり、システム操作が単純化する。PCからもアクセスできるが、基本、スマホからのアクセスを前提とすれば良い。そのためにiBotを最初から作り直そうと思っている。
ibotサイトを作り直す
ibotの無駄なところを削げ落とし、mobileにも対応したものにしたい。今のシステムを変えようとしたがうまくいかない。最初から作り直したほうがいい。時間かかるが仕方がない。
人工知能のインターフェイスとしてのロボット
ロボットに一つのお笑い芸をさせたい。
具体的には、即興的に与えられた大喜利のお題に答えるというものだ。お題に対して答えるのは、人工知能的にやらせれば良い、答えをコンピュータから出すのではなく、ロボットにさせた方が、人は答えを受け止めやすい。
ロボットは、インターフェイスとなるのだ。
大喜利の答えを集めて、人工知能の教育材料とするためのサイトを作成した。
http://aicomedian.com(その後中止)
どなたでも、遠慮なく、ぜひ試していただきたい。
ibotをバージョンアップする
一つ大きな仕事があって、安定したibotシステムで対応しなければならなかったので、本格的な変更を全くしなかった。それが終わって、これからもっといいシステムにする。当面の改良すべき点は、
(1)複数ロボットを扱っている時Qimessaging.jsからsessionオブジェクトを、毎回作り直していたが、これが無駄なので、sessionを連想配列の中に入れて、使い回せるようにする。
(2)telepathyがやはり不安定なので、現在のような複数ロボットの起動時に、他のすべてのロボットの状態をすべて認識するというのはそのままに生かして、それをたとえやらなくても、あるいは既にやっていたとしても、ibotクライアント側が持っているすべてのロボット情報を事後的にロボットに送り込んで、telepathy通信に用いられるようにする。
さらに抜本的には、先に書いたロボットの聞いた言葉をクライアント側で、文字列に起こして人工知能的処理ができるようにしたい。