Jetson Nano + openFrameworks
前回に引き続き…
JetsonNanoについて。
私の仕事としては、近年はスマートフォンアプリやデジタルサイネージを使ったインタラクティブコンテンツを製作することが多く、その制作にはUnityを用いることが多い。
UnityはPC (Windows, macOS, Linux)やiOS,Androidなどの多くのプラットフォームに対応しているものの、JetsonのLinux+ARM(CPUの種類。近年一般的なPCの場合はx86系)には対応していない。
しかし、Jetson Nanoは<謎の>グラフィックボードメーカーnVIDIAが開発しただけあって、グラフィック性能はRaspberryPIとくらべても優秀なはず。
となれば、この小さなボードで3Dグラフィックスがどのくらい動かせるのか、試してみたくなります。
今回は、プラグラムを用いたグラフィックス・サウンド生成などのアート系界隈ではメジャーなopenFrameworksをセットアップし、簡単なサンプルを動かしてみました。(個人的にはCinderのほうが好きだけど…Linux対応が薄いのが難点)
まだ新しいデバイスということもあり、セットアップにはそこそこ結構苦労した(おかげで火曜日公開のつもりが金曜までずれ込んだ)。
参考にさせていただいたURLを先に張っておく。
参考ページ
[参考 1]
[参考 2]
[参考 3] Jetson Nanoに対してはこれが一番正確。
https://gist.github.com/madelinegannon/237733e6c114f156b31366f47c1f3d32
セットアップ
まず、openFrameworksをダウンロードしてきます。
環境ごとに様々なバージョンが並んでいます。
[参考 1]にある通り2019/07/03現在、リリースバージョンではコンパイルエラーが発生してしまうため、download ページ下部の nightly builds を選択。
適当な場所(ここではホームディレクトリ[~/])にダウンロードし、解凍・インストール作業を行う。
# cmake インストール済みであれば不必要
$ sudo apt install cmake
$ tar -zxvf of_v20190324_linuxarnv7l_nightly.tar.gz
$ move of_v20190324_linuxarnv7l_nightly of_v20190324
$ cd of_v20190324/scripts/linux/ubuntu
$ sudo ./install_dependencies.sh
install_dependencies.shを実行中、何回か質問に答える必要がありますが、今回はすべてデフォルトのYesを選択。最後の行のコマンドが完了するまでには数分かかります。
これでopenFrameworksのビルドに必要な依存関係のダウンロードが完了するので、次はopenFrameworks自体のコンパイルを行う。
$ cd ../
$ ./compileOF.sh -j3 # -j4以上は途中で固まるので、-j3に留めるべき
しかし以下のようなエラーが発生。
コードを修正する必要があります。
HOST_OS=Linux
makefileCommon/config.shared.mk:86: *** recipe commences before first target. Stop.
there has been a problem compiling Debug OF library
please report this problem in the forums
[参考 2]、[参考 3]を読みながらmakeファイル等の修正を行う。
修正1
of_v20190324/libs/openFrameworksCompiled/project/makefileCommon/config.shared.mk を開き79行目
else ifeq ($(PLATFORM_ARCH),armv7l)
を
else ifeq ($(PLATFORM_ARCH),aarch64)
に変更。
修正2
of_v20190324/libs/openFrameworksCompiled/project/linuxarmv7l/config.lin
uxarmv7l.default.mk を開き41〜48行目付近
#PLATFORM_CFLAGS += -march=armv7
#PLATFORM_CFLAGS += -mtune=cortex-a8
#PLATFORM_CFLAGS += -mfpu=neon
#PLATFORM_CFLAGS += -mfloat-abi=hard
PLATFORM_CFLAGS += -fPIC
PLATFORM_CFLAGS += -ftree-vectorize
PLATFORM_CFLAGS += -Wno-psabi
PLATFORM_CFLAGS += -pipe
4行にコメント記号を入れる(上記#)、
さらに69〜71行目付近
#PLATFORM_PKG_CONFIG_LIBRARIES += glesv1_cm
#PLATFORM_PKG_CONFIG_LIBRARIES += glesv2
#PLATFORM_PKG_CONFIG_LIBRARIES += egl
3行にコメント記号を入れて保存。
引用元の修正3については、参考ページのGoogle Driveにあるファイルだとjjetson nanoでは上手くいかないため、[参考 3]の通り自分でapothecaryを追加し、コンパイルする必要がある。
$ cd ~/of_v20190324/scripts/
$ git clone clone https://github.com/openframeworks/apothecary.git
$ cd apothecary/apothecary
$ ./apothecary -t linux download kiss
$ ./apothecary -t linux prepare kiss
$ ./apothecary -t linux build kiss
$ ./apothecary -t linux download tess2
$ ./apothecary -t linux prepare tess2
$ ./apothecary -t linux build tess2
出来たファイルをopenFramewoksが参照するディレクトリに上書きコピー
$ cd ~/of_v20190324/
$ cp scripts/apothecary/apothecary/build/kiss/lib/linux/libkiss.a libs/kiss/lib/linuxarmv7l/
$ cp scripts/apothecary/apothecary/build/tess2_patched/build/libtess2.a libs/tess2/lib/linuxarmv7l/
改めて compileOF.sh を再度実行し処理完了を待つ。
$ cd ~/of_v20190324/scripts/linux
$ ./compileOF.sh -j3 # -j4以上だと途中で固まる?
・
・
・
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal libcurl glfw3 rtaudio libpulse-simple alsa gl glu glew gtk+-3.0
with PKG_CONFIG_LIBDIR=
Done!
文末にDone! と表示され、ターミナルの制御が戻ったらコンパイル成功です。
空プロジェクトのビルド
emptyExampleをビルド & 実行
$ cd ~/of_v20190324/examples/templates/emptyExample
$ make && make run
ここまで長かったですが、ひとまずビルド完了出来た。
あとはPCで使うopenFramewoksと同じく、ofApp.cppを修正&コンパイルすれば、変更が反映されることを確認することが出来る。
ウィンドウの初期化色をグレーから赤に変えてみるために、ofApp.cppを修正する。
void ofApp::setup(){
ofSetFrameRate(30);
ofSetBackgroundColor(200,0,0);
}
そして再度make && make run
$ make && make run
Examples
[参考 3]をみるかぎりアドオンについては別途ビルドが必要な模様。
libsvgtiny.aはまだ解決出来て無さそうなので、そのうち試すことにする。
$ cd ~/of_v20190324/examples/3d/3DPrimitivesExample
$ make && make run
$ cd ~/of_v20190324/examples/3d/pointCloudExample
$ make && make run
$ cd ~/of_v20190324/examples/graphics/graphicsExample
$ make && make run
特にフレーム落ちなどもしてなさそう。
ひとまず今回はここまで。
引き続き、他の遊び方を探してみます。
この記事が気に入ったらサポートをしてみませんか?