ロボカップ世界大会詳細① : 調整日&1次予選一回戦RoboZoo競技

RoboCup@home

出村 賢聖です!前回はロボカップ世界大会の大まかな概要とシリコンバレーのロボット事情について投稿しました!今回からは複数回ロボカップ世界大会での僕達のチームの詳細についてお話します!

大会前

NVIDIAとlinuxのPC設定に苦戦

nvid 大会2週間前に、ロボットに搭載する、新型のGPU(高速に大規模な計算をするための回路)付きのノートパソコンを、linuxでGUI付きで(昔のPCの黒い画面と緑・白字の組み合わせの画面のようなものをCUI(CUIはlinux・UNIXで設定可能)と呼び、windows,mac,iphone,androidのようなカラフルな画面のようなものをGUIと呼びます)NVIDIAのGPUの設定とNVIDIA GPUのSDKのCUDAの設定が完了しました。OSの設定を改造しなければならず、こちらの設定に大変苦労し2週間ほどかかりました。 NVIDIA DIGITSをlinuxで使用する(qiita,出村賢聖投稿) demura.netチームのNVIDIA CUDA設定のメモ

進捗

大会直前の4日前に生活支援ロボットMiniの新型が完成しました。それと同時に4日前に僕が担当しているPerson Recognition Testの中枢の技術のロバスト顔認識とロバスト性別認識のソフトウエアが完成しました。 mini-face-rec mini-gender-recogNVIDIA DIGITS frameworkを使ったDeep Neural Network性別識別器ソフトウエア Deep Learningとは : 現在の第3期人工知能バブルを勃発させた最先端の機械学習(コンピューターがものごとを学習して理解して予測したり判断する技術)の技術です。Artificial Neural Networkという人間の脳の神経回路を模倣した数学モデルが発展したもので、数学の発展(数理最適化手法の発達、GoogleのMapReduce)、データ数の増加(データがインターネットにあふれるようになった)、コンピューターパワーの増加(特に2006年に今までは3Dグラフィクスの表示だけに使われてきたGPUが行列計算やSIMD系の命令など汎用計算に使用できる汎用GPUをNVIDIAが提唱・販売したことも結構大きい、最近はクラウドやHPCを活用したDistributed Deep Learning理論などもあります)がDeep Learningの誕生に関わっていると考えられています。

断念した機能

higher Miniの断念しなければいけなかったハードウエア機能はプログラムで制御可能な自動伸縮機構でした。伸縮機構は市販の部品を使用したものです。 ArduinoからMiniの伸縮機構の伸縮を作動させるモーターの制御に取り組みましたが、問題が3つ発生します。 1.ROSからArduinoを制御するとき司令部のPCとArduinoの接続にはシリアル通信を使用するが公式のROSのSerialライブラリではなぜかシリアル通信がときどき調子が悪くなりUSBの抜き差しを何度もする必要があり安定しない。 2.伸縮機構は伸縮が最大長、最短長のとき物理的にロックがかかりモーターが動かせなくなる。この状態に陥ると一回伸縮機構を手動で解体しないと修復不可能。 3.伸縮機構の作動モーターとArduinoのモータードライバを接続するとき、配線の太さの問題でプラスチックギヤを固定する部分に隙間が空いてしまい外れてしまう。 特に3番が深刻な問題でこの問題を解決するには現在の伸縮機構の部品を辞めて自分達でギヤ固定部やギヤを作らなければいけませんでした。Miniが完成したのは大会4日前でプログラムで制御可能な自動伸縮機構に取り組んだのは大会3日前なのでギヤ固定部とギヤ自作は間に合わないと判断しました。 代わりに伸縮機構についているボタンを押して半自動で伸縮を制御することにしました。

調整日のマシントラブル等

ネットが遅い

greatfire

中国ではネットの速度がとても遅かったです。ホテルもロボカップ会場も何処も彼処もGreat Fire Wall of China(世界最大のネット検閲システム、中国のネットはすべて検閲されておりFacebookやtwitter, googleなどが使用できない)のためかネットが遅いです。pythonのネットレファレンスを開くのも、github(gitというネットワーク・インターネットを活用した、複数の人々で協力してソフトウエアを効率良く開発するためのソフトウエアに、SNS機能とWEBを合体させた、世界最大のソフトウエアを投稿したりチームでソフトウエア開発をするためのWEBサイト)に共有されている、自分たちが開発しているロボットのプログラムに、プログラムの変更を反映し、他のメンバーと変更したソフトウエアを共有するのにネット速度の問題で時間がかかりました。プログラムのエラーやgithubのエラーが出たときにエラー原因を検索したり、Evernoteに書いたパソコンの設定の作業メモを見るときに大変支障が出ました。

デバイスがつながらない・音がならない

