16
Jetson TK1 + PlayStation Camera ROS package 2016/1/26() NVIDIA Jetson Meet-up #01 矢口裕明(@hyaguchijsk)

20160126 jetson ps4eye_01

Embed Size (px)

Citation preview

Page 1: 20160126 jetson ps4eye_01

Jetson TK1 +PlayStation CameraROS package

2016/1/26(火)

NVIDIA Jetson Meet-up #01

矢口裕明(@hyaguchijsk)

Page 2: 20160126 jetson ps4eye_01

Introduction

Page 3: 20160126 jetson ps4eye_01

Who am I

普段はロボットの研究をしております.

専門は視覚認識機能.ウェアラブルセンシング.各種人間支援・自動化タスクに向けたロボットシステム構築・運用.少しだけ拡張現実.

未踏スーパークリエータです.

マーカーを自力生成できるARソフトを作りました.

Page 4: 20160126 jetson ps4eye_01

ステレオカメラと私(2004-)

矢口,RSJ2014

2013

2009

2012

2011

2005

自律移動ロボット矢口,修士論文

これはステレオじゃない…

Page 5: 20160126 jetson ps4eye_01

PS4eye (PlayStation Camera) 2010- Kinect 3Dセンサが極めて安く手に入るようになる.

赤外線パターン投光方式.ステレオよりも密で手軽.

諸事情で入手困難に…

2014- PS4のカメラがステレオになる.

コネクタの形状が違うがUSB3.0規格.

ハックされる.(http://ps4eye.tumblr.com/)

ROS対応される.(https://github.com/longjie/ps4eye)

安い,軽い,小さい.

私が買った時は4000円でお釣りがきた!

解像度,フレームレートともに十分.

普段は1748 x 408, 60fpsで動作させている.

左右の画像が同期されている.

Page 6: 20160126 jetson ps4eye_01

ステレオカメラの特性

Pros:

計測可能範囲を計算機側が決められる.

赤外線パターン投光方式は近い方の計測範囲の狭さが問題になった.

直射日光下でも調整すれば動く.

赤外線パターン投光方式は直射日光下など,プロジェクタの出力をかき消してしまう条件では動かない.

Cons:

三次元復元は全て計算機側で行わなければいけない.しかも処理は重い.

画像の歪み取り,平行化と左右のマッチング.

テクスチャが少ないものや繰り返しパターンは苦手.

三次元復元の密度は低くなる.

Page 7: 20160126 jetson ps4eye_01

ビジョンボード

画像処理は重い.専用の計算装置がほしい.

ただし,その性能はCPUの高速化によって追いつき追い越され…

cons: CPUがガンガン速くなる+マルチメディア処理の搭載.

pros: 専用ボードは軽く,小さく,消費電力を少なくできる.

富士通ステレオビジョンモジュール(2009)http://rraj.rsj-web.org/atcl/1071

日立高速画像処理ボードIP5000 (1999)http://www.hitachi.co.jp/New/cnews/9911/1130a.html

Motion Estimation Processor on TransputerInoue et al., Robot Vision System with a Correlation Chip for Real-Time Tracking, Optical Flow and Depth Map Generation, ICRA1992

Page 8: 20160126 jetson ps4eye_01

モチベーション

PS4eye + Jetson TK1なら,安価で小型軽量なステレオビジョンシステムが実現できるのでは?

かつてのビジョンボードと同じことを最新のアイテムで実現する.

三次元センサ+αの処理ができるセンサユニットを構築する.

まずは,三次元復元を行い点群を返すようなシステムを作る.

Page 9: 20160126 jetson ps4eye_01

PS4eye + Jetson TK1

Page 10: 20160126 jetson ps4eye_01

動作確認

最初の問題:ps4eyeを開けるか?

amd64ではカーネルバージョン,チップセットの相性が問題になっていた.

結論:カーネルそのままで動いた!

次の問題:Jetson TK1ではROSが動くからそのままps4eyeを動かせばいいだろう.

結論:重すぎて動きませんでした…

Page 11: 20160126 jetson ps4eye_01

Jetson TK1とROSの組み合わせは不利

CPUはそんなに速くない.

ROSにおけるps4eyeのプログラム構成は複数のnodeletを用いた分散構造になっている.

nodelet間で通信が発生すると,たとえ同じマシン内でも,ものすごいCPU負荷が発生する.

そもそも画像処理はやはり重い.

特にステレオマッチングは非常にリソースを食う.

GSCam

ImageCrop

UndistortRectify

CalcDisparity

CameraInfo

Reconstruct3D

ImageCrop

UndistortRectify

Page 12: 20160126 jetson ps4eye_01

解決策 CPUの負荷を減らしてGPUを活用する.

ps4eyeの分散構造を一体構造に変更する.

画像処理全般をGPU (OpenCV + CUDA)で行う.

適度なところで外部PCに投げられるようにする.

STEP1: Camera Image

STEP2: Disparity Image + Left Camera Image

STEP3: Point Cloud

どのみち,三次元点群にした時点で通信負荷は激増してしまう…

視差+カラーに比べておおよそ二倍以上の転送量になる.

この成果物が

https://github.com/hyaguchijsk/ps4eye_tegra

Capture

ImageCrop

UndistortRectify

CalcDisparity

CameraInfo

Reconstruct3D

ImageCrop

UndistortRectify

Camera Image

Disparity + Color Image

Point Cloud

GPU space

Page 13: 20160126 jetson ps4eye_01

パフォーマンス計測

第一案:カメラキャプチャと三次元復元は別Nodeletにする.

6fps程度

画像の入力に12ms近くかかる.

視差画像,左目画像の出力に20ms近くかかる.

実行時間の分散が大きすぎる.

実用上10fpsは超えて欲しい.ちょっと遅すぎる.

やはり過負荷?

Page 14: 20160126 jetson ps4eye_01

パフォーマンス向上

第二案:三次元復元は別Nodelet

にする.カメラキャプチャを埋め込み入力画像分の通信をなくす.

11-12fps程度

画像の入力に10ms近くかかる.→やや短縮

視差画像,左目画像の出力に20ms近くかかる.→同じ

ただし全体的に速度は向上している.分散も小さい.

Nodeletを減らし,通信負荷を下げるだけでCPUに余裕が出ていると考えられる.

GPUの負荷は変化していない

Page 15: 20160126 jetson ps4eye_01

(付録)Block Matching vs. CSBP

第2.5案:ステレオマッチングをCSBPにする.

3fps程度

画像の入力に10ms,視差画像+左目画像の出力に20ms近くかかるのは同じ

純粋にCSBPに時間がかかっている.

入力画像

CSBPBlock Matching

Page 16: 20160126 jetson ps4eye_01

まとめ

PS4eye + Jetson TK1で安価で小型軽量なステレオシステムを作りました.

改良点

速度向上:GPUにまかせている間にCPUで進められる処理を進められるようにする.

応用:特徴点ベース・3Dフロー,ビジュアルオドメトリ,etc…

本システムにおいてはたくさんの方々の成果物を利用させていただいております.

Jetson TK1: nVidia様

Playstation Camera: SCE様

ROS: OSRF様

OpenCV: itseez様

PS4eye hack: @ps4eye様, @longjie様