ロボカップ世界大会③

予選突破後の2nd stageについてです!

Open Challenge

RNN_ocr Technical ChallengeではMiniで文字OCR音声読み上げのデモを行いました! 僕が担当しました。 本番では急遽現地スタッフが書いた英文を読み上げるというデモを行いましたが、手書き文字認識の精度は低かったです。 プリントされた文字で10.5 pxの文章の読み上げや、ポスターの読み上げは大変精度が高かったです。手書き文字を学習させる必要がありました。

“ロボカップ世界大会③” の続きを読む

ロボカップ世界大会②一次予選突破まで

大会前

大会前には音声認識エンジンと画像認識ソフトウエアを開発しました。

音声認識エンジン

1.高精度音声認識エンジンの推論時間を短縮することに成功しました! 当初僕達が使っていたDeep Learningを用いた音声認識エンジンKaldiは長い文章でも推論精度は大変良いのですが、推論速度が遅く、ロボカップ@ホームルールの推論制限時間10秒を超えてしまうことがしばしばありました。そこでGPGPUとコンパイル最適化を行い推論時間を5−7秒前後に抑えました。 2.音声認識エンジンを用途別に使い分けることによって推論精度と応答速度の両立に成功しました!

“ロボカップ世界大会②一次予選突破まで” の続きを読む

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

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

大会前

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設定のメモ

“ロボカップ世界大会詳細① : 調整日&1次予選一回戦RoboZoo競技” の続きを読む

出村 賢聖が見てきたシリコンバレーのロボット事情

出村 賢聖です!8/4 ~ 8/13までシリコンバレーへ行ってきました! シリコンバレーで見てきたロボット事情についてお話します!

今回なぜシリコンバレーへ行くことになったのか(個人的なことで恐縮ですが)

dsd
Drone Space Defenseプロトタイプ
僕が現在開発中のドローン対ドローンのAR(拡張現実)対戦ゲームDrone Space Defenseのフィードバックを得るためにDrone Space Defense開発チームでシリコンバレーへ行きました! hmd-todai Drone Space Defenseを開発することになったきっかけは、東京大学の学生団体bizjapanが主催するヘッドマウントディスプレイソフトウエア開発コンテスト・勉強会に出場したのがきっかけです!東京大学の産学連携プラザで行われたヘッドマウントディスプレイソフトウエア開発コンテストに優勝し、bizjapanの運営の方が僕達Drone Space Defense開発チームをシリコンバレーに派遣してくれる機会を与えてくれました!

“出村 賢聖が見てきたシリコンバレーのロボット事情” の続きを読む

ロボカップ世界大会

出村 賢聖です!お久しぶりです!8/13までシリコンバレーに居ました! 今日からRTは休業明けです!

ロボカップ世界大会

WK RoboCup 2015 China

