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

RoboCup@home

出村 賢聖です!ロボカップジャパンオープン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対応
ビルド

$ cd ~/catkin_ws/src
$ git clone https://github.com/kendemu/followme
$ rosdep install followme
$ catkin_make

実行

$roslaunch turtlebot_bringup minimal.launch
$roslaunch turtlebot_bringup 3dsensor.launch
$rosrun followme followme_node

CAMShiftと書いてあるウィンドウの方を選択し、画像ウィンドウの中の追跡対象をマウスで範囲選択してください。
このプログラムは追跡対象を認識し、その角度を算出します!

$rosrun followme distance_node

このプログラムは追跡対象が位置する角度情報を元に追跡対象への距離を計測します!

$rosrun followme trackme_node

このプログラムは追跡対象の角度情報と距離情報を元に追跡対象を追跡します!

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の競技中は追跡対象の靴の色がユニークな色で、その靴の色情報を元に追跡したので正確に追跡対象を追跡してくれました。
色情報以外に追跡対象の位置情報、深さカメラの情報を利用して正確な画像追跡をする必要があることがわかりました。
世界大会までにこの問題を解決します!
これからもよろしくお願いします!

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