heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

Ubuntu12.04 で "Kinict v1" + "OpenKinect" + ( ( "OpenNI1.5.7" + "NITE1.5.4" ) xor ( "PCL" ) ) の環境構築

目次

目的

今更ではございますが "Kinect v1" を手に入れたので、表題の環境構築を目的にセットアップを行う。
加えて、この分野の初心者の自分には各ソフトウェアの位置づけが分かりにくかったので、簡単に説明も加える。

環境

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS"
$
$ uname -a
Linux calc0 3.13.0-52-generic #86~precise1-Ubuntu SMP Tue May 5 18:08:21 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$
$ lsusb | grep Xbox
Bus 002 Device 006: ID 045e:02ad Microsoft Corp. Xbox NUI Audio
Bus 002 Device 005: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 002 Device 007: ID 045e:02ae Microsoft Corp. Xbox NUI Camera

登場する技術についての概説

  • OpenKinect(トラッキングなど複雑なことはできないが Kinect を手っ取り早く使えるライブラリ・ツール郡を提供)
  • OpenNI(Kinect の映像をストリーム出力として処理するためのライブラリを提供。後述のNiTE、PCLの利用に必要)
  • NITE(OpenNI を通して、骨格の認識や手の追跡などを行うためのミドルウェア
  • Point Cloud Library(OpenNI を通して、特徴推定・平面の認識・物体検知など行う3D点群処理ライブラリ)

ブログをまとめている時に見つけた、下記サイトも分かりやすかったです。

初代Kinectのドライバ関連(「Kinect for Windows SDK」,「OpenNI+NiTE」) 現状まとめ(2014年5月26日現在) - いろりおのメモ帳

はじめに(インストールのための参考サイトについて)

Kinect が初めて発売されてから5年も経ち、今ではそのプログラムについてもあまり話題にならなくなった位なので、情報はたくさんありました。
しかし、Kinect 自体もバージョン1 では Xbox 用、商業利用が可能なもの、そしてバージョン2、と3種類があり、さらに WindowsMacLinux といろいろな環境で動作を確認した情報が溢れておりました。

ですので、読者の方でこれから Kinect を試したいという奇特な方に対しては老婆心ながら、「自分の環境に近い人の記事を2,3集めてそれぞれ試してみても、何度も失敗し試行錯誤することになるよ」と、予め警鐘を鳴らしておきますね。

自分が主に参考にしたのは、下記の2つです。あとは失敗のたびに似たようなページを参照し続けました。

九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24)

Setting up Kinect for programming in Linux (part 1) - KDAB

方法

"Kinect v1" の動作確認を行う

手っ取り早くハードウェアとしての動作確認をしたいので、OpenKinect*1 プロジェクトの成果物を用います。

骨格の認識や、手の追跡など凝ったことはできませんが、カメラとしての簡単な動作確認が行えます。

Install on libtisch PPA

An Ubuntu launchpad ppa for Lucid(10.04), Maverick (10.10), Natty (11.04), Oneiric (11.10) and Pangolin (12.04) is available at:
https://launchpad.net/~floe/+archive/libtisch
to use it, open a console and execute:

Getting Started - OpenKinect

上記記事を参考に、下記コマンドを実行した。

sudo add-apt-repository ppa:floe/libtisch
sudo apt-get update
sudo apt-get -y install libfreenect libfreenect-dev libfreenect-demos
sudo adduser $USER video

"Kinect v1" の動作確認

準備のため、下記パッケージのインストールを実行した。

sudo apt-get install freeglut3 freeglut3-dev
sudo apt-get install binutils-gold

そして、動作確認のため "glview" を実行します。
操作方法などは下記の引用内容を参考にしました。

○動作確認
Kinectをつなぐ。
サンプルプログラムで動作を確認
サンプルプログラムは以下の3つ
・glview // 標準のサンプルプログラム
・cppview // glviewのcpp版
・glpclview // 距離画像の3次元表示プログラム

> glview, cppviewの操作方法
w : 少し上に向ける
s : 水平に向ける
x : 少し下に向ける
f : カメラ表示切り替え(RGB, 赤外カメラ)
1-3 : LED表示色切り替え
4-6 : LED表示色切り替え(点滅)
0 : LED消灯
ESC : 終了

