JetsonNanoでLookingGlassを動かす - ThreeJsDriverをインストールする
追記
公式の最新のThree.js Driver(この時点ではv1.3.0b)でLinux armv8対応、動作確認したので、一部記事内容を差し替えました。Thanks @wormyrocks, @z_zabaglione !
これまでの記事リンク
JetsonNanoでLookingGlassを動かす - Jetsonブートまで
JetsonNanoでLookingGlassを動かす - JetsonNano上にローカルサーバーを建てる
はじめに
今回はJetsonNanoにThreeJSDriverをインストールするところについて解説をします。備忘録としてお使いください。
インストールパッケージを公式サイトからDLする
追記:
前のバージョンをすでにinstallされている方は、前のバージョンのインストールファイルからドライバなどのアンインストールしてから新しいドライバをインストールするほうが安全です。uninstall.shを実行してアンインストールします。
sudo ./uninstall.sh
公式サイトからLinux向けのインストールパッケージをダウンロードします。カレントディレクトリはユーザーのホームディレクトリ(/home/<ユーザー名>/)以下であれば大丈夫ですが、lkg-driverなどのフォルダを作成して、そこで作業すればよいかと思います。いつもの通り、SSHからJetsonNanoにログインした後からの作業になります。ファイルそのものはgithubに置かれているので、リンクをたどれば、tar.gz形式のファイルをDLできると思います。ターミナルからインストールします。以下コマンド中のURLは記事を書いたタイミングのv1.3.0になっているので、もっと新しいバージョンが出ている場合はURLの部分を置き換えて実行してください。
mkdir lkg-driver
cd lkg-driver/
curl -sLO https://github.com/Looking-Glass/ThreeJsDriver/releases/download/linux/LKG_ThreeJsDriver_Lin_1.3.0.tar.gz
圧縮ファイルがDLされるので、以下のコマンドを実行します。名前が長いのでtar -xvf LKGまで打って、Tabキーを押せばファイル名が自動的に保管されるので、そのままエンターキーを押します。解凍されたファイルがターミナルに表示されます。
tar -xvf LKG_ThreeJsDriver_Lin_1.3.0.tar.gz
インストールスクリプトを実行する
解凍後、LKG_ThreeJsDriver_Lin_1.3.0フォルダが作られ、その中にbinフォルダ、install.sh、uninstall.shが作成されると思います。以下のコマンドでインストールを実行します。sudoで実行する必要があるので、パスワードを続けて入力します。
cd LKG_ThreeJsDriver_Lin_1.3.0
sudo ./install.sh
実行するとJetsonNanoでは bin/aarch64フォルダ内のcalibration_loader_linux_aarch64 の実行ファイルが /usr/local/bin/ フォルダに load_lgcalibration としてリネームされて保存されます。つづけてWebSocketサーバーのインストールについて促されますので、yを押して進みます。
Copying udev rule... Done.
Copying calibration binary... Done.
We've installed the calibration loader binary; just run load_lgcalibration.
Would you also like to install the holoplay.js driver (version 1.3.0)? (y/n)
こちらも bin/aarch64 フォルダ内の websocketd ファイルが /usr/local/bin/ フォルダに lkg-wegsocketd として保存されますが、同時にサービスとして登録されるため、実行自体は起動スクリプトとして /etc/init.d/lkg-threejs-driver が作られます。サービスを停止したい場合は
service lkg-threejs-driver stop
起動したい場合は
service lkg-threejs-driver start
起動の状態を確認したい場合は
service lkg-threejs-driver status
で確認できます。インストール時に自動的に起動しているので特段気をつけることはありませんが、動作がおかしいときにこのあたりの状態を気にすると何らかの助けになるかもしれません。
ユーザーをplugdevのグループに追加
JetsonNano(Linux)の場合、usbで接続するデバイスや特殊なHIDデバイスの場合、別途アクセス権限を管理する必要があります。前のインストール処理の際、 /etc/udev/rules.d/ のフォルダ内に 99-holoplay.rules が追加されますが、このファイル内にLookingGlassのデバイスにアクセスするためのグループが記述されています。この plugdev のグループにユーザーアカウントが追加されていないと動作しません。(詳細は省略しますが、起動スクリプトで、ドライバをインストールしたときのユーザーとしてサーバーを起動するように設定されているようです。)
以下のコマンドで現在追加されているグループを確認します。
groups <ユーザー名>
plugdev の記述がない場合は、以下のコマンドでユーザーアカウントを plugdev に追加します。
sudo gpasswd -a <ユーザー名> plugdev
確認が終わったら、一旦JetsonNanoを再起動します。
sudo shutdown -r now
SSH接続が切れるので再度JetsonNanoにログインし直します。
キャリブレーションパラメータの取得を確認する
キャリブレーションアプリを実行確認
インストールしたドライバ取得できているか確認します。JetsonNanoにLookingGlassを接続しておいてください。
以下のコマンドから直接キャリブレーションパラメータを取得するアプリをを実行してみます。
/usr/local/bin/load_lgcalibration
うまく接続できていれば、Json形式のキャリブレーションパラメータが取得できるはずです。このとき何も表示されていない場合は、ユーザーがplugdevのグループに参加できていない可能性があります。その場合はsudo をつけて実行してみてください。それでも駄目な場合は、LookingGlassをうまく認識ていないか、正しくドライバをインストールできていない可能性があります。
WebSocketサーバー経由でのキャリブレーションアプリを実行確認
次はWebSocketサーバー経由でキャリブレーションパラメータが取得できるかを確認します。
プロジェクトフォルダ(~/git-root/lkg-sample等)に移動して、wscatをインストールします。
npm install -D wscat
インストールが終わったら、以下のコマンドを実行します。
npx wscat -c ws://localhost:11222
うまく実行できれば、以下のような形式で表示されます。
connected (press CTRL+C to quit)
<ここにキャリブレーションパラメータが表示される>
disconnected (code: 1006)
connectedの行とdisconnectedの行の間に何も表示されていない場合は、上記と同じような理由でうまく動作していないかと思われます。
Human Interface Device(HID) 周りの問題について
実はChromium(とOpera)にはWebUSB APIというUSBデバイスにアクセスできるAPIが用意されているのですが、現在セキュリティの問題でマウスやキーボードなどの分類に当たるHIDデバイスにアクセス出来ないようになっているようです。(以前はできていたようです)。 LookingGlassのデバイスはHIDデバイスとして設定されているため、直接ブラウザではキャリブレーションパラメータを取得できず、苦肉の策でローカルに建てられたWebSocketサーバー経由で取得する方法が取られています。
しかし、WebUSBの上位APIにあたるWebHID APIが追加されたChromium version 78がリリースされる予定(2019年10月)で、もしこのAPIを利用してパラメータが取得できるようになれば、ドライバのインストールが不要になるので、ブラウザでの開発が楽になるかもしれません。
参考記事: https://blog.scottlogic.com/2019/04/03/upcoming-webhid-api.html
次回について
次回は公式のチュートリアルを紐解くようになるかと思います。