Raspberry Pi に 3Dカメラ Astra Sを繋いでサンプルプログラムを走らせてみる

Astra Sという3Dカメラをご存じでしょうか。

Astra SはマイクロソフトのKinectと同じパターン照射タイプの3Dカメラで、私の会社ではピッキングロボットのワーク検出など、距離画像が必要な産業用アプリケーションで活用しています。

特殊なレーザーパターンを照射して距離画像に変換するキネクトや、光が発光してから戻ってくるまでの微小な時間を測定して距離画像を求めるTOFタイプの民生用3Dカメラが発売されたことで、産業用アプリケーションでの3Dカメラ活用場面が一挙に拡大しました。

しかし、キネクトはマイクロソフトの都合に振り回され、ASUSのTOF3DカメラはAppleに買収されて一般向けのものが消えてしまい、残念な思いをしていました。

このORBBECはキネクトと同じ原理のカメラで、産業用途やロボット研究開発をターゲットにしているようで安心して使えるのではないかと期待しています。

価格もUSD$149.99で、産業用途向けの3Dカメラに比べて格段に安く手に入るのがうれしいところです。
日本で販売している窓口もありますがORBBECのサイトにアクセスして右上のBuyというボタンから販売ページに飛ぶことが出来て、カードさえあれば表示価格+日本向け送料で注文から数日で送ってくれます。

この3Dカメラの在庫が会社にあったのでRaspberry Pi 4に接続してみたところLinux用のサンプルビューワーとROSのサンプルで動作が確認出来ました。

動作環境:Raspberry Pi 4 4GB + Ubuntu 18.04 + ROS melodic

ROSをインストールするためにRaspberry pi にはUbuntu18.04をインストールしました。
ROSを紹介してあるWebの記事やROSサンプルプログラムにはUbuntu 16.04対応のROS kinetic を使った例が多いのですが、Raspberry pi 4にインストール出来るUbuntuイメージが 18.04しか見つからなかったので Ubuntu 18.04 対応のROS melodicを使っています。

Ubuntu用デバイスドライバ

Develop with OrbbecからOPENNI SDKをダウンロードします。
Raspberry pi からwgetコマンドでダウンロードすると良いでしょう。
Unzipコマンドで解凍すると色々なターゲット用のOPENNIが入っているので
OpenNI-Linux-Arm64-2.3.0.63を使います。
下の例は、ダウンロード後解凍して必要なディレクトリを/home/xxxにコピーしています。

$ cd ~/Downloads
$ wget http://dl.orbbec3d.com/dist/openni2/OpenNI_2.3.0.63.zip
$ unzip OpenNI_2.3.0.63.zip
$ cp -r OpenNI_2.3.0.63/Linux/OpenNI-Linux-Arm64-2.3.0.63 ~/

ディレクトリOpenNI-Linux-Arm64-2.3.0.63にあるReadmeがインストール手順ですが、Intel64をターゲットにした例なので注釈を入れておきます。

# There are two zip files, one is for 32bit machine, the other one is for 64bit # We choose 64bit(x64) and make the example as follows:
実際は、ダウンロードしたファイルの中にLinux用の他Windows用等のファイルが含まれていて、Linuxの下に Arm32, Arm64, X64, X86対応のドライバが入っています。

# To run visual samples(e.g., SimpleViewer), you will need freeglut3 header and libaries, please install:
必要なヘッダとライブラリをインストールする必要があります。

$ sudo apt install build-essential freeglut3 freeglut3-dev

#check udev version, Orbbec Driver need libudev.so.1, if can’t find it, can make symbolic link from libudev.so.x.x, #which usually locate in /lib/x86_64-linux-gnu or /lib/i386-linux-gnu

Orbbecのドライバはlibudev.so.1を必要とするので、もし見つからなかったら libudev.so.x.xからシンボリックリンクを作る必要があるとのことですが、/lib/aarch64-linux-gnu/libudev.so.1 があったので下の操作はパスしました。

$ldconfig -p | grep libudev.so.1 
$cd /lib/x86_64-linux-gnu 
$sudo ln -s libudev.so.x.x.x libudev.so.1

# copy tgz file to any place you want(e.g., Home) # unzip tgz file $ tar zxvf OpenNI-Linux-x64-2.2-0118.tgz $ cd OpenNI-Linux-x64-2.2

これは解凍して必要なディレクトリを/home/xxxにコピーする操作で、最初に説明した内容です。

install.shを実行します

# run install.sh to generate OpenNIDevEnvironment, which contains OpenNI development environment 

$ cd ~/OpenNI-Linux-Arm64-2.3.0.63
$ sudo chmod 777 install.sh
$ sudo ./install.sh

 please replug in the device for usb-register
USBコネクタを抜き差ししてデバイスを登録します

# add environment variables
環境変数を登録します

$ source OpenNIDevEnvironment

 # build sample(e.g., SimpleViewer)
サンプルプログラム SimpleViewerを実行します

$ cd Samples/SimpleViewer 
$ make 
$ cd Bin/Arm64-Release 
$ ./SimpleViewer

# now you should be able to see a GUI window showing the depth stream video
これでGUIウィンドウにデプスデータが表示されるはずです。