Jetson Nano Mouseを動かしてみよう

Jetson Nano Mouseのセットアップ方法

Jetson Nano Mouseのセットアップ方法 Jetson Nano Mouseを動かしてみよう

d-satoです。今回から2020年9月14日に発売予定の新製品、Jetson Nano Mouseを使ったアプリケーション例とそのセットアップ方法を紹介します。13回に分けて連載して紹介する予定です。
第1回目となる今回はJetson Nano Mouseのセットアップをして実際に機械学習を活用したサンプルプログラムを動かせるようにするまでをご紹介します。

この記事では、まず、この連載の概要について説明します。
その後、Jetson Nano Mouseと紹介するサンプルの概要を紹介し、Jetson Nano Mouseのセットアップ、機械学習を利用したサンプルプログラムでロボットを動かす方法を紹介します。

この連載について

まずこの連載の概要について紹介します。Jetson Nano Mouseを動かすことにフォーカスをあてています。
およそ毎月1回更新でJetson Nano Mouseを使ったセットアップ方法やアプリケーション例を紹介します。
この連載ではJetson Nanoの設定やUbuntuの使い方等は軽い紹介にとどめます。

  1. Jetson Nano Mouseのセットアップ
  2. Raspberry Pi MouseのROS/ROS 2サンプルをJetson Nano Mouseで使う方法
  3. カメラ(単眼)を用いたライントレース
  4. カメラ画像のゆがみ補正+ライントレース(単眼)
  5. カメラ画像のゆがみ補正+ライントレース(ステレオ)
  6. ステレオカメラで深度情報の取得
  7. ステレオカメラの映像を配信+VR化
  8. ステレオカメラを使ったVisual SLAM
  9. ステレオカメラを使った3次元地図の作成
  10. 機械学習を使った物体認識(単眼)
  11. 機械学習を使った物体認識(ステレオ)+AR
  12. 機械学習を使ったライントレース
  13. 機械学習を使ったライントレース+障害物回避

※ここで紹介しているタイトルおよび内容については予告なく変更する場合があります。

Jetson Nano Mouseについて

Jetson Nano Mouse

アールティの車輪型プラットフォームロボットのひとつです。
メインボードにNVIDIA社製のJetson Nanoを採用し、広角カメラ2台を前方に標準搭載していることが特徴です。

https://rt-net.jp/notice/jnm_pressrelease/

Jetson NanoにはCUDAコアのGPUが搭載されています。このGPUを活用した機械学習のアプリケーション機械学習を学ぶためのコンテンツが多数存在します。さらに発展させてロボットを機械学習と組み合わせて賢く動かしてみたいときにJetson Nano Mouseという選択肢があればプロトタイピングがより簡単になるケースもあると思います。
少し細かい話になりますが、ホイール等の足回りはRaspberry Pi Mouseとほぼ同じで、ホイール径 48 [mm]、トレッド 93.5 [mm]の対向二輪の移動ロボットです。
制御用のソフトウェアインターフェースはRaspberry Pi Mouseと同じくデバイスファイルです。デバイスファイルからロボットを操作しますので、ファイルの読み書きができるプログラミング言語であればほぼ何でもJetson Nano Mouseを制御することができます。

紹介するサンプルについて

今回はNVIDIA社が公開しているAIロボットキットであるJetBotのプロジェクトをベースに作成したサンプルを紹介します。機械学習を利用したプログラムでロボットを動かすJupyter Notebookのサンプルです。
Jupyter Notebookを使うとコードとドキュメントが一体化した「ノートブック形式」でコードとドキュメントを保存できます。

ノートブック形式

コードはテキストエディタやIDEで書いて、ドキュメントは別で用意することは一般的でしたが、Jupyter Notebookが使える場合にはコードを対話的に実行して動作確認し、ドキュメントを一緒につけて保存することができます。
Jupyter Notebookを活用した教材もあり、たとえば、千葉工業大学の上田隆一先生の「詳解 確率ロボティクス」ではJupyter Notebookでロボットのシミュレーションとアルゴリズムの解説をしています。

今回はこのプロモーション動画の1:03以降で動かしているプログラムを動かすまでを紹介します。

このサンプルの実行に必要なもの

このサンプルの実行には以下のものと十分な実験スペースが必要です。

  1. Jetson Nano Mouse本体
  2. Jetson Nano Mouse用電源(バッテリでも電源変換ケーブルつきACアダプタでも可)
  3. NVIDIA Jetson Nano 開発者キット B01 ※1
  4. microSDカード ※2
  5. HDMI入力付きのモニタ
  6. USBキーボードとマウス
  7. USB接続の無線LANアダプタ(オプション) ※3
  8. 操作用ノートパソコン

