Dialog トピックファイルから関節を制御する(1)

表現手段としての体の動きに関心を持っているのだが、まず、手の表現を考えていたら、頭、胴体、足の関節もまとめて動かせるようにしたほうが面倒ではないと考えるようになった。
iBotの基本精神は、すべて対話で制御する、なので、topicファイルから全ての関節をコントロールするようにしようと考えている。
24個の関節について、変化させるべき関節を全て一挙に動かすことができる。実際どうなったかは、また投稿する予定だ。
 

ロボット漫才2『ロボット禁止法』

今から20年後の未来を想定し、ぴっきーとのっきーが漫才をします。国会に「ヒューマノイドロボットの禁止法案」が上程されたという緊迫した状況。なぜそんな法律が・・・・、人に似過ぎたロボットは、人間社会と相いれないのか・・・・

今回は、コマンドモードで作成した一連の動作(登場と退場)の実行を、Dialogのトピックファイルに組み込んだ。位置がずれてしまった。
トピックファイル(台本)はこちらからで見ることができます。

人型ロボット同士の通信プロトコル

様々なヒューマノイドロボットが存在し、また、これからどんどん増えてくる状況の中で、異なった種類のヒューマノイドロボット同士が、コミュニケーションをとるプロトコルが必要だ。
(1)相手の存在を感知すること。携帯から判断するのは面倒だから、赤外線、電波などで感知する規格を整える。
(2)同じローカルネットワークに繋がっている場合には、必要に応じてブロードキャストやその受診をする。
(3)赤外線や、ブルートゥース、超音波、もロボット通信用に規格化される必要がある。
(4)情報交換の手続きの規格化。たとえば、お互いの種類(一位に割り振られたコード番号があれば良い)、名前、所属、基本的な機能、製造目的などが、必要な範囲で相互に交換できるようにする。
(5)現在立っている相互の位置。相互衝突回避の手続き。
(6)ロボット同士の専用言語機能。
など。
できれば、上記のことを、KHR-4HVとNAOの間で試みたいのだが、KHRのほうが、Linuxからロボットを動かす、シリアルボードの認識がうまくいかず立ち止まっている。

KHR-3HVにKCB−4WLを組み込む

製作したロボットKHR-3HVは、無線コントローラーなどと使わない限り、USBシリアルコードで接続しなければならない。無線コントローラーは使う気はない。そこで、当初から予定していた、無線LANボードKCB−4WLを組み込む。そうすると、KCB−4WLには、Linuxが入っていて、Cで組んだプログラムで、ロボットをコントロールするようにもできるということで、昨日からそれをやっていた。ようやく、つなぐことができたようで、苦労した点などを記録しておく。
lanlinux
写真は、ロボットのバックパックを開けたところで、右側がオリジナルのコントロールボードRCB-4HVである。サーボにつながるコードや電源コードで、一部隠れてしまっている。上が頭側である。
左側が、KCB−4WLである。2層構造に組み上げている。上側に、PremierWaveENという、通信とLinuxの本体ボードであり、その下に、インターフェイスボードがあり、USBやシリアル通信のポートが見えている。シリアル通信用のUSBコネクタに線を繋いでいる。
ハード的な組み上げ、配線はマニュアル通りで問題なくできた。ただ、元々のボードについては、当初使っていたネジではなく、頭の短い、左側のボードと同じネジを使わなければ、土台を突き抜けてしまう。ボードにその追加分はついていないが、ロボットを組み上げるときに使ったネジは結構余っているのでそれを使う。
USBシリアルポートをつないで、パソコン(Windows7)側にドライバをインストールし、teratermでシリアル接続(通信速度だけは変更する)をするとLinuxのOSに接続することができるので、まあ、一安心。
問題は、ネットワーク接続である。
ちょっと違和感があるのは、初期接続用に、無線LANの簡単な親機がついていて、パソコンをそれに接続しなければならないことだ。NAOなんかの接続方法より、はるかに面倒な手続きをしなければならない。無線LANのルーターが変わる度にこんなことをしなければならないのかと思うと、勘弁してくださいという感じ。何度も失敗した。
基本的にマニュアルの順序でやるべきだ。注意点だけを書いておく。
(1)まず、ロボットの電源を入れる。配線が正常に行われていれば、しばらくすると、無線の親機が立ち上がる。パソコン側で、ロボット側の親機に接続する。ここで、結構失敗する。そういうときには、ロボットやパソコンを立ち上げ直すとか、今まで使っていた親機を確実に切って立ち上がるとかをやる。繋がっても途中で接続が切れることもある。まいったな。
(2)ディスクに入っているDeviceInstallerを事前にインストールしておいて立ち上げる。ロボット親機に、パソコンの無線が正常に接続していれば、だいたいOK。ただし、マニュアル通りやっても、確実にうまくいかないのは、マニュアルに記載された、ロボットの仮のウェッブページへのログインIDが間違っている。Adminとなっているがこれでは繋がらない。adminと全て小文字で書かなければならないのだ。これを発見するためには、マニュアルについているぼけた画像の方を読み込まなければならなかった。パスワードが間違っているのかと苦労した。
(3)繋げるべき無線LANの設定で、細かい設定がたくさん書かれていて混乱する。何度も失敗した結果、私のルーターに関しては、WEPのセキュリティで、キーを入力する簡単設定で、乗り越えた。が、それまで、10回くらいは失敗している。成功したのが神業のように思える。失敗するたびに、ボードを工場出荷状態に戻す作業が必要になる(マニュアルの最後の方に記載されている)。そうしないと、ロボット側の仮親機がスタートせずに、どうしようもなくなるのだ。
(4)一旦、ロボット側のボードが無線LANに接続すると、DeviceInstallerの検索でボードが見つかるようになる。ロボット側の無線LAN仮親機は使わなくても良い。もちろん、パソコンと、ロボットが同じ無線LANに接続されている必要はある。
(5)当然ながら、ロボットのボードは、固定IPにしなければならない。これは、(4)の状態になれば、マニュアルに記載されている通りで、事後的に設定できる。ロボットが、指定の無線LANに接続するようになるかどうかが、一番の問題なのだ。
(6)電池容量が小さいので、すぐに電池切れで、システムが機能しなくなる。このために設定に失敗したことが何度もあった。その度に充電である。実に面倒である。二つもボードを動かすからだろうか、動かさないサーボモータも電気を食うのだろうか。確かめていないが。
これだけでも、苦労の一部しか書いてないような気がする。しかし、まあ、結果的にうまくつながるようになったので、文句は言えない。が、KHRを知れば知るほど、NAOというロボットの洗練されたシステムが素晴らしく思う。

