自律走行型のロボットをNVIDIA JetBot で作ってみる【起動編】


SENSYN ROBOTICS(センシンロボティクス) Advent Calendar 2019 の 21日目 担当の @Chitama です。

前回に引き続き、AIコンピューターを乗せた自律走行型のロボットを作ってみます。

自律走行型のロボットを走らせるまで

  1. 必要な部品を揃える
  2. ハードウェアを組み立てる
  3. ソフトウェアのセットアップする ← 今回はココ
  4. 自律走行を試してみる

3. ソフトウェアのセットアップする

今回の流れ。
3-1. JetBotイメージの確認
3-2. 電源の確認、JetBotの起動
3-3. wifiの設定
3-4. Webブラウザでの接続
3-5. 電源モードを調整する
3-6. Jetson 「Jetpack」の確認

出典:
Github Jetbot Software Setup
Sparkfun 5. Software Setup Guide from NVIDIA

セットアップに必要なもの

  • microSDカード 16GB以上 UHS-I対応
  • HDMIまたはDisplayPortに対応したディスプレイ
  • USBキーボード
  • USBマウス
  • 5V-2A USB電源(及びmicroBケーブル)
  • USBワイヤレスWiFiアダプタ

Sparkfun Jetbot Kitに含まれているもの

  • microSDカード 64GB UHS-I対応
  • リチウムイオンバッテリーパック-10Ah(3A / 1A USBポート)
  • Bluetooth USBワイヤレスWiFiアダプタ

3-1. JetBotイメージの確認

Sparkfun Jetbot KitのSDカードは、起動用のイメージがフォーマット済みなので、ここの手順はスキップします。
NVIDIA公式の手順のステップ2から4のみで起動できます。
そのため、SDカードをフォーマットしないように注意してください。

通常、Jetson nano 購入したら、公式サイトからイメージをダウンロードして起動用のmicroSDカードを作成します。
1. JetBotのSDカードイメージ jetbot_image_v0p3p2.zip をダウンロードします
2. Etcherを使用して、ダウンロードしたイメージをSDカードをフォーマットします。
推奨容量は、32GB以上です。何かしらのエラーが発生した場合は、64GBに上げてみてください。
フォーマットが完了したSDカードは、USBコネクタがついてる側の反対側にあるマイクロSDカードスロット にマイクロSDカードを下向きで差し込みます。

3-2. 電源の確認とJetBotの起動

  1. MicroSDカードを挿入
  2. HDMIケーブルを接続
  3. キーボード&マウスを接続
  4. wifiアダプタを接続
  5. 電源を接続

今回は、Kit付属のリチウムイオンバッテリーパックをmicro USB ソケットに接続します。
ソケットの横の緑色のランプが光れば、給電が開始され、Jetson nano が起動します。
起動するとNVIDIAのロゴが表示されます。

3-3. wifiの設定

UbuntuデスクトップGUIで設定を行います。
ユーザーjetbotとパスワードjetbotを使用してログインします。
利用したいWiFiネットワークに接続します。

接続に成功すると、今後Jetson Nanoの起動時にWiFiに自動的に接続され、PiOLEDディスプレイにIPアドレスが表示されるようになります。
また、以降は、Jetson nano にWeb経由で接続できるため、HDMIケーブル、キーボード&マウスは不要になります。

UbuntuのターミナルでIPアドレスを確認しておきます。

3-4. Webブラウザでの接続

確認したIPアドレスでJetson nano に接続してみます。

http://<jetbot_ip_address>:8888

接続に成功すると Jupyter notebookLauncher が表示されます。

3-5. 電源モードやパフォーマンスを調整する

電源

Jetson Nanoにバッテリーパックが供給できる以上の電流が流れないようにしておきます。
そのために、次のコマンドで呼び出して 5Wモードにします。

$ sudo nvpmodel -m 1

現在の状態は次のコマンドで確認できます。

$ sudo nvpmodel -q

-mの後の数字が0の場合、最大(Maxモード)で、1の場合、最小(5Wモード)です。

$ sudo nvpmodel -m 1
$ sudo nvpmodel -q
NVPM WARN: fan mode is not set!
NV Power Mode: 5W
1
$ sudo nvpmodel -m 0
$ sudo nvpmodel -q
NVPM WARN: fan mode is not set!
NV Power Mode: MAXN
0

クロック周波数などのパフォーマンス

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

$ sudo jetson_clocks --show
$ sudo jetson_clocks --show
[sudo] password for jetbot: 
SOC family:tegra210  Machine:NVIDIA Jetson Nano Developer Kit
Online CPUs: 0-1
CPU Cluster Switching: Disabled
cpu0: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=921600 CurrentFreq=921600 IdleStates: WFI=1 c7=1 
cpu1: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=921600 CurrentFreq=921600 IdleStates: WFI=1 c7=1 
cpu2: Online=0 Governor=schedutil MinFreq=102000 MaxFreq=921600 CurrentFreq=921600 IdleStates: WFI=1 c7=1 
cpu3: Online=0 Governor=schedutil MinFreq=102000 MaxFreq=921600 CurrentFreq=921600 IdleStates: WFI=1 c7=1 
GPU MinFreq=76800000 MaxFreq=614400000 CurrentFreq=153600000
EMC MinFreq=204000000 MaxFreq=1600000000 CurrentFreq=1600000000 FreqOverride=0
Fan: speed=0
NV Power Mode: 5W

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

$ sudo jetson_clocks

3-6. Jetson 「Jetpack」の確認

JetPackとは、Jetson向けのカーネルモジュール・CUDAや各種ライブラリ・各種開発ツール・サンプルコードがまとまったものです。
つまり、追加でインストールすることなくいろいろなAIライブラリを試せる環境になっているということです。

CUDA

CUDAのサンプルコードは次のディレクトリににインストールされています。

/usr/local/cuda-10.0/samples/

念のためにフォルダをコピーしてから、サンプルを試してみます。

$ mkdir _dev
$ cp -a /usr/local/cuda-10.0/samples/ ~/_dev

デモ実行の流れは、

1.サンプルファイルがあるフォルダまで移動

$ cd _dev

2.ターミナルでコンパイルを実行

$ sudo make

3.2で生成されたファイルをターミナルで実行

$./ファイル名

次回

自律走行に挑戦です。

参考資料

Getting Started with Jetson Nano (日本語)