7/17~7/25まで行われたロボカップ世界大会に出村 賢聖と中川社長と中川部長が参加しました! cute-happy 個人的なことで恐縮ですが、僕の所属しているdemura.netチームとかわいい生活支援ロボットMini(https://www.facebook.com/happyrobotmini)はロボカップ@ホームリーグで世界9位になりました!ロボカップジャパンオープンのときに僕にロボットを貸してくれたRT、ゴールドスポンサーの山口慎平様、クラウドファンディングで応援してくれた皆様、大変ありがとうございます!

“ロボカップ世界大会” の続きを読む

ロボカップジャパンオープン2015 @ホームリーグ報告

出村 賢聖です!ロボカップジャパンオープン2015@ホームSPLリーグに参加してきました!
robocupathome
RoboCup@homeリーグロボット/選手集合写真

ロボカップ@ホームSPLリーグ

splrobots
RoboCup@home SPLリーグロボット集合写真

SPLリーグでは出村の1名チーム D.K.T. IcARusは6チーム中5位になることができました!後日賞状が送られてきます!Turtlebotを貸していただき、東京から福井の大会会場まで車に乗せていただいたRT Corporation、本当にありがとうございました!

RTでの準備

ロボカップ@ホームSPLリーグに向けてタスクのための開発を始めたのは大会1週間前です。それまで色々なことがあって手が回りませんでした。
今回はfollowmeタスクにしぼって開発を進めました。
followmeはロボットが家環境で特定の人を追跡する競技です。

TurtlebotのROSの人間追跡パッケージの問題点

人の追跡にturtlebot_followerという既存のturtlebot用人間追跡ROSパッケージを使用していたのですが、間違えて机の方に向かったり、壁に向かったりなど誤認識が多いです。
turtlebot_follower
誤認識の理由はturtlebot_followerの人間追跡アルゴリズムにありました。
turtlebot_followerのアルゴリズムは、kinectの深さカメラが捉えられる範囲内で最短距離の物体を追跡対象として認識し、追跡する、というものです。
followme競技中、追跡対象はこの条件を満たさないときがあります。
追跡対象である人が机を横切ったり、他の歩行者を通り過ぎると、追跡対象でない物体が追跡対象として認識されてしまいます。
そこで追跡アルゴリズムを改善する必要がありました。。

人間追跡の精度を向上させる方法

人の色情報を活用すれば、認識精度が向上した人間追跡をすることができるのではないかと思いました。
例えば、追跡される人の靴の色は赤、ズボンの色はピンク等、髪の毛は黒、のような色情報です。
そこで今回はCamShiftというアルゴリズムを人間追跡に使用しました。(CamShiftアルゴリズムの説明は後ほど行います)

人間追跡ソフトウエアの開発概要と苦労した点

kinectの画像情報 → CamShiftで追跡者の位置を特定→追跡者位置情報をもとにTurtlebotを制御する
開発するソフトウエアにはこのようなフローが必要になります。
今回はROSというロボットミドルウエア上で、画像情報を取得し、Turtlebotの移動制御を行います。
ここで問題になったのが、ROSの画像型(クラス)→Opencv画像型(クラス)変換や、Opencvの人間追跡コードをroscpp(イベント駆動)で記述するとsegmentation faultを起こすことです。(C++で開発しています)
そこでgdbでデバッグを行ったのですが、ROS Nodeではgdbでソースコードを読みながらステップ実行ができません。バックトレースを見ても参考になるサブルーチン名が出てくることはなくgdbではあまり有用なデバッグができませんでした。printfデバッグを使用すると、OpenCV用のGUIウィンドウの初期化に問題があることが判明しました。問題の箇所は判明したのですが、このときは残念ながら人間追跡のソフトウエアの開発が完了しませんでした。

会場での準備/調整

camshift_node
人間追跡ソフトウエアのデバッグを続けました。
OpenCVのGUIウィンドウの初期化をROS Topicのコールバック関数内に記述せずに、main関数内で初期化を行うとsegmentation faultの問題が解決しました。
追跡者の方位を認識した画像のピクセル位置とkinectのFOV(43°)から計算し、追跡者の距離をkinectで計測、そしてTurtlebotに比例航法とPD距離制御を使って人間追跡ができるようになりました。
これで人間追跡が可能になりました。

Basic Functionalities競技

SPL
Basic Functionalitiesでは惜しくも無得点になってしまいました。 ロボットが家で障害物回避をしながら部屋の好きな場所に移動するAvoid Thatは得点することができるはずでした。
原因は、調整中Avoid Thatのための環境地図を生成していたときスタート地点に人がいたためです。人を障害物として認識してしまいスタート地点から動くことはありませんでした。
Avoid That(家で障害物回避をしながら部屋の好きな場所に移動する)に使用したプログラム

Restaurant競技

IMG_20150503_094419
Restaurantでは惜しくも無得点になってしまいました。Restaurantでははじめに人間追跡をしながら地図生成をするのですが、ロボットが移動時に何回も転倒しそうになりました。これは重心が高い位置にあったのが原因です。そのためロボットアームを外し、下に2kgのおもりをつけることで重心を低くし転倒を防止しました。

Follow Me


Follow Meでは181点得点することができました!
僕がRoboCup@home SPL leagueで使用したfollowmeのソースコード(ROS Node)を公開していますのでぜひ活用してください!
ソースコード
人間追跡にはCAMShift(Continuous Adaptive Mean Shift)というアルゴリズムを使用しています。
CAMShiftはヒストグラムマッチング(色情報)を使った画像追跡のアルゴリズムです。
Mean Shiftアルゴリズムの数学的説明(CAMShiftはMean Shiftの拡張版)

出村のfollowme ROS Node を使用するには

※Turtlebotを動かすROSパッケージとkinectのドライバを入れる必要があります。 ROS Indigo対応
ビルド

[c]$ cd ~/catkin_ws/src[/c]
[c]$ git clone https://github.com/kendemu/followme[/c]
[c]$ rosdep install followme[/c]
[c]$ catkin_make[/c]
実行
[c]$roslaunch turtlebot_bringup minimal.launch[/c]
[c]$roslaunch turtlebot_bringup 3dsensor.launch[/c]
[c]$rosrun followme followme_node[/c]
CAMShiftと書いてあるウィンドウの方を選択し、画像ウィンドウの中の追跡対象をマウスで範囲選択してください。
このプログラムは追跡対象を認識し、その角度を算出します!
[c]$rosrun followme distance_node[/c]
このプログラムは追跡対象が位置する角度情報を元に追跡対象への距離を計測します!
[c]$rosrun followme trackme_node[/c]
このプログラムは追跡対象の角度情報と距離情報を元に追跡対象を追跡します!

Technical Challenge


Technical ChallengeではTurtlebotが屋外の走行も可能であること、ROSのセキュリティ面の問題とドローンの拡張現実ゲームであるDrone Space Defenseのことをお話しました。
Turtlebotの屋外の走行の速度検証(100P参照)
ROSのセキュリティ面の問題

かわいい生活支援ロボット達

IMG_20150503_114918
左はトヨタの生活支援/テレイグジスタンスロボット HSR、右はdemura.netチームのKenseiko chan 2 mobileです!

ロボカップジャパンオープンでの反省とロボカップ@ホームリーグ世界大会に向けて


demura.netチームの一員として7月のロボカップ世界大会に参加します!
ロボカップ世界大会では、ロバストな画像追跡を実現する予定です!

今回のロボカップジャパンオープンでの反省点は画像追跡/物体認識が正確ではないことです。
色情報だけでの追跡(CAMShift)では追跡対象の識別が正確ではないことがわかりました。追跡対象のズボンの色が青のとき、青色のカーテンの方を追跡してしまうことがありました。followmeの競技中は追跡対象の靴の色がユニークな色で、その靴の色情報を元に追跡したので正確に追跡対象を追跡してくれました。
色情報以外に追跡対象の位置情報、深さカメラの情報を利用して正確な画像追跡をする必要があることがわかりました。
世界大会までにこの問題を解決します!
これからもよろしくお願いします!