はじめに
今回は、NanoPi NEO3を入手れたので、少し調べた結果を記録しておきます。
aeroTAP 3D カメラ(https://www.aerotap.com/) を接続して、簡単にネットワーク3Dカメラ化するための手順を記事にしておきます。
NanoPi NEO3は、ARM Cortex-A53(64ビットクワッドコア RK3328)にUSB3.0ポートが付いた極小で安価なSBCです。さらにギガビット イーサーネットも搭載しているので、3Dネットワークカメラの構築にいいのでは?と思います。
方法
ここでは、cam2webを使ってカメラをネットワーク化します。
NanoPi NEO3のような安価な極小SBCでリアルタイムで3Dデータをネットワーク越しで得られると、また新しいアイデアが出て来るのではないでしょうか。
#準備するもの
- NanoPi NEO3 (ネットワークケーブル)
- aeroTAP 3Dカメラ
- PC (Putty, ブラウザ)
ソフトウェア
- cam2web http://www.cvsandbox.com/projects/cam2web/
- aeroTAP SDK ( Linux版 ) https://www.aerotap.com/developer.html
GitHubにキットをアップしましたのでご利用ください。
#NEO3 セットアップ
Nano Pi NEO3のセットアップは、 https://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO3 を参照しました。
イメージは、rk3328-sd-friendlycore-lite-focal-5.10-arm64-20210830.img
を使います。下記のステップで作業しました。
- DiskIamgerでMicro SDにイメージを書き込み
- Nano Pi NEO3をネットワークに接続し、電源Onで起動
- DHCPで起動されるので、Nano Pi NEO3のIPアドレスを探す
- PCからssh (Putty)を使って接続
- ユーザー名/パスワード pi/piでログイン
OS環境の設定
無事にログインできたら、以下のコマンドを実行して必要な環境を設定します。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get intall libudev-dev
sudo apt-get install libv4l-dev
sudo apt-get install libjpeg8 libjpeg8-dev
cam2web のビルド
cam2web をGitHubからダウンロードして、いくつかのaeroTAP 3Dカメラを使うためにカメラ部分のコードを変更します。
変更したcam2webのコードをGitHubにアップしました。
ダウンロード、展開してビルドします。
tar -vxzf cam2web.tar.gz
cd ~/cam2web-aeeoTAP/src/tools/web2h/make/gcc
make
cd ~/cam2web-aeroTAP/src/apps/linux
make
cam2webの実行
ビルドが成功したら、後はaeroTAP 3DカメラをNano Pi NEO3のUSBポートに接続して実行するだけですが、その前に、aeroTAP SDKのライブラリを共有化します。
export LD_LIBRARY_PATH=~/cam2web-aeroTAP/src/core/cameras/aeroCAM/lib/linux_aarch64
cam2webを実行する前に、コマンドライン パラメータを確認してください。
./cam2web -?
-size<0-12>
パラメータでカメラの解像度を選択できます。
利用可能な解像度は、利用する aeroTAP 3Dカメラにより異なります。
aeroTAP 3D G2 | aeroTAP 3D | aeroTAP 3D GS |
---|---|---|
320x240 | 320x240 | - |
640x480 | 640x480 | 640x480 |
- | 640x400 | - |
1280x720 | - | 1280x720 |
例えば、aeroTAP 3D G2カメラを使っている場合、-size:0
, -size:2
, -size:3
を選択することができます。
解像度が小さいほど高速で画像が得られます。
./cam2web -size:0
結果の表示
エラーなく起動できたら、PCのブラウザから3D画像(Depth Map)をストリーミングしてみましょう。
ブラウザを起動して、URL http://192.168.1.131:8000
を入力します。
- IPアドレスは、Nano Pi NEO3のIPアドレスです。
結構高速で3Dデータを色で表した画像ストリーミングが得られます。
-size:3
で1280x720で取得してみましょう。
これをRaspberry pi3で実行すると非常に遅いのですが、さすがNano Pi NEO3です。
その他拡張
カメラに関するソースコードは、/cam2web-aeroTAP/src/core/cameras/V4L2/XV4LCamera.cpp
になります。
aeroTAP SDKを使っています。
カラー画像化した3Dデータをストリーミングしています。
カラー画像、グレースケール画像、3D RAWデータに変えたりできます。
3D RAWデータで別のPCで取得して、3D表示/解析するなども可能になります。
#define _IMAGE_COLOR 0
#define _IMAGE_GRAY 1
#define _IMAGE_DEPTH 2
#define _IMAGE_DEPTHRAW 3
...
bool XV4LCameraData::Init( )
{
...
nImageType = _IMAGE_DEPTH;
Raspberry Pi 3での実験
同じ手順で、Raspberry Pi3のネットワーク3Dカメラ化も可能です。
Raspberry Pi 3では、aeroTAP SDK /linux_arm フォルダのライブラリを使うことに注意してください。
ビルド前に、cam2web-aeroTAP/src/apps/linux/Makefile
line:95 を編集してください。
$(COMPILER) -o $@ $(OBJ) $(LDFLAGS) -L/home/pi/aeroTAP/lib/linux_arm
cam2web-aeroTAP/src/core/cameras/aeroCAM/lib/linux_arm
フォルダー内のlibaeroTAP-sdk.so を共有化します。
export LD_LIBRARY_PATH=~/cam2web-aeroTAP/src/core/cameras/aeroCAM/lib/linux_arm
*Raspberry Pi3では、640x480 が限界でしょうか。1280x720では相当フレームの更新が遅いです。
その他Linux ( Ubuntu )
Ubuntuでは、aeroTAP SDK /linux64 フォルダのライブラリを使うことに注意してください。同様にMakefileを編集してください。
終わりに
今回、aeroTAP 3Dカメラを接続するためにcam2webのL4L2のコードを基に最小限変更してみました。画像の切り替えなどもクライアント側からできるといいのですが、何もしてません。
さらに展開してもらえれば幸いです。