> glpclviewの操作方法
マウスドラッグ:視点移動(回転のみ)
w : 拡大
s : 縮小
ESC : 終了

Kinect ubuntu10.04にlibfreenectをインストールする - TK's HP

コマンド実行によりウインドウが立ち上がり、遅延もなくリアルタイムに描画されていました。

深度計測の動作確認
Pic.1 "glview" で "Kinect v1" が動作できていること、深度を計測できていることを確認

骨格の認識や手の追跡など行いたいので、準備として OpenNI をインストールする

OpenNI*2 自体は、Kinect からの映像をストリーム出力として処理するためするためのものらしいです。
現状では OpenNI2*3 が最新ですが、結論を先に言うと自分の環境では "Kinect v1" を認識できなかったため OpenNI をインストールして使いました。(失敗内容は最後の"付録"に記載します。)

オープンソースのKinectドライバOpenNI、提供終了へ。Appleによる買収が影響? | スラド オープンソース

OpenNI のインストール

github の README を参考にしました。

cd ~/git
git clone https://github.com/OpenNI/OpenNI  openni
cd openni/Platform/Linux/CreateRedist/
./RedistMaker
cd ../Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10
sudo ./install.sh

OpenNI の動作確認1 (失敗例のエラー内容を書いたので、ここは飛ばしてください)

$ pwd 
/home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10
$ cd Samples/Bin/x64-Release/
$ ./NiViewer
One or more of the following nodes could not be enumerated:

Kinect のドライバをインストールしないと、上記のようなエラーがでます。

OpenNI が Kinect を扱えるように、ドライバのインストールを行う

下記記事を参考に、"synapticon/SensorKinect" のドライバを用いました。

③についてはパッケージの取得先を以下のように変えました。

旧:https://github.com/avin2/SensorKinect

新:https://github.com/synapticon/SensorKinect

九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24)

インストールは下記コマンドを実行しました。

cd ~/git
git clone https://github.com/synapticon/SensorKinect
cd SensorKinect/Platform/Linux/CreateRedist/
./RedistMaker
cd ../Redist/Sensor-Bin-Linux-x64-v5.1.2.1/
sudo ./install.sh

OpenNI の動作確認2 (成功)

$ pwd 
/home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10
$ cd Samples/Bin/x64-Release/
$ ./NiViewer

下記のようにリアルタイムに映像が出力されれば成功です。

OpenNI の動作確認
Pic.2 "NiViewer" で "Kinect v1" からの映像を取得できていることを確認

骨格の認識や手の追跡のためのミドルウェア NiTE をインストール

NITE のインストール

kaorun55 / OpenNI 2.2 α / ソース / NITE 2.2 α — Bitbucket

Google Code Archive - Long-term storage for Google Code Project Hosting.

自分は上記サイトより "OpenNI_NITE_Installer-Linux64-0.27.zip" をダウンロードして、下記を実行しました。

unzip OpenNI_NITE_Installer-Linux64-0.27.zip
sudo mv OpenNI_NITE_Installer-Linux64-0.27 /usr/local/src/
cd /usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/

その後インストール前に、フリーで使えるというライセンスキーを下記記事を参考に入力しました。

cd ~/kinect/NITE-Bin-Dev-Linux-x64-v1.5.2.21/Data

Modify the license in the files: Sample-Scene.xml, Sample-Tracking.xml, and Sample-User.xml.

    <License vendor=”PrimeSense” key=”0KOIk2JeIBYClPWVnMoRKn5cdY4=”/>

    cd ..
    sudo ./install.sh

Ethan Lim: Installing OpenNI, NiTE, SensorKinect on Ubuntu 12.04

そしてインストールを行います。

$ pwd 
/usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/OpenNI-Bin-Dev-Linux-x64-v1.5.4.0/ 
$ sudo ./install.sh

NITE の動作確認

cd ~/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release
./Sample-NiSimpleSkeleton 
cd /usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/Samples/Bin/x64-Release
./Sample-PointViewer

手のひらのトラッキング
Pic.3 "Sample-PointViewer" で手のひらをトラッキングできていることを確認

cd /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release
./Sample-NiUserTracker

骨格のトラッキング
Pic.4 "Sample-NiUserTracker" で骨格をトラッキングできていることを確認

Point Cloud Library (PCL) のインストール