Miniに搭載するPCの設定が完了したのが大会2週間前で、僕含むdemura.netのソフトウエア開発メンバーはMiniのパソコンとは異なる自分達のPCでソフトウエア開発を行っていました。 これが大会でのデバイスがつながらない・音がならない問題につながります。

USBデバイスから情報が取得できない

xtion-pro-live問題となったデバイス xtion pro live Miniに接続するUSBデバイスの数は5つ6つあります。USBの挿す順番を間違えるとプログラムからデバイスの情報を取得することができなくなってしまいます。linux OSでは自由なUSBの挿し順番でプログラムからデバイス情報を取得するにはudevプログラムを使用するという方法がありますが、1つ問題のUSBデバイスがありました。Miniの目の役割をしているRGB-D(色と深さ情報がわかるカメラセンサ)カメラのxtion pro liveはlibusbというusb接続の特別なSDKを使用しており、こちらはUSBの情報取得にスレッド(複数のCPUを使って同時に複数の処理をする)を使って(このカメラが大量の情報をUSBに送信するので通信の受信に取りこぼしがないように複数のCPUを使って送信、受信をしていると思われる)いるのですが、USBの挿し順番を間違えるとスレッドの優先権を失ってしまいます。udevで特定のUSBデバイスに対してスレッドの優先権を割り当てるプログラムの書き方がわからず、さらにGPU+マルチスレッドのlinuxグラフィクス環境でリアルタイム優先度を設定してOSを破壊したことが何度かあり、最終的にUSBの挿し順番はメンバー全員が記憶して手動で調整することになりました。

音がならない

alsa-logo Miniは音声認識のためにマイク、音声出力のためにヤマハのUSBオーディオ出力を使用しています。以前のMiniのPCにはアナログ入力用のジャック端子がPCにあったのですが、新型のMiniのPCはアナログ出力用のジャック端子だけでアナログ音声入力ができません。そのためアナログ端子のマイクをAD変換するUSBデバイスを間に挟みました。すべてのデバイスがUSBになりました。 ここでもUSBの挿し順番が重要になってきます。 linuxではデフォルトの音の設定では出力は内蔵スピーカーからになっています。今回python ROSプログラムや音声認識クライアントソフトの音の再生が内蔵スピーカーからになってしまい、音の入力もPC内蔵マイクからになってしまいました。python ROSプログラムが使用している音声再生pythonライブラリや音声認識クライアントソフトウエアのソースコードを読んだところ、どこのデバイスに音声の出入力をするかはlinux OSの音声出入力をコントロールするALSAというシステムに依存していることが判明しました。ここで/proc/asound/cardsや/proc/asound/以下に記されているデバイス情報を見てAlsaの設定ファイルを書き換えたのですが、なぜか設定が変わりませんでした。僕がたまたま最近のubuntu/linuxではAlsaの上にpulseaudioというオーディオ管理ソフトがあることを知っており、こちらをアンインストールしたところ、USBの挿し順番に気を付ければ外付けマイクから音を拾い、外部オーディオから音声を出力することが可能になりました。

断線

xtion pro liveがつながらず苦労していたところ、断線していたことが判明しました。新品のxtion pro liveを使用したところ、xtion pro liveにはオーディオ出入力機能があるようで、USB挿し順番を変更しなければならなくなりました。

電力不足

usb-hubこちらのUSBハブを使用しています。 Miniに使われているxtion pro liveやLIDAR(レーダーのような小型レーザースキャンセンサ)は消費電力が大きいです。同じUSBハブにxtion pro liveとLIDARを同時に挿したところ電力不足でxtion pro liveから情報を取得できなくなりました。そこでLIDARとxtion pro liveを別々のUSBポート・ハブに接続しました。 大会直前に他のメンバーがUSBハブにロボットの電池の外部電力を取ろうと試みたのですが、USBデバイスやUSBハブは5V規格に対してDCDCコンバーターを挟まず12V電力を挿してしまいデバイス群が1セット壊れてしまい、USBハブから外部電力を供給するのはやめようということになりました。

Inspection Test

2_minis左が旧バージョンMini, 右が新バージョンMini Inspection Testは予選前のロボット審査で、ロボットが部屋の好きな位置に連続して移動するテストをクリアすることができれば審査合格になります。審査は何回も申請可能です。 ロボット1台それぞれが審査を受ける必要があります。チームでロボットを2台持っている場合は2台とも審査を合格する必要があります。 旧バージョンのMiniは審査に難なく合格しましたが、新バージョンのMiniは旧バージョンのMiniの設定ファイルとの違いやUSBの問題などで審査合格に時間がかかりました。最終的に新バージョンのMiniはぎりぎり審査を合格することができました。

Poster

