20160126 jetson ps4eye_01
TRANSCRIPT
Jetson TK1 +PlayStation CameraROS package
2016/1/26(火)
NVIDIA Jetson Meet-up #01
矢口裕明(@hyaguchijsk)
Introduction
Who am I
普段はロボットの研究をしております.
専門は視覚認識機能.ウェアラブルセンシング.各種人間支援・自動化タスクに向けたロボットシステム構築・運用.少しだけ拡張現実.
未踏スーパークリエータです.
マーカーを自力生成できるARソフトを作りました.
ステレオカメラと私(2004-)
矢口,RSJ2014
2013
2009
2012
2011
2005
自律移動ロボット矢口,修士論文
これはステレオじゃない…
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で動作させている.
左右の画像が同期されている.
ステレオカメラの特性
Pros:
計測可能範囲を計算機側が決められる.
赤外線パターン投光方式は近い方の計測範囲の狭さが問題になった.
直射日光下でも調整すれば動く.
赤外線パターン投光方式は直射日光下など,プロジェクタの出力をかき消してしまう条件では動かない.
Cons:
三次元復元は全て計算機側で行わなければいけない.しかも処理は重い.
画像の歪み取り,平行化と左右のマッチング.
テクスチャが少ないものや繰り返しパターンは苦手.
三次元復元の密度は低くなる.
ビジョンボード
画像処理は重い.専用の計算装置がほしい.
ただし,その性能は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
モチベーション
PS4eye + Jetson TK1なら,安価で小型軽量なステレオビジョンシステムが実現できるのでは?
かつてのビジョンボードと同じことを最新のアイテムで実現する.
三次元センサ+αの処理ができるセンサユニットを構築する.
まずは,三次元復元を行い点群を返すようなシステムを作る.
PS4eye + Jetson TK1
動作確認
最初の問題:ps4eyeを開けるか?
amd64ではカーネルバージョン,チップセットの相性が問題になっていた.
結論:カーネルそのままで動いた!
次の問題:Jetson TK1ではROSが動くからそのままps4eyeを動かせばいいだろう.
結論:重すぎて動きませんでした…
Jetson TK1とROSの組み合わせは不利
CPUはそんなに速くない.
ROSにおけるps4eyeのプログラム構成は複数のnodeletを用いた分散構造になっている.
nodelet間で通信が発生すると,たとえ同じマシン内でも,ものすごいCPU負荷が発生する.
そもそも画像処理はやはり重い.
特にステレオマッチングは非常にリソースを食う.
GSCam
ImageCrop
UndistortRectify
CalcDisparity
CameraInfo
Reconstruct3D
ImageCrop
UndistortRectify
解決策 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
パフォーマンス計測
第一案:カメラキャプチャと三次元復元は別Nodeletにする.
6fps程度
画像の入力に12ms近くかかる.
視差画像,左目画像の出力に20ms近くかかる.
実行時間の分散が大きすぎる.
実用上10fpsは超えて欲しい.ちょっと遅すぎる.
やはり過負荷?
パフォーマンス向上
第二案:三次元復元は別Nodelet
にする.カメラキャプチャを埋め込み入力画像分の通信をなくす.
11-12fps程度
画像の入力に10ms近くかかる.→やや短縮
視差画像,左目画像の出力に20ms近くかかる.→同じ
ただし全体的に速度は向上している.分散も小さい.
Nodeletを減らし,通信負荷を下げるだけでCPUに余裕が出ていると考えられる.
GPUの負荷は変化していない
(付録)Block Matching vs. CSBP
第2.5案:ステレオマッチングをCSBPにする.
3fps程度
画像の入力に10ms,視差画像+左目画像の出力に20ms近くかかるのは同じ
純粋にCSBPに時間がかかっている.
入力画像
CSBPBlock Matching
まとめ
PS4eye + Jetson TK1で安価で小型軽量なステレオシステムを作りました.
改良点
速度向上:GPUにまかせている間にCPUで進められる処理を進められるようにする.
応用:特徴点ベース・3Dフロー,ビジュアルオドメトリ,etc…
本システムにおいてはたくさんの方々の成果物を利用させていただいております.
Jetson TK1: nVidia様
Playstation Camera: SCE様
ROS: OSRF様
OpenCV: itseez様
PS4eye hack: @ps4eye様, @longjie様