Jetson Nano関係のTIPSまとめ


![jetson_nano.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/99c154f6-3fd9-a62f-3377-f394b05159fd.jpeg)


# Jetson Nanoの初期セットアップ方法・必要周辺機器など
　NVIDIAのシングルボードコンピュータJetson Nano買いました。購入方法や、セットアップ方法は、ブログに書いたので以下記事参照下さい。

[Jetson Nanoをセットアップしてディープラーニングで画像認識試してみた](https://karaage.hatenadiary.jp/entry/2019/04/29/073000)

　Jetson Nanoの購入先はいろいろあるので、以下参照ください。

[Jetson Nano購入先まとめ](https://zenn.dev/karaage0703/articles/17708439375e4f)

　必要な周辺機器などは、以下の記事にまとめていますので参照下さい。

[Amazonでまとめて買える！Jetson Nanoのおすすめ周辺機器](https://karaage.hatenadiary.jp/entry/2019/08/19/073000)


　本記事では、Jetson Nanoに関するちょっとしたTIPSや有益な情報などをまとめていきます。随時更新しています。

　追記：JetPack4.4/4.5に対応した記事を書きました
[Jetson NanoにJetPack 4.4/4.5を入れてTensorFlow・物体検出・姿勢推定・ROS2(Realsense)動かしてみた](https://qiita.com/karaage0703/items/604ff6e0a8287aa0dce7)

# Jetson Nano TIPS
## 過去のSDイメージファイル・バージョン確認方法
　SDカードの過去のイメージファイルを使いたい場合は、以下記事参照下さい。

[Jetson Nanoで使えるSDカードのイメージファイルまとめとイメージ書き込み方法](https://qiita.com/karaage0703/items/0583528f1f9c34911a31)

　SDカードのバージョンが分からなくなったときは、以下のコマンドで調べられます。

```sh
$ cat /etc/nv_tegra_release 
```

　1行目に表示されるのが、SDカードのバージョン情報です。例えば以下の場合は、 r32.1 となります。最後の日付が、作成された日になるので、どの程度古いイメージかが判断できます。

```
# R32 (release), REVISION: 1.0, GCID: 14531094, BOARD: t210ref, EABI: aarch64, DATE: Wed Mar 13 07:46:13 UTC 2019
```

　ただ、実は`/etc/nv_tegra_release`がないバージョンもあります（r32.2.1とか）。その場合は、以下コマンドで確認可能です。

```sh
$ dpkg-query --showformat='${Version}' --show nvidia-l4t-core
```

　以下のように表示されます。

```
322.1-20190812212815
```

## ディープラーニング関係
　ディープラーニング関係のセットアップ方法や応用例は、以下記事にまとめました。

[Jetson Nanoでディープラーニング](https://qiita.com/karaage0703/items/b09f3c65eb3913d087e4)

## GPU負荷のモニタリング方法
### tegrastatsを使う方法
　標準でセットアップされているtegrastatsを使うと、簡単にCPU、GPU負荷、メモリ使用量等をCUIで確認できます。以下コマンド実行するだけです。

```sh
$ tegrastats
```

### gpuGraphを使う方法
　以下ソフトを使用します。
[gpuGraph](https://github.com/JetsonHacksNano/gpuGraph)

　使用方法は以下です。

```sh
$ git clone https://github.com/JetsonHacksNano/gpuGraph
$ cd gpuGraph
$ python3 gpuGraph.py
```

　以下のようなモニターが表示され、GPU消費量を確認できます。
![gpu_monitor.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/ec60fe78-3a28-6539-7677-f1fd534413c0.jpeg)

### jetson_statsを使う方法
　調査中。良さそう。

[rbonghi/jetson_stats(GitHub)](https://github.com/rbonghi/jetson_stats)

## Swapファイルの設定
　[installSwapfile](https://github.com/JetsonHacksNano/installSwapfile)というリポジトリのスクリプトファイルを使えば、以下2行実行するだけで6GのSwapファイルが生成されます。

```sh
$ git clone https://github.com/JetsonHacksNano/installSwapfile
$ cd installSwapfile
$ ./installSwapfile.sh
```

　Swapファイルのサイズを変更したい場合は、`installSwapFile.sh`の`SWAPSIZE=6`を好きな数字に変更しましょう(6Gか4Gが推奨とスクリプトファイルには書いてあります）。

　確認は、以下のようにfreeコマンドで行います。

```sh
$ free -h
```

　以下のようにSwsapのtotalサイズが6.0GになっていればOKです。

```
              total        used        free      shared  buff/cache   available
Mem:           3.9G        864M        2.6G         30M        448M        2.8G
Swap:          6.0G          0B        6.0G
```

## カメラ使用
### ラズパイカメラモジュールの動作確認
　Raspberry Pi CameraモジュールV2が使用できます（V1は使用不可のようなので注意して下さい）。

　特別なセットアップは不要です。以下のQiitaの記事が詳しく、私も参考にさせていただきました。

[Jetson Nano 開発者キットで Raspberry Pi カメラを使う](https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32)

　~~ただ、カメラ表示はGPUを結構消費するらしく、ディープラーニングで画像認識をリアルタイムに行うときは、カメラ表示サイズは小さくした方がよいです。大きくすると、固まってしまいます。具体的には、widthとheightを300以下程度にしておくのが良いです。~~ 

　どうも、ディープラーニング等の重い処理とカメラを同時に走らせると、フリーズしてしまうことがあるようです。私の環境では、ディープラーニングの画像認識のときに発生しました。

　事前にカメラをしばらく動作させた方が安定するようです。テストスクリプトを作成しました。以下2行でダウンロードして実行できますので、よろしければ試してみて下さい。。

```sh
$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/raspi_cam_test.py
$ python3 raspi_cam_test.py
```

追記： JetPack V4.4では、解像度設定 3280 x 2464ではカメラが動かないようです。解像度を 1920 x 1080 に落とすことで解決しました。スクリプトも修正しました。

参考：[カメラ画像をJetson nanoで表示させたい](https://teratail.com/questions/261690)

### 動画の保存方法
　スクリプト作成しました。以下2行で動画を保存できます。実行した場所に`output.avi`という動画ファイルが生成されます。

```sh
$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/raspi_cam_save_video.py
$ python3 raspi_cam_save_video.py
```


### USBカメラの使用方法
　普通のUSBカメラも使えます。Python+Open CVの場合は、カメラを以下のように指定しましょう。`0`はラズパイカメラに割り当てられているので、`1`になるようです。

```python
cam = cv2.VideoCapture(1)
```

## FAN制御の方法
　前提として、FANは5Vのものを購入するように気をつけましょう。詳細は以下参照下さい。

[Jetson Nanoのファン購入に気をつけろ！](https://qiita.com/yamamo-to/items/bf77048b6f650aad346f)

 また、ネジの取り付けに関しては以下の記事が詳しいので参考にしてみて下さい。
[Jetson Nanoにファン追加](http://matsujirushi.hatenablog.jp/entry/2019/08/18/103910)

　FANを付けたら、以下コマンドで制御可能です。

FANをON（MAX速度）するときのコマンド：

```sh
$ sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
```

FANをOFFするときのコマンド：

```sh
$ sudo sh -c 'echo 0 > /sys/devices/pwm-fan/target_pwm'
```

　echoの後の数字を変えると、FANの速度を制御できます。大きくするほど速くなり`255`がMaxです。

　その他、以下コマンドでJetson Nanoのクロック速度を最大化したときもFANは最大速度に自動的に設定されます。

```sh
$ sudo jetson_clocks
```

参考：[Jetson Nano Fan](https://devtalk.nvidia.com/default/topic/1049521/jetson-nano-fan/)


## VS Codeエディタでファイル編集
　VS CodeエディタをJetson Nanoにインストールしたい場合は、以下コマンドで可能です。

```sh
$ cd && wget -O insider.deb https://update.code.visualstudio.com/latest/linux-deb-arm64/insider
$ sudo apt install ./insider.deb
$ sudo mv /usr/bin/code-insiders /usr/bin/code
```

![vscode_jetson_nano.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/85a979fe-f952-a758-6e84-fa07c9a05a1c.png)


　その他、VS Codeエディタに関する情報は、以下のZennの本を参照ください。リモート開発の方法なども記載あります。

[VS Codeエディタ入門（Zenn）](https://zenn.dev/karaage0703/books/80b6999d429abc8051bb)

## ホスト名を`hostname.local`でJetsonにアクセス
　IPアドレスでアクセスするのが面倒なので、Raspberry Piのように`.local`でアクセスできるようにします。 以下コマンドでavahi-daemonをインストールするだけです。

```sh
$ sudo apt-get install avahi-daemon
```

　これで、Jetson Nanoのホスト名が`jetsonnano`だとすると、Macのターミナルから以下コマンドでsshでアクセスできます。

```sh
$ ssh karaage@jetsonnano.local
```

　Windowsでも同様と思いますが、古いWindowsでアクセスできない場合はiTunesをインストールすると解決するはずです。

## パフォーマンスの最大化
　以下のコマンドでパフォーマンスモードを変更できます。`-m`の後の数字が`0`のときが最大(Maxモード）で`1`が最小（5Wモード）です。

```sh
$ sudo nvpmodel -m 0
```

　現在のモードを知りたいときは、以下コマンドです。

```sh
$ sudo nvpmodel -q
```

　また、以下コマンドを実行すると、クロック周波数などのパフォーマンスを最大化できます。FANがついていれば、FANも最大速度で動作します。

```sh
$ sudo jetson_clocks
```

　現在の設定は以下コマンドで確認できます。

```sh
$ sudo jetson_clocks --show
```

　jetson_clocksの本体は `/usr/bin/jetson_clocks` なので、何をしているか知りたい場合は、直接ファイルの中身を確認しましょう（`$ less /usr/bin/jetson_clocks`で確認できます）。

## Jetson Nanoにリモートデスクトップ接続
　以下記事参照ください。

[Jetson NanoでMacから手軽にリモート接続する方法](https://qiita.com/karaage0703/items/f133eacf166ee76a07f2)

## 日本語入力


```sh
$ sudo apt install -y ibus-mozc
$ sudo apt install -y language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF8
```

右上の漢字変換アイコンをクリックして「Text Entry Setting...」を開いて以下のように日本語(Mozc)を追加します。

![Desktop-screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/3712ca7a-b0fe-95aa-b0f0-0614458daa9f.png)

これで漢字変換アイコンで日本語(Mozc)を選べば日本語が使えるようになります。

## ウィンドウのスクリーンショットの取り方
　Jetson NanoというかUbuntuあるあるですが、`Alt + PrintScreen`でのスクショが効かないので、以下のコマンド実行した後、スクリーンショットをとりたいウィンドウをアクティブにするとスクリーン画面をキャプチャーできます。

```sh
$ gnome-screenshot --window --delay=5
```

## bashrcの設定
　以下くらいを設定しておくと便利です。

[便利なbashrc設定のメモ Ubuntu(Raspberry Pi/Jetson Nano)](https://qiita.com/karaage0703/items/3fa7d6a2b01875c9de60)

## Jetson NanoにROSをインストールする方法
　以下記事参照下さい。JetPack 4.5で確認しています。

[Jetson NanoにROSをインストールする方法](https://qiita.com/karaage0703/items/aa54e086f0a2f165d3e9)

## Jetson NanoでIntel Realsense D435を使う方法
　以下記事参照下さい。JetPack 4.5で確認しています。

[Jetson NanoでIntel Realsense D435を使う方法（ROS対応）](https://qiita.com/karaage0703/items/cb9bbe1b4f2504f8ad0d)

[Jetson NanoでRealsenseのPythonラッパーPyRealsenseを使用する方法](https://qiita.com/karaage0703/items/39040f23cbb0611c0a0e)

## Jetson Nanoにpygameをインストールする方法
　以下記事参照下さい。JetPack 4.5で確認しています。

[Jetson Nanoにpygameをインストールする方法（Python2/Python3）](https://qiita.com/karaage0703/items/5d43309bc688858e7c2a)

## Jetson Nanoでカーネルビルドする方法（MIDIを使う方法）
　以下記事参照下さい。JetPack 4.5で確認しています。

[Jetson NanoでMIDIを使うためにカーネルビルド](https://qiita.com/karaage0703/items/9bef6aeec9ad24f647c6)

[Jetson NanoからMIDIでポケット・ミクを制御](https://karaage.hatenadiary.jp/entry/2019/06/28/073000)

## Jetson NanoのSDカードを丸ごとハードコピー（イメージ化）する方法
[Jetson NanoのSDカードを丸ごとハードコピー（イメージ化）する方法](https://qiita.com/karaage0703/items/e2170d4d1eab7fdabe46)

## Jetson Nanoとラズパイを組み合わせて使う方法
[ラズパイをJetson Nanoのサブボードとして使う方法（電源供給とシリアル通信）](https://karaage.hatenadiary.jp/entry/2020/01/27/073000)

## myCobotをJetson Nanoで制御
　実質無料（6万円）の6軸ロボットアームmyCobotをJetson Nanoで使う方法です。以下のZennの書籍を参照ください。

[myCobotのすべて](https://zenn.dev/karaage0703/books/3be6bad93b0c8e)

# トラブルシューティング

## Pythonでimportしようとすると`Illegal instruction (core dumped)`が発生

既知の問題のようです。Workaroundとして、以下コマンド実行すると治ります。

```sh
$ export OPENBLAS_CORETYPE=ARMV8
```

参考：

https://zenn.dev/phpmyadmin/scraps/7b4d903ff93b33


https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-8-0-now-available/72048/708


## lockファイル関係のエラー
　`apt-get`で`Could not get lock /var/lib/dpkg/lock`というエラーがでるときの対応です。

　以下参照
[Fix ‘E: Could not get lock /var/lib/dpkg/lock’ Error in Ubuntu [Quick Tip]](https://itsfoss.com/could-not-get-lock-error/)

　ちなみに、私はlockファイルと間違えて`/var/lib/dpkg`を丸ごと削除してしまいましたが、以下で復旧できました。

[How to recover deleted “dpkg” directory?](https://askubuntu.com/questions/383339/how-to-recover-deleted-dpkg-directory)

　lockファイルのエラーは、自動アップデートを停止すれば解消できるようです。自動アップデートを停止するスクリプトも自作のツール群のリポジトリ`jetson-nano-tools`に用意しました（このスクリプトはPull Requestいただきました）。

　以下で使用できます。

```sh
$ git clone https://github.com/karaage0703/jetson-nano-tools
$ ./jetson-nano-tools/disable-apt-autoupgrade.sh
```

## ログが肥大化して残り容量が枯渇
　`/var/log/syslog`の容量が肥大化（数GB）して、残り容量が枯渇しました。

　`nvargus-daemon`の`Error InvalidState`というエラーが書き込まれ続けているようです。ラズパイカメラをOpenCVで表示させたときに発生しています。

　原因と対策はまだ未実施です。

# 関連するGitHubリポジトリ
## NVIDIA公式
[jetracer](https://github.com/NVIDIA-AI-IOT/jetracer)
市販のラジコンを改造して、Jetson Nanoを載せてAI教育用の教材Jetracerとして仕立て上げるプロジェクト

[Jetbot](https://github.com/NVIDIA-AI-IOT/jetbot)
JetbotというNvidia Nanoを使ったロボットのソフトと設計情報です。ロボットということで、カメラやモーターなどを動かすためのノウハウが詰め込まれており色々参考になります。

[dusty-nv/jetson-inference](https://github.com/dusty-nv/jetson-inference)
NVIDIAのエンジニアが作成した、ディープラーニング推論ソフト

## 非公式プロジェクト
[karaage0703/jetson-nano-tools](https://github.com/karaage0703/jetson-nano-tools)
私が作成した、Jetson Nanoを手軽にセットアップするためのスクリプト、便利に使うためのツール群です。


[yqlbu/jetson-packages-family](https://github.com/yqlbu/jetson-packages-family)
Jetsonでよく使うパッケージをインストールするためのインストラクション集。

[madelinegannon/jetson-nano-accessories](https://github.com/madelinegannon/jetson-nano-accessories)
Jetson Nanoの色々なマウントやアダプターの3Dデータ（stlファイル）を公開しているGitHubのリポジトリ。データ自体も良さそうだけど、何よりREADMEが見やすくて良いです。かなりプリントしたくなります。

[antmicro/jetson-nano-baseboard](https://github.com/antmicro/jetson-nano-baseboard)
Jetson Nanoのオープンソースなベースボードの設計情報。自分でベースボード設計するときに参考になりそうです。

[jetsonhacks/installLXDE](https://github.com/jetsonhacks/installLXDE)
Jetson NanoにLXDEデスクトップをセットアップするスクリプト

[rt-net/jetson_nano_csi_cam_ros](https://github.com/rt-net/jetson_nano_csi_cam_ros)

[atinfinity/jetson_ros_docker](https://github.com/atinfinity/jetson_ros_docker)

[raymondlo84/nvidia-jetson-ai-monitor](https://github.com/raymondlo84/nvidia-jetson-ai-monitor)

[jetsonhacks/jetsonUtilities](https://github.com/jetsonhacks/jetsonUtilities)

# 参考になるリンク
[GW中Jetsonのことばかり語るカレンダー](https://gw-advent.9wick.com/calendars/2)
GW中にJetson Nanoの情報を提供し続ける狂気のカレンダーです（笑） ブログ記事とYouTube動画を毎日アップし続けていてもの凄いコンテンツ量です。必見です！

[Jetson Nano を使ってみる!!](http://takesan.hatenablog.com/entry/2019/04/09/001852)
Jetson Nano上でDARKNET(YOLO)をインストールしてテストする方法

[JetsonHacks](https://www.jetsonhacks.com)
Jetsonに関する多くの情報があります（英語）。もちろんJetson Nano情報も多数です。[YouTube動画](https://www.youtube.com/channel/UCQs0lwV6E4p7LQaGJ6fgy5Q)もたくさんあります。

[NVIDIA Tegra Linux Driver Package Development Guide](https://docs.nvidia.com/jetson/l4t/index.html)
NVIDIAの開発者向けのガイドです（英語）。Jetson関係の詳細仕様が公開されています。重要な情報がさらりと書いてあったりしますので、開発者は必読です。

[Jetson NanoでGPGPU (CUDA) プログラミング ~ライフゲームの開発~](https://qiita.com/iwatake2222/items/978c3376010207e8fea2)
CUDAプログラミングに関する記事。めちゃ有用な予感です。

[Jetson NanoでGPUとOpenCVが有効なYoloをビルドするには](http://denor.daa.jp/jetson-nanoでgpuとopencvが有効なyoloをビルドするには)
Jetson NanoはYoloで物体検出している人が多い印象なので試してみたいです。

[Jetson NanoのSPIを有効にする](https://www.rt-shop.jp/blog/archives/11277)
SPIを使うための設定です。Raspberry Pi MouseにJetson Nanoを載せたりと面白そうなことをしています。

[「Jetson Nano」に5GHz WiFi USBアダプタ「GW-450D2」を繋いでみたよ！（検証用まな板のSTLデータ公開有り）](https://kitto-yakudatsu.com/archives/6003)
5GHzのWiFi USBアダプタのセットアップ方法と、簡単な台座（まな板）の3Dデータの情報があります。

[「Jetson Nano DevKit」のオリジナルケースを作って壁に掛けてみたよ！（STLデータ公開有り）](https://kitto-yakudatsu.com/archives/6058)
壁掛けもできるJetson Nano用のケースの3Dデータです。3Dプリンタ持っている人はプリント必至です！

[Jetson Nanoインストールメモ](https://qiita.com/n-yamanaka/items/dd82996312ab333fe9b2#_reference-45a5c1b511604a7e200e)
私がやってないことなども書かれているので、このページで不足情報あればこちらも参照してみて下さい。

[3DプリンタなしでオリジナルJetbotを作った記録](http://masato-ka.hatenablog.com/entry/2019/06/28/141339)
日本版のJetbotを作っている記事。オリジナルのJetbotの部品は日本では入手しづらいものもおおいので、こういう情報は本当に助かりますね。

[OpenCVの画像処理をGPU(CUDA)で高速化する](https://qiita.com/iwatake2222/items/dd7ea3efe65ac77bf783)

[Jetson NanoでTF-TRTを試す（Image Classification）](https://nextremer-nbo.blogspot.com/2019/09/jetson-nanotf-trtimage-classification.html)

[Jetson Zoo](https://elinux.org/Jetson_Zoo)

[【画像・音処理用】Jetson Nanoのセットアップ方法](https://qiita.com/shinmura0/items/08db54d98a7bef93f30d)

[Jetson‑IOがすごく良かった話とエラー対処方法](https://tiryoh.hateblo.jp/entry/2019/12/24/221411)
Jetson NanoのIO系はまだ全然触ってないのでメモ

[【MediaPipe】Jetson Nanoで環境構築し、CPU/GPUで動かしてみた（v0.7.5）](https://dev.classmethod.jp/articles/mediapipe-install-on-jetson-nano-with-cpu-gpu/)

[reComputer J1020 (Jetson Nano)にCUDA対応のOpenCVを入れてみた](https://lab.seeed.co.jp/entry/2022/12/01/120000)


# Jetson Nanoに関するスライド資料
[Getting Started with Jetson Nano](https://www.slideshare.net/NVIDIAJapan/getting-started-with-jetson-nano)
NVIDIAさん公式の資料です。Jetson Nanoを知らない人が概要を理解するのにピッタリです。英語資料です。

[Jetson Nano x TensorFlowで始めるモバイルAI画像認識](https://www.slideshare.net/karaage0703/jetson-nano-x-tensorflowai-149186926)
私が、[GoogleでGoogle NVIDIAさんに挟まれてJetson NanoとTensorFlowに関して発表した](https://karaage.hatenadiary.jp/entry/2019/06/12/073000)ときの資料です。

[Jetson Nanoはじめました](https://speakerdeck.com/myasu/rosjpug-setouchi-02)
Jetson NanoでROSを使う方法を中心に、色々なTIPSがちりばめられています


# Jetson Nanoの初心者向けの本を書きました
　この記事を最後までみて下さった方に、書籍の紹介をさせてください。実は私、「Jetson Nano超入門」というJetson Nano初心者向けの本を書きました！

　最短でJetson Nanoをある程度使えるようになりたいという人には絶好の本です。よろしければ是非。詳しくは以下リンク等参照下さい。

[共著で書いた本「Jetson Nano超入門」が12/21に発売されます](https://karaage.hatenadiary.jp/entry/2019/11/29/073000)

[「Jetson Nano超入門」サポートページ](https://karaage.hatenadiary.jp/jetson-nano-book)


### 書籍の宣伝「からあげ先生のとにかく楽しいAI自作教室」
　AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。

　文系でAI素人の私の妻も、実践できて理解を深められるような、初学者向けの内容になっています。Jetson Nanoが主体ではないですが、Raspberry Piを用いたエッジコンピューティングに関しても、まるまる1章解説しています。以下に紹介記事を書いていますので、興味ある方は是非ごらんください。

[AI初心者向けの独学本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました](https://karaage.hatenadiary.jp/entry/2020/12/11/073000)

# 変更履歴
- 2021/05/15 日本語入力とPythonのIllegal instruction (core dumped)エラーに関して追記
- 2021/02/10 JetPack 4.5に関して追記
- 2021/01/24 VS Codeエディタのインストールに関して追記
- 2020/12/20 書籍に関して追記
- 2020/07/15 微修正