チャッペック作『ロボット』を読み終える

大学に来るとき、電車の中でチャッペック作『ロボット』の最後の部分を読んでいたために、駅を乗り過ごしてしまった。後楽園で降りるべきところを神保町まで行ってしまった。大学まで歩くと35分。昔は何度も歩いた。ついでだからとそこで降りて、古本屋街で店頭の古本のタイトルを斜め読みしながら、九段下まで行く。九段下から新宿線に乗るつもりが東西線に間違って乗った。また、戻って飯田橋で南北線に乗り、ようやく四谷までついた。その間に、ベンチに座ったりしているときに続きを読み、結局最後まで読んでしまった。
SF的な味わいはない。人間がロボットを生み出す。そのそロボットは、我々がイメージする機械的なロボットではなく、動物的、有機的組織を持つ、人造人間(アンドロイド)といったほうが良いものである。大量の生産されたロボットがて人間を滅亡に追い込む。それによって、ロボットも滅亡の危機に瀕するが、ロボットの中に新しいアダムとイブが生まれ、新しい種となっていく。SFよりももっと、薄気味悪さがそこに漂っている。
あまりに人に似過ぎたロボットが醸し出す薄気味悪さ。それは本質的な問題である。ヒューマノイドロボットは人間に近づこうとしているのか。それは許されない。ロボットはロボットらしい表現、コミュニケーションを持っていなければならない。あまり、この本に関係ないことなのだが。

近藤科学のロボットKHR-3HVを組み上げた



NAOという感せされたヒューマノイドロボットで、対話を中心としたソフトの開発ばかりやってきた。この間、動作のことに関心持ち、人の動きをロボットの関節の動きに写像しようとしていたら、ハードについても基本的なイメージを持っていたいと思うようになった。
そこで、KHR-3HVを購入して組み立ててみた。アキバの3軒ほどのロボットの専門ショップをまわって、関節のコントロールを基本的なところからできるロボットとして、最も優れていると思われるこのロボットにした。動きも数多くライブラリとして組み込まれているので。組み立てに二日を要した。三歩進んで二歩下がるという感じで、組み立てては部分的にまた分解してというように、慣れていない分手間がかかった。正しく組まれているか心配だったが、組み上げて、ニュートラルのポジッションの確認などをしたところ、ビデオにあるように一応正しかったようだ。
現状はシリアルコードでつないでいるだけなので、LinuxOSで、無線LAN搭載のボードを組み込んで、NAOとコミュニケーションさせて動きを捉えて行きたいと思っている。

人の姿勢を真似るロボット1