詳しくはこのあと説明します。

※1 Jetson Nanoについて
Jetson Nano開発者キットには以下の2種類が存在します。

  • 現行モデルのCSIカメラを2つ搭載できる「NVIDIA Jetson Nano 開発者キット B01」
  • 旧モデルでCSIカメラを1台のみ搭載できる「NVIDIA Jetson Nano 開発者キット A01」

2020年9月7日現在、新品で販売されているJetson Nanoの大半はCSIカメラを2つ搭載できる「NVIDIA Jetson Nano 開発者キット B01」ですが、予め確認した上でのご購入をおすすめします。

以前発売されていたモデルの「NVIDIA Jetson Nano 開発者キット A01」でもJetson Nano Mouse自体は制御可能です。
ただし、Jetson Nano Mouseについている2台のカメラのうちの1台のみの接続となります。
2020年10月5日に発表されたメモリ2GBのJetson Nano 開発者キットについてもカメラは1台のみの接続となります。
カメラが1台のみの接続の場合は一部のコンテンツを利用できません。

※2 microSDカードについて
Jetson Nano用です。書き込むイメージが約20GB程度あるので32GB以上必須です。余裕を持って使うには64GB以上を推奨します。
microSDカードの転送速度はUHS-1以上が推奨されています
SDカードのスピードクラスについてはSD Associationの解説を参照してください。
十分な速度が出ないmicroSDカードを使うと正常にOSが起動しない場合があるようです。

※3 無線LANアダプタについて
無線LANアダプタはTP-Link社のTL-WN725Nで動作確認をしています。

Jetson Nano Mouseをセットアップする

Jetson Nano Mouseを制御できるようにJetson Nanoをセットアップする方法を紹介します。
購入後、開封してJetson Nanoをセットし、電源を繋げばロボットは動かせるようになっています。購入時に付属する製品マニュアル(PDF)に動作確認方法はスクリーンショットつきで細かく解説されています。
今回は機体の動作確認だけでなく、Jupyter Notebookを用いた機械学習のサンプルプログラムを動かせるところまで確認できるソフトウェアのセットアップ方法を紹介します。

Jetson Nanoのイメージをダウンロード&書き込み

ベースとなるOS、JetPackをダウンロードし、開発用のPCからmicroSDへ書き込みます。JetPackはJetson用のLinuxであるL4TをベースとしてCUDAドライバなどのソフトウェアをまとめたものです。
NVIDIA社が公開しているAIロボットキットであるJetBot用のイメージでは機械学習ライブラリのPyTorchTensorFlow、プログラム実行環境のJupyter Lab(後ほど説明します)等があらかじめインストールされているのでこのイメージを使用します。イメージファイルは以下のURLからjetbot_image_v0p4p0.zipという名前の7GB程度の圧縮ファイルでダウンロードできます。
https://drive.google.com/open?id=1G5nw0o3Q6E08xZM99ZfzQAe7-qAXxzHN

このjetbot_image_v0p4p0.zipはJetPack 4.3がベースとなっています。
JetBot用イメージ作成用スクリプト:https://github.com/NVIDIA-AI-IOT/jetcard

JetBotのセットアップ方法はGitHub上に公開されていますので、イメージの詳細について、イメージの最新の情報について知りたい場合はNVIDIAのGitHubリポジトリを参照してください。
JetBotのセットアップ方法(英語):https://jetbot.org/master/software_setup/sd_card.html
JetBot用イメージファイル作成用スクリプト:create-sdcard-image-from-scratch.sh

JetPack 4.5以降のバージョンのJetPackをインストールしたことがあるJetson Nanoはブートローダが更新されて後方互換性が失われています。そのためこのイメージをインストールしてもカメラおよびJetson Nano Mouseの測距センサ(SPIデバイス)が使用できません。

JetPack 4.5のリリースノートで以下のように紹介されています。

Boot firmware for all Jetson Nano developer kits updated to relocate boot firmware to integrated QSPI-NOR.

NVIDIA SDK Managerを使ってJetPack 4.4.1を書き込むことでブートローダを戻すことができます(詳細)。

RT Software TutorialsでJetPack 4.5.1ベースのイメージを書き込む方法について紹介しています。

Jetson Nano用OSの書き込みと初期設定 - RT Corporation Software Tutorials
株式会社アールティのオンラインソフトウェアチュートリアルです。製品をより便利に使うためのソフトウェアの使い方を紹介しています。

balenaEtcher等を用いてmicroSDカードにイメージを書き込みます。

Jetson Nanoのイメージをダウンロード&書き込み

