見出し画像

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

特にフレーム落ちなどもしてなさそう。

ひとまず今回はここまで。
引き続き、他の遊び方を探してみます。

この記事が気に入ったらサポートをしてみませんか?