Raspberry Pi 2 + ROS + KinectでKinect Hack

f:id:karaage:20150830113310p:plain:w640

2016/10/04 Linux(Ubuntu)でのKinect Hack記事へのリンク追加

Raspberry Pi + ROSでKinect Hack(キネクトハック)

 Raspberry Pi 2に先日ROSをインストールしてみましたのでその続きです。下記記事を読むか、興味ない人は今日はここまでにした方がよいと思います。時間は有意義に使うべきです。

 そして、ロボット業界では入手しやすくて安くて手軽に使える3DセンサとしてKinectがよく使われるらしく、ROSにもKinect関係のライブラリが揃っています。自分もKinectを持っているのでまずはこいつをROSでHackしてみることにしました。

Xbox 360 Kinect センサー

Xbox 360 Kinect センサー

 私がKinectで昔に作ったものは、関連記事を参照ください。

 後は少々マニアックな話なので、興味がある方のみ続きを読んでみて下さい。

Raspberry Pi2でKinect動作確認

 調べたら、実はRaspberry Pi 2はデフォルトでKinectを認識してくれるらしい。知らなかった。一応動作テスト。

動画プレイヤ(VLC)インストール

$ sudo apt-get update
$ sudo apt-get install vlc browser-plugin-vlc

動作確認

KinectをRaspberry Pi 2に接続

$ ls /dev

video0が表示されればOK

vlcプレイヤを起動して、Open Deviceで /dev/video0 を選択すると Kinectの画像が表示される。ただ、何故か静止画。

Kinect Hack

 せっかくのKinectだから、カメラ情報だけでなくて、Depth情報とかいろいろとりたいよねー。ということでとってみる。openniが有名だけど、ROS Indigoだとfreenectというやつを使うととりあえず取れるらしい。

freenectインストール

 以下コマンドでOK

$ sudo apt-get update
$ sudo apt-get install libfreenect-dev
$ sudo apt-get install ros-indigo-freenect-launch
起動

 以下のコマンドを実行

$ roscore

別ウィンドウを開いて、以下実行

$ roslaunch freenect_launch freenect.launch

 これでROS上に新しいNodeが立って、カメラ情報を吐き出し続けてくれる。以下でどんな情報が吐き出されているかをチェック

$ rostopic list

/camera/rgb/image_raw とか /camera/depth/image とかいかにもそれっぽいものが流れていそうなのがみえる

image viewで可視化

 動画データをみるためには、image_viewというソフトが必要なのでインストール

$ sudo apt-get update
$ sudo apt-get install ros-indigo-image-view

 以下でRGB画像表示

$ rosrun image_view image_view image:=/camera/rgb/image_raw

 以下でDepth情報表示

$ rosrun image_view image_view image:=/camera/depth/image

 RGB画像、Depth画像両方表示させたところ

f:id:karaage:20150830113310p:plain:w640
 それっぽい

SLAM挑戦

 せっかくだからKinectでSLAMやってみたいなと欲が出てきました。調べたらそれっぽいのがあったらできるかなと思ったら、世の中そんなに甘くなくてそのままだとエラーが出ます。どうも最新のROSバージョン(indigo)には対応していないみたいです。

http://daikimaekawa.github.io/ros/2014/04/03/HectorSLAM/

 いろいろ調べた結果、以下の通りマニュアルでしこしこインストール。

$ sudo apt-get update
$ sudo apt-get install ros-indigo-rviz

$ roscd
$ cd ..
$ cd src
$ git clone https://github.com/DaikiMaekawa/hector_slam_example.git
$ cd hector_slam_example
$ roscd
$ cd ..
$ catkin make
$ source ~/.bashrc
$ roslaunch hector_slam_example hector_openni.launch

 これでいけるか!と思いきやrvizという可視化ソフトでエラーがでて、調べても解決方法がわからずお手上げ。おそらくRaspberry Pi 2だとグラフィックの能力が足りないのかなと思います。よくわからんです。

まとめ

 とりあえず距離情報はとれたけど、骨格情報の取得も分からないし、SLAMもできずどうやって使おうかなという感じ。ROSは基本日本語の情報無いし、何かやるとエラーになることが多くて結構難しいです。エラー情報で検索すると対処方法が出てくることが多いのが救いですが。

追記:Linux(Ubuntu)でもKinect Hackしてみました

関連記事