書き込みが無事に完了したらmicroSDカードをJetson Nanoに差し込み、起動します。

※より詳しい書き込み方を知りたい場合は製品マニュアルをご覧ください。

Jetson Nanoのネットワーク設定

ここからはJetson Nano Mouseに搭載されたJetson Nanoで操作します。
SSHやVNCでログインしたり、HDMI接続ができるモニタとキーボードを繋ぐ方法とありますが、今回はモニタとキーボードを繋いでネットワークの設定まで行い、その後SSHでログインします。

JetBotのイメージの場合はユーザ名とデフォルトパスワードが「jetbot」となっています。自動ログインになっていると思いますが、もしパスワードを聞かれたら、「jetbot」を入力します。

HDMI接続ができるモニタとUSBキーボード、マウスを接続します。今回は無線で使いたいのでさらに無線LANアダプタを接続します。

無線LANアダプタを接続

無線LANアダプタを接続すると近くのアクセスポイントが見えるようになるので接続します。このとき、操作するノートパソコンとJetson Nanoが同じネットワークに接続されるようにしてください。

ネットワークに接続

Connection InformationからIPアドレスをメモしておきます。
この例では192.168.100.3です。

Connection Information

この段階で自動でソフトウェアがアップデートされないよう、パッケージマネージャの設定を変更しておきます。
ソフトウェアのアップデートによってバージョンの不一致で動かなくなるソフトウェアもまれにあるためです。
gitコマンドで rt-net/jnmouse_utils@GitHub をダウンロードし設定用のスクリプトを実行します。パスワードを聞かれたら「jetbot」を入力します。

git clone https://github.com/rt-net/jnmouse_utils.git
./jnmouse_utils/scripts/disable-auto-apt-upgrade.sh

以上でモニタを接続した作業は終了です。モニタ、キーボード、マウスは外します。無線LANのアダプタは外さないように注意してください。

Jetson Nano Mouse用のデバイスドライバのインストール

ここからはJetson Nano Mouseに搭載されたJetson Nanoで操作します。

今回はUbuntu 18.04がインストールされたノートパソコンから操作します。
デスクトップパソコンでも問題ありませんが、移動ロボットの場合は近くで操作できたほうが何かと便利なのでノートパソコンをおすすめします。

Ctrl + Alt + Tで端末を起動します。
以後、基本的にはコマンドはこの端末から実行します。

先程メモしたIPアドレスを指定してSSHでログインします。先程も軽く触れましたが、JetBotのイメージを使っている場合はユーザ名とパスワードともに「jetbot」です。
今回は先程メモしたIPアドレスが192.168.100.3だったので以下のコマンドでログインできます。

ssh jetbot@192.168.100.3

以後、Jetson Nano MouseのIPアドレスをssh jetbot@$ROBOTIPのように$ROBOTIPと表記します。

Jetson Nano MouseのIPアドレス

Jetson NanoのGPIOを設定するためのツールであるJetson-IOを使ってSPI1を有効にしてJetson NanoとJetson Nano Mouseの基板が通信できるようにします。
次のコマンドでJetson-IOを起動します。
※JetPack 4.5をインストールしてブートローダを更新したJetson Nanoに上記で紹介したJetPack 4.3をインストールし、その上でこのSPI1有効化の操作をするとOSが起動しなくなります。OS再インストールが必要となります。

sudo /opt/nvidia/jetson-io/jetson-io.py

Jetson-IOが起動できない場合は修正用スクリプトを実行するために以下のコマンドを実行してみてください。

~/jnmouse_utils/scripts/fix-jetsonio-r3231.sh

Configure 40-pin expansion headerを選択し、spi1を有効にするfunctionとして選択します。
Configure 40-pin expansion header
Configure 40-pin expansion header

function選択後はBackを選び、メニューに戻ります。

Select one of the following options:と言われるので、Save and reboot to reconfigure pinsを選択して再起動します。

Save and reboot to reconfigure pins

操作1ステップずつのスクリーンショットつきの詳しい説明およびエラーごとの対処法は以下のページに記載しています。
https://github.com/rt-net/JetsonNanoMouse/wiki/

再起動後、先程と同様にSSHでログインします。

gitコマンドで rt-net/JetsonNanoMouse@GitHub をダウンロードし、そのディレクトリに移動します。

git clone https://github.com/rt-net/JetsonNanoMouse.git
cd JetsonNanoMouse

次のコマンドでデバイスドライバをインストールします。

make
sudo make install

特にエラーが出なければインストール完了です。
以下のコマンドを実行してみて、ブザーが2秒間鳴ればデバイスドライバは正常に動いています。