mini_posterMini技術ポスター poster_sessionPoster Session Poster競技ではポスターの技術発表で内容の先進性によって得点をもらうことができます。僕達は40点という高得点をゲットしました! Poster Teaser Sessionはチームの技術ポスターの3分間ピッチで、Poster Sessionの主な呼び込みを行うことができます。 Poster Session/Poster Teaserに参加したのは英語の発表に慣れている僕だけで、他のメンバーは開発を行っていました。Poster Teaser Sessionでは特にMiniのかわいさ・コンセプト、人工知能とMiniの計算高速化にGPUを使用していることをお話しました。 Poster Sessionで特に質問されたことは音声認識エンジンで、「どうやってROSでDeep Learningを使用している認識率の高い音声認識エンジンを使用しているのか」「どうやって・なぜPocketSphinxとDeep Learning音声認識エンジンを切り替えているのか」と聞かれました。 僕達はKaldiというDeep Learningを使用した音声認識エンジンをGPUで高速化+コンパイル最適化して,音声入力から得られた推論された文章をROSのtopicとして送信するプログラムを製作しています。Pocket Sphinxは”Mini”という名前の呼びかけ時のトリガーとして使っており、Pocket Sphinx側が”Mini”という声を感知すると、Jasper/Siriusという音声統合クライアントが音声認識エンジンをKaldiに切り替え高精度音声認識に切り替わります。PocketSphinxは短い語彙を1秒以下のリアルタイムで検知することができ、Kaldiは10秒以内に長い音声命令を処理して高い精度で文字の文章に変換することができます。音声認識の応答性と精度の両方を向上させるため音声認識エンジンを用途にわけて切り替えています。

RoboZoo

1次予選の第一試合がRoboZooという競技でした。RoboZooは自律生活支援ロボットが3mx3mの囲いの中に入ってロボットが自動(リモコン操縦なし)でパフォーマンスをする競技です。 RoboZoo競技での企画、開発は僕が担当することになっていました。

OSのバージョンにバグがあってできなかった第一企画VRロボット映画館

dsd-oculus-ps3僕が目に装着している黒色のデバイスがOculus Riftです。 virtual-realityOculus Riftから見る没入感のある画像 上記の目につけてバーチャルの世界に入ることができるOculus Riftを使用したVR(Virtual Reality)ロボット映画館を企画していました。他の競技の準備をしていたためRoboZooのソフトウエア開発は中国で初めて行うことになりました。 後にRoboZooではVirtual Realityロボット映画館の開発を諦めなければならなくなりました。MiniのロボットのOS(Windows, Mac, Android, iphoneのiOSのようなコンピュータの中枢を支えるソフトウエア)のlinux(サーバーやIoT,組み込み機器に使われるOSでwindowsやmacとは異なり基本的に無料、androidはlinux OSを改造したもの)のデバイスドライバー(デバイスとコンピュータを通信させるためのソフトウエアでOSと強い関わりのあるソフトウエア)に関係しているカーネル(OSの特に中心部)にバグがありOculusがつながりません。これはOSのバージョンを更新することによって解決しますが(windowsやandroid,iphoneの更新プログラムのようなものを動かすことによって)中国のネットは前述の通りとても遅く更新に12時間くらいかかることになり、OSの更新は諦めOculusを使ったVR映画館を諦めることになりました。

ロボットのアクチュエータが故障してできなかったRoboZooの第2企画:ロボット劇

企画をロボットが話しているお話の内容と連動してロボットが動作したり演じたりするロボット劇に変更しました。 こちらの企画でも大問題が発生します。ロボットMiniのアームが壊れてしまいました。これによってダンスをすることは不可能になりました。 さらに首に問題が発生します。僕達はロボットの首を動かすことによってロボットの視線や顔の向きによってロボットの感情(顔を下に下げる->落ち込む 等)やロボットと人とのインタラクション(ロボットが人の目を見て話す等)ができると考えていました。 ですが、3Dプリンタで制作した、顔の一部の、首のサーボモータと顔の接合部に、ヒビが入っていることに気づきました。ロボットの顔が壊れることを避けるため、首を動かすことを断念しました。ロボットを3mx3mの空間で駆動用モーターを動かすのはリスクが高いと思い、唯一RoboZooで動かすことになったアクチュエータは手首の関節と手だけになりました。

ロボット紙芝居とRoboZooの結果

cute_mini_1 cute_mini_2 cute_mini_3 RoboZooでは最終的にスライド枚数と同期して音声と手首と手の動きが同期するロボットデジタル紙芝居を行いました。OpenCV、python、ROSとbashシェルスクリプトを使用したプレゼンスライドソフトウエアを開発しました。RoboZooは技術点と観客票の2つの得点で構成されます。RoboZooでは事前の度重なる故障やOSバグなどの不運で、技術的に優れたことができず技術点は0点になってしまいました。ですがMiniの可愛さに惚れて得点票を入れてくれた人々もいました!

次回予告

次回はPerson Recognition Test競技、全チーム上位5位の得点をとったEGPSRやVoice Recognition Test, Navigation Testについてお話します! 予選突破後のStage 2の競技についても報告があるのでお楽しみに!

タイトルとURLをコピーしました