基本的な戦略はこうだ。
まず、ロボットが見ている画像320X240pxから、人を切り出す。人があるかどうかをチェックするためには、Histogram of Oriented Gradients (HOG法)とSupport Vector Machine (SVM)でやる。認識した人の姿から、HOGに似た手法で、特性値を取り出し、ロボットの関節(20数個ある)の角度ベクトルへの写像関数を推計する。二台のロボットのに方向から推計される姿勢のPointの高いものをロボットが認識した人の姿勢にする。ロボットの関節をその姿勢に向けて動かす。ただし、ロボットが倒れない工夫が難しい気がする。
HOGは、C++のプログラム化した。(SVMができていないので、アルゴリズムが正しいかどうかの検証はしていない、1個の学習画像を読み取り特性ベクトルを計算するまでしか作っていない。学習用の画像読み取りにOpenCVを使っているが、実際の認識の場合は、ロボットのビデオデバイスの画像データを直接読み取る。プログラムの中では、コメントアウトしている。g++のある環境で、makeコマンドをinvokeすればコンパイルできるはずです。)
<一旦公開したが、svmにかけたところデータ作成上に誤りがあるようで、公開を停止した。>
一方、SVMはアイデアはわかるが、プログラム化できていない。20数年前に、ニューラルネットワークやパーセプトロンの経済学への応用に没頭した時期があったが、SVMは、それに似ている。不思議な気がする。
SVMについては、時間をかけて、基本的な理論のところから理解し、プログラム化したいものだ。

人の動作を読み取る

こんなことをさせたいということのかなりのものを実現してきたが、次に、ロボットにやらせたいことは、人の動作を読み取って、自分の動作のためのメタ言語に翻訳することだ。
というのも、この間、ロボットに喋らせることを軸に、人の心とコミュニケーションをとらせるための基礎的な仕組みを作ってきたが、やはり、動作がありきたりでは、届けきれないことに気づいた。
動作を工夫することは、通常のプログラミングでもできる。しかし、次々に多様な動作をプログラミングすることは事実上できない。一番良いことは、人の動作を見て、その動作を自分の(ロボット自身の)体で実現してみることだ。それはすなわち、その動作をするメタ命令が自分の中で創作されていることになる。
それは、すでにロボット工学の分野では実現していることなのだが、私のロボットでもそれをやってみたい。
ロボットの映像をプログラマティカルに取り出すことはすでにできている。できれば、2台のロボットからみた画像を合成して、対象としている人の動きを立体的に再現させてみたいものだ。

ロボット漫才1『ロボットの時代』


テレパシー機能を使って、ロボットに漫才をやらせてみた。「ロミオとジュリエット」のように、動きを挟んではいない。他の記事で書いたが、一つのトピックファイルで、二つのロボット交互的な機能を果たす、ひとつの、最初のサンプルともなっている。
この台本のトピックファイルをご覧になりたい方は、以下にあります。
ロボット漫才「ロボットの時代」台本
ただし、このトピックファイルは、Choregrapheなどでは、そのまま使用できません。最新のiBotシステムのライブラリがロボットに組み込まれている必要があります。

iBotのロボット動作モード

iBotシステムには、ロボットの動きを制御するための三つのモードがある。(WSと頭につくモジュールは、当方が作成してロボットに組み込まれるモジュール)
(1)androidアプリのピノキオの動作機能で、直接ロボットを動かす。android端末のコントローラーで動きを制御する。直接といっても、ALMotionのmoveToなどでうごかすのではなく、ibotのメインモジュールWSIbotで一旦コマンドをうけとって、ALMotionを起動する仕組みになっている。このモードには、動作記録、記録された動作の実行も可能になっている。
(2)第二には、WSIbotモジュールの中のWSCommandクラスの機能を使う。これは基本的に、ロボットに口頭で動作コマンド(進んだり回転したりナビゲートする)を与えて、記録したり、実行したりできる。コマンドは最初は与えて記憶するだけで、実行命令が口頭で与えられるまで実行しない。一連のコマンド群を保存したり際ロードしたりもできる。
(3)第三の方法は、Dialogのトピックファイルに、実行コマンドを埋め込む。ロミオとジュリエットで対話しながら動作をさせているが、これは、トピックファイルに詳細な動作を埋め込んでいるからだ。この処理と実行にも、WSIbotを使っている。
これらは現状では相互に独立しているが、この第二の機能と第三の機能を繋げたいと思っていた。そこで、Dialogのなかから、コマンドモードに保存した一連の動作機能を起動させることができるようにしようと考えている。コマンドモードの保存機能も、現状一つのコマンド群(一つのコマンド群には、多数の個別コマンドが保存できる)しか保存できていないが、これを10とか20くらいのコマンド群でも保存できるようにして、それをDialogのトピックファイルから指定して、実行できるようにしたい。
そうすると、ロボットは、たとえば、舞台に入場して、何かを演じて、退場するところまでをすべて、トピックファイルに記述することができ、また、最初と最後の動作をその場に合わせて、コマンドに組み替えることが容易になる。まさに、パソコンも、スマホも不要になって、全ての機能を口頭、コミュニケーションで与えることが可能になるのだ。