※注意※
本エントリの方法でPCLをインストールすると、新しく OpenNI がインストールされるようで、先程インストールしたOpenNI(+SensorKinect) が使えなくなるようでした。
ですので私は共存させることを諦め、PCLをアンインストールし、OpenNIとSensorKinectをインストールし直しました。

PCL*4 については下記サイトが一番詳しかったです。

【シリーズ「PCLを触ってみよう!」第一回】3D点群処理ライブラリ「Point Cloud... | DERiVE コンピュータビジョン ブログ

インストール

sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all

動作確認

pcl_openni_viewer
pcl_openni_pcd_recorder
pcl_viewer usa.pcd

付録(失敗手順)

OpenNI2 のインストール

$ sudo apt-get install -y libcv-dev
$ sudo apt-get install -y libudev-dev 
$ sudo apt-get install -y openjdk-7-jdk
$ mkdir ~/git
$ cd ~/git
$ git clone https://github.com/occipital/openni2
$ cd openni2/Packaging
$ python ./ReleaseVersion.py x64
$ cd OpenNI-Linux-x64-2.2/Samples/Bin
$ ./SimpleViewer
After initialization:

SimpleViewer: Device open failed:
    DeviceOpen using default: no devices found

Kinectバイスが見つからないようです。

OpenNI2 が Kinect を扱えるように、ドライバのインストールを行う

OpenNI2-FreenectDriver のインストールで、OpenNI2 から Kinect を認識できるという下記記事を見つけたので、インストールを試みました。

DeviceOpen using default: no devices found · Issue #31 · occipital/OpenNI2

OpenNI2-FreenectDriver のインストール(失敗)

$ cd ~/git
$ git clone https://github.com/OpenKinect/libfreenect
$ cd libfreenect
$ mkdir build
$ cd build
$ cmake .. -DBUILD_OPENNI2_DRIVER=ON
〜略〜
Undefined reference to libusb_get_parent()
〜略〜

全エラー内容はコピーし忘れたのですが、"libusb >= 1.0.18" で失敗したことが分かりました。

"libusb-1.0.20" のインストール

下記記事を参考に、インストール作業を行いました。

make - Undefined reference to libusb_get_parent() - compiling freenect - Stack Overflow

cd /usr/local/src
wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.20/libusb-1.0.20.tar.bz2
tar -xvf libusb-1.0.20.tar.bz2
cd libusb-1.0.18/
./configure --prefix=/usr --disable-static
make
sudo make install
sudo ln -s /usr/lib/libusb-1.0.so /usr/lib/x86_64-linux-gnu/libusb-1.0.so

OpenNI2-FreenectDriver のインストール(成功)

sudo apt-get install -y libudev-dev
cd ~/git
git clone https://github.com/OpenKinect/libfreenect
cd libfreenect
mkdir build
cd build
cmake .. -DBUILD_OPENNI2_DRIVER=ON
make
#Repository="/example/path/to/Samples/Bin/OpenNI2/Drivers/"
cp -L lib/OpenNI2-FreenectDriver/libFreenectDriver.so ${Repository}
# ln -s lib/OpenNI2-FreenectDriver/libFreenectDriver.{so,dylib} ${Repository}

上記、共有ライブラリの配置やリンクをおいたり試行錯誤したのですが、自分の環境では OpenNI2 を使うことはできませんでした。
(そして諦めて、OpenNi をインストールし始めました、という訳です。)

List.1 ドライバのインストール状態と、各ライブラリ・ミドルウェアの動作関係("Ubuntu12.04"+"Kinect v1")

OpenKinect OpenNI+NITE OpenNI2 PCL
Kinectドライバ事前インストール無し o x x o
avin2/SensorKinect o x x o
synapticon/SensorKinect o o x o
OpenNI2-FreenectDriver o x x(本来は動く。Kinect v2なら?) o

所感

Kinect も値段の割にすごいハードウェアですし、OpenNI も PCL もすごいライブラリですね。

そしてちょっと今回気付いたのは、自分の好みは "hecomi" さんの後追いが多いなーと。
意図してないのですが、何かに熱中して調べだすと "hecomi" さんの 凹みTips に行き着くんですよね(^^;
この予想だと、自分の次の興味は "Oculus Rift" になりそうです。

以上