echo 400 > /dev/rtbuzzer0 && sleep 2 && echo 0 > /dev/rtbuzzer0

Jetson Nano Mouse用のJupyter Notebookのダウンロードとインストール

gitコマンドで rt-net/jnm_jupyternotebook@GitHub をダウンロードし、そのディレクトリに移動します。

git clone https://github.com/rt-net/jnm_jupyternotebook.git
cd jnm_jupyternotebook

つぎにJetson Nano Mouse制御用のPythonパッケージ、「jnmouse」をインストールします。
このパッケージはjetbot」とある程度互換性が保たれるように実装されています。

sudo python3 setup.py install

次にダウンロードしてきたJupyter Notebookを~/Notebooksディレクトリにコピーします。
JetBotのイメージでは起動時に~/NotebooksディレクトリでJupyter Lab(Jupyter Notebookを拡張したもの)のサーバが8888番ポートで立ち上がるようになっています。

./scripts/copy_notebook.sh

ここまでできれば先程紹介したサンプルプログラムを動かすためのJetson Nanoのセットアップは概ね完了です。

Jupyter Notebookの実行

ここからはノートパソコンのWebブラウザから操作します。
なお、このJupyter NotebookはJetBotのものをベースとしており、JetBotの解説を読みながら理解をすすめることもできます。

http://$ROBOTIP:8888にアクセスします。ログイン画面では「jetbot」を入力します。

http://$ROBOTIP:8888

ログインできると以下のようにJupyter Labの操作画面が表示されます。

Jupyter Lab

今回はobject_followingのサンプルを実行します。

物体検出のための学習済みのモデルをダウンロードします。JetBotのJupyter Notebookの使い方で紹介されているモデルです。
ssd_mobilenet_v2_coco.engine

ダウンロードしたモデルをJupyter LabのアップロードボタンからNotebooks/object_followingにアップロートします。

Jupyter Lab

以上でobject_followingのJupyter Notebookが実行できるようになりました。

Notebooks/object_following/live_demo.ipynbを開き、セルを1つずつ実行していきます。

実行例の動画です。学習済みモデルの読み込みには少し時間がかかる場合があります。

うまく実行できない場合はカーネルをリスタートするとよいかもしれません。

その他のサンプルについては以下のページに詳しく説明されていますのでこちらをご覧ください。

Examples
An educational AI robot based on NVIDIA Jetson Nano. - NVIDIA-AI-IOT/jetbot

どうしてもうまくいかないとき

よく起きるミス(開発中に頻繁に遭遇したミス)や便利スクリプトについてGitHub上でまとめています。

GitHub - rt-net/jnmouse_utils: Jetson NanoをJetson Nano Mouse向けにセットアップする際にあると便利な情報やスクリプト
Jetson NanoをJetson Nano Mouse向けにセットアップする際にあると便利な情報やスクリプト - rt-net/jnmouse_utils

カメラの映像が映らいないなどJupyter Notebookが思ったように動かない場合、よくある問題であれば上記ページを参照すると解決する場合があります。
この情報が何かの役に立てば幸いです。

※Jetson Nano Mouseのソフトウェアは基本的にオープンソースソフトウェアとして「AS IS」(現状有姿のまま)で提供しています。本ソフトウェアに関する無償サポートはありません。
バグの修正や誤字脱字の修正に関するリクエストは常に受け付けていますが、それ以外の機能追加等のリクエストについては社内のガイドラインを優先します。

まとめ

今回は連載の第1回目で連載の概要とJetson Nano Mouseのセットアップ方法をご紹介しました。
またセットアップ後の動作確認としてJetBotで使用されているものと同等のサンプルをJetson Nano Mouseで実際に動かしてみました。
Jupyter Notebookのコンテンツについては今後も充実させていく予定です。
本記事の執筆時点(2020年9月7日)ではまだJupyter Notebookの中に書かれている説明が英語ですが、日本語での解説についても計画しています。
ぜひご購入をご検討ください!

https://rt-net.jp/products/jetson-nano-mouse
Jetson Nano Mouse [RT-JetsonNanoMouse] - ¥77,000.- : アールティロボットショップ, ロボットキット、部品は専門スタッフがいるアールティへ!
アールティロボットショップ Jetson Nano Mouse - ~ROSやAIの学習に最適なステレオカメラ搭載の車輪型ロボット~ Jetson Nano Mouse(ジェットソンナノマウス)はロボット制御技術とAI関連技術を同時に学ぶこ...

謝辞

今回紹介したソフトウェアはMITライセンスで公開されているNVIDIAのjetbotをベースとしています。

Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
タイトルとURLをコピーしました