【JetCardを使えば一瞬】NVIDIA Jetson Nanoセットアップ  [2019年7月版] 

## TL;DR

- NVIDIA Jetson Nanoは、128コアのMaxwell GPUを搭載しながら、70 x 45 mmとRaspberry Piの様な超小型コンピュータ
- 公式のJetCardイメージを使うと、セットアップが60分以下で終わる
    - SDカードイメージのダウンロードに15分(ネットワーク次第)
    - SDカードへの書き込みに30分
    - 電源を入れ、USB有線での接続からWiFi接続に切替えるまで15分以下
- ディスプレイやキーボードをNanoに繋がなくてもセットアップできる
- JupyterLabも、SSHも、セットアップすればVNCで画面も見られる



## はじめに

2019年3月の発表以降、先人の皆様がJetson Nanoの有用な情報をまとめて下さっています。

- 何を買い揃える必要があるか、 [NVIDIA JETSON NANO 開発者キットを動かすのに必要なもの](https://denor.jp/nvidia-jetson-nano-%e9%96%8b%e7%99%ba%e8%80%85%e3%82%ad%e3%83%83%e3%83%88%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99%e3%81%ae%e3%81%ab%e5%bf%85%e8%a6%81%e3%81%aa%e3%82%82%e3%81%ae) が大変参考になりました
- セットアップや実プロジェクトで使うにあたり、からあげさんの [Jetson Nano関係のTIPSまとめ - Qiita](https://qiita.com/karaage0703/items/b14c249aa33112669ee4) がハマりところ含め網羅的です。通読がおすすめです

2019年6月末に、NVIDIAからJetson Nano関連の有用なプロジェクトが複数公開されました。特に[JetCard](http://github.com/NVIDIA-AI-IOT/jetcard)により、セットアップの簡略化が図られています。

ふまえて、今日(2019年7月時点)での、最速セットアップ方法(?)をまとめます。

本稿はMac中心で進めますが、Windows、Linuxパソコンからも実行できます。公式のチュートリアルコース [Getting Started with AI on Jetson Nano](https://courses.nvidia.com/courses/course-v1:DLI+C-RX-02+V1/about) 中の**Setting up your Jetson Nano**に、各OSに対応した詳細のガイドがあります(英語)。



## BOM

まず、以下を揃えます。Jetson Nanoは品薄状態が概ね解消したようです。Jetson Nano開発者キット単体では動作しないので、注意が必要です。オンラインならAmazon等で、オフラインなら秋葉原などの店舗(秋月電子、千石通商、あきばおーなど)でも揃います。

| 項目                                    | 目安価格 |  メモ              |
| --------------------------------------- | ---- | ----------------- |
| Jetson Nano Developer Kit               |  12,300円 |                  |
| 電源アダプタ(5V, 4A, 2.1mm内径DCプラグ) | 1,000円 |                 |
| USBケーブル(Micro-B to Type-A)          | 90円 |                  |
| 2 pinジャンパ(電源プラグ給電用)         | 100円 | J48をショートしDCプラグ型電源を使うため |
| Raspberry Pi カメラモジュール V2 | 3,900円  | USB Webカメラも可 |
| microSDカード(最低32GB, UHS-I) | 1,000円 |                    |
| WiFiドングル                            | 750円 |RPiと異なりWiFiが付属しない |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/ceef3239-b218-9529-a135-bfba91574e7e.png)




上記以外に、

- インターネットに接続でき、USB端子を持つMac/ Windows/ Linuxいずれかのパソコン
- WiFiルータ

が必要です。またJetson Nanoは熱を持つため、空冷ファンを後付けする方も多いようです。



## セットアップ 60分チャレンジ

NVIDIA公式から公開された[JetCard](http://github.com/NVIDIA-AI-IOT/jetcard)は、必要なソフトウェアがプリインストールされたSDカードイメージです。zip圧縮され7GB程度で配布されます。この公開により、とても手軽にセットアップできるようになりました。



### JetCardイメージのダウンロード [15分]

[NVIDIA JetCard](https://github.com/NVIDIA-AI-IOT/jetcard) GitHubリポジトリにある、[Googleドライブへのリンク](https://drive.google.com/open?id=1wXD1CwtxiH5Mz4uSmIZ76fd78zDQltW_) から圧縮されたイメージファイル `jetcard_v0p0p0.zip` をWindows、Linux、またはMacのデスクトップマシンにダウンロードします。ファイルが正しくダウンロードされているか、md5sumも確認できます。



### マイクロSDカードの書き込み [30分]



1. デスクトップマシンに32GB以上の容量があるSDカードを挿入する
2. FAT32でSDカードの初期化をする

> **注意:** 初期化されていないと、次に `Flash!`を押しても、 `Starting`のまま書き込みに進みません。
>
> **MacでのSDカード初期化方法**
>
>  `ディスクユーティリティ.app` を開き、対象のSDカードを左メニューから選択(自身のハードディスクを選ばないように注意!)する。上メニューの`消去`を押下する。`<ドライブ名称>を消去しますか?`というダイアログでフォーマット `MS-DOS(FAT)`、方式 `GUIDパーティションマップ`を選択、`消去`を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/3b1620ba-74e0-5886-4ead-124a2a8c4d93.png)



4. [Etcher](https://www.balena.io/etcher/)をインストールし、起動します。

5. 以下の画面が出たら、書き込むイメージに、先ほどダウンロードした `jetcard_v0p0p0.zip` を選びます。次に、書き込み先に対象のSDカードを選びます。その上で `Flash!`を押します。

> **Tips:** SDカードイメージはzip圧縮されたままで問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/7abee823-dbbe-390d-c5f6-04c56c4b3645.png)


4. 上の通り、Flashingに12分、Validatingに10分程度を要する。完了したらデスクトップマシンからSDカードを取り出す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/aec75327-5d16-ab83-4872-2eecd32ccda5.png)


> **注意:** Macの場合、 `セットしたディスクはこのコンピュータで読み取れないディスクでした`という警告が表示されるが、フォーマット形式によるものなので、気にせず `取り出す`を押下して問題ありません。


### 電源を入れてUSB経由で接続する [5分]

準備したSDカードを挿入、必要な配線をし、Jetson Nanoの電源を入れます。ヘッドレス(Jetson Nano用のモニタなどがない状態)でも、USB経由で接続し、セットアップができます。

具体的には、USB-microUSBケーブルでPC(USB側)とJetson Nano(マイクロUSB側)を直結すると、PCのWebブラウザからJetson Nano上で立ち上がったJupyter Labに接続できます。



1. 設定したSDカードをJetson Nanoに挿入する
2. J48を、2pinジャンパを取り付けショートさせる(microUSBではなく、プラグからの給電に切り替える)
3. 電源アダプタを差し込み、電源を入れる
4. Windows、Linux、またはMacマシンをマイクロUSB経由でJetson Nanoに接続する
5. Windows、Linux、またはMacマシンでブラウザを開き、 `http://192.168.55.1:8888` をアドレスバーに入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/9ceccef3-db81-dac5-5ed6-ee6d102ec84d.png)

5. デフォルトパスワード`jetson`を使ってサインインする



###  Jetson NanoをWiFiに接続する [5分]

まず、Jetson NanoにUSB WiFiドングルなどを挿しておく。

1. Jupyter Labのメニューから、`File - > New - > Terminal`をクリックしてターミナルを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/34c0b69d-8c09-797d-5d50-b5ad90a1465d.png)


2. 次のコマンドを入力して利用可能なWiFiネットワークを一覧表示し、接続したい`ssid_name`を見つける

```bash
$ sudo nmcli device wifi list
```

> **注意: ** `[sudo] password for jetson:`と聞かれたら、デフォルトは `jetson`と答えれば良い。



3. 選択したWiFiネットワークに接続する

```bash
$ sudo nmcli device wifi connect <ssid_name> password <password>
```

`Device 'wlan0' successfully activated with xxx`というメッセージが返れば接続成功です。

> **Tips:** この後無線接続に使うPCが所属するネットワークと、同一のネットワークに所属させます



4. 次のコマンドで返されたWiFiインタフェース`wlan0`のWiFi IPアドレス（ `inet` ）を`<jetson_ip_address>`として書き留めます。

```bash
$ ifconfig
```

> **結果例:**
>
> <略>
>
> **wlan0:** flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
>         inet **192.168.2.111**  netmask 255.255.255.0  broadcast 192.168.2.255
>
> <略>



### WiFi経由でJetson Nanoに接続する [5分〜]

1. マイクロUSBケーブルをJetson Nanoから取り外す
2. 前のJupyter Labブラウザタブを閉じる

設定が正しく済んでいれば、WiFi経由でJetson Nanoにアクセスできます。ひかえておいた <jetson_ip_address> を使って繋いでみます。

#### Jupyter Labに接続する

新しいブラウザタブを開き、 `http://<jetson_ip_address>:8888` へ移動、パスワード`jetson` でサインインする。

#### SSH接続する

PC側のターミナルから、user: `jetson` / password: `jetson` でSSH接続できます。JupyterLab上で制約がある場合は、こちらを使います。

```bash
$ ssh jetson@<jetson_ip_address>
```

#### VNC接続する

以下を参考に設定しました。

> [Jetson Nanoにリモートデスクトップ(VNC)環境を用意する - Qiita](https://qiita.com/iwatake2222/items/a3bd8d0527dec431ef0f)

```bash
$ sudo apt update
$ sudo apt install tigervnc-standalone-server tigervnc-scraping-server
$ vncpasswd
$ x0vncserver -display :0 -passwordfile ~/.vnc/passwd
```

`vncpasswd` でVNC接続時のパスワードを設定します。最後のコマンドで、デフォルトではポート `5900` でVNC接続の待ち受け状態になります。

適当なVNCクライアントを準備し、接続します。Google Chromeをブラウザに使っている場合、[VNC® Viewer for Google Chrome™](https://chrome.google.com/webstore/detail/vnc%C2%AE-viewer-for-google-ch/iabmpiboiopbgfabjmgeedhcmjenhbla/related?hl=en)が便利です。

PC側でVNC Viewerを起動、Address欄に `<jetson_ip_address>:5900` と入力して `Connect` を押すと、Jetson Nano側のUbuntuデスクトップを表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/c4f7c32c-8074-3350-378c-bbd27caf2fd5.png)


ここまで、部品が揃っていれば60分以内でセットアップを終えることができました。

## その他

### Jetson NanoのIPアドレスを確認したい

PC側のターミナルから、`arp` コマンドで、同一ネットワークで使われているIPアドレスがリスト表示できます。

```bash
# Mac OSXの場合
$ arp -a
```

### 空いているポートを確認したい

PC側のターミナルから、 `nmap` コマンドを使います。Mac OSXの場合、デフォルトでは入っていないため `brew install nmap` などでインストールします。

JetCardデフォルトに、VNCの接続を加えると以下のような状態です。

```bash
$ nmap 192.168.2.111
Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-04 02:06 JST
Nmap scan report for 192.168.2.111
Host is up (0.030s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
5900/tcp open  vnc
8888/tcp open  sun-answerbook

Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds
```

### Raspberry Pi カメラモジュールV2の動作確認

USBカメラと異なり、単純に `cv2.VideoCapture(0)` では動作しません。一工夫必要です。

```py3
import matplotlib.pyplot as plt
import numpy as np
import cv2

GST_STR = 'nvarguscamerasrc \
    ! video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)30/1 \
    ! nvvidconv ! video/x-raw, width=(int)1920, height=(int)1080, format=(string)BGRx \
    ! videoconvert \
    ! appsink'
cap = cv2.VideoCapture(GST_STR)
```

以下の実行毎に、キャプチャされた画像がNotebook上に表示でき、動作が確認できます。

```py3
ret, img = cap.read()
plt.imshow(np.array(img))
```

以上