Jetson

AIの街”柏の葉”で開催されたAI RCカー勉強会JetBotハンズオンに行ってきた

2019年7月20日、柏の葉にあるKOILにて開催された第2回 AI RCカー勉強会@柏の葉「JetBotハンズオン」に小5の息子と一緒に参加してきました。

DSC05177

第2回 AI RCカー勉強会@柏の葉「JetBotハンズオン」 – connpass

今年4月にJetson nanoが発売された際、JetBotについてもやりたいと思っておりましたが自分には部材の調達も組み立てもプログラミングもハードルが高く諦めていました。

しかし、今回講師をしていただいた株式会社GClueの佐々木陽さんが、JetBotのキットを用意され、JetBotの組み立て、設定、学習から自動運転走行までがこのハンズオンで学べるとあって、とても楽しみにしておりました。

今回は、そのハンズオンでどんなことをやったのかをご紹介します。

JetBotとは?

まずは知らない人のためにJetBotの説明です。

JetBotとはNVIDIAが出している小型GPUを積んだ開発ボード「Jetson Nano」を使ったAIロボットです。

実際は車輪がついているので小型AIカーといったほうがいいかもしれません。

IMG 1114

NVIDIAがこのJetBotを動かす為のツールが組み込まれたOSイメージを公開しており、誰でも公開されているJetBot部品リスト(BOM)を参考に必要な機器をそろえ、組み立て、そのOSイメージを使うことで、自動運転についての実験や学習をすることができます。

* JetBot OSイメージ
NVIDIA-AI-IOT/jetbot: An educational AI robot based on NVIDIA Jetson Nano.

近い将来、車は自動運転が当たり前になるといったことも言われていますが、その新しい技術を、一般の人でも購入可能な予算内で手軽に楽しむことができるのが、このJetBotの大きな特徴です。

とはいっても、それなりにハードルは高いですけどね。

「AI/IoTの街」柏の葉のKOILが会場

IMG 1095

今回ハンズオンの主催「Jetson Japan User Group」のドローンワークス株式会社今村博宣さんの尽力で、「AI/IoTの街」柏の葉にある「31VENTURES KOIL(柏の葉オープンイノベーションラボ)」を利用させていただくことができました。

IMG 1090

前半はJetBotの組み立て

第2回 AI RCカー勉強会 柏の葉 JetBotハンズオン  connpass 2019 07 21 22 24 59

今回のハンズオンでは、JetBotフルセット購入枠とJetson nanoをすでに持っている人用にJetBotベアボーン枠が用意され、私はベアボーン枠で申し込み。

IMG 1087

こちらが佐々木さんが用意してくださっとJetBotの部品達。

IMG 1100

こんな感じでセットになり購入者に配布されました。

組み立てマニュアル  FaBo JetBot Docs 2019 07 21 22 30 22

佐々木さんが用意してくださったFaBo JetBot Docsを見ながら組み立てます。

FaBo JetBot Docs

IMG 1102

まずは部品の確認

IMG 1105

ひとつひとつ組み立てます。

IMG 1107

モーターをドライバーで取り付け

DSC05128

難しいところは父の出番

IMG 1110 IMG 1112

AM10時からスタートしてお昼ぐらいになんとか完成!

Jupyter Notebookを使って初期設定

JetBotを組み立てたらJupyter Notebookを使って初期設定や学習を行います。

JupyterLab 2019 07 21 23 00 17

今回は、JetBotを会場のWiFiに接続し、自分のPCからブラウザ経由でJetBotにアクセスします。( JetBotのIPアドレス+ポート番号8888)

まずは、”basic_motion.ipynb”を実行していきます。

問題がなければ、コマンドを実行するたびにJetBotが動きます。

JupyterLab 2019 07 21 23 08 53

このように、Jupyter Notebook上に操作ボタンを表示させれば、自由にJetBotを動かすことができます。

collision_avoidance 画像による境界線認識

JetBotのSample  FaBo JetBot Docs 2019 07 21 23 11 55

JetBotのBasic_motionが成功したら、いよいよ自動運転のための学習を行います。

今回のハンズオンでは、collision_avoidanceという画像による境界線認識と呼ばれるモデルでalexnetの転移学習を行いました。

JupyterLab 2019 07 21 23 16 11

Jupyter Notebookでコマンドを実行していくと、上の図のような画面が出て、カメラの映像が「進んでいいとき」と「進んじゃだめなとき」を撮影していきます。

IMG 1118

実際にはこんな感じで、JetBotを会場のコースに置き、JetBotのカメラの映像をJupyterNotebookで見ながら、目の前に障害物がなく進んでもいいときには、先程の「add free」ボタンを押し、境界線があるときや前方に障害物がある時は「add blocked」のボタンを押します。

IMG 1122

JetBotを操作するボタンで位置を動かしながら、進んでいいとき、進んじゃだめなときをそれぞれ50枚撮影し、これで学習用のデータセットが準備完了です。

JetBotでの学習

JetBotの大きな特長は、クラウドなどを使わなくても学習用データセットからJetBot自身が学習ができることがあります。

これは、JetBotがJetson nanoというGPUモジュールを自分自身に搭載しているからこそできるので、AI carを取り組むハードルを大きくさげることができました。

JupyterLab 2019 07 21 23 26 58

実際、学習についてもJupyter Notebook上でtrain_model.ipybを実行すれば先程のデータ・セットを利用して実行できます。

IMG 1125

学習データセットを元にDeep Learningを行い、繰り返すことで徐々に正確性をあげていきます。

もちろん、この学習にはそれなりの時間がかかりますが、最終的に「best_model.pth」という学習済みモデルファイルが生成されます。

あと一息!

JetBotでの実行

JupyterLab 2019 07 21 23 21 43

Jupyter Notebookにて「live_demo.ipyb」を開いていよいよ自動走行を行います。

IMG 1126

このように、JetBotのカメラの映像がJupyter Notebookに表示され、進むべきか(free)か進まざるべきか(blocked)が推論され、それによってJetBotが進んだり回転したりします。

言葉よりも動画でみてみてください

ここまでブログで書いてきましたが、JetBotで実行する自動運転の様子は動画をつくりましたので、ぜひ、こちらをご覧ください。

後半に今回講師をしていただいたGClue佐々木さんと参加者のインタビューがあります。

まとめ

このJetBotハンズオンにて、学習データを作成し自動運転までできたのですが、もっとまっすぐ言ってほしいのに曲がってしまったり、もっと早めに曲がって障害物を避けてほしいのに、曲がってくれなかったりと、自分が運転するんだったらもっと違うのにという動きをJetBotがしてしまいやきもきしました。

これは、50枚づつ撮影した、こういう時は進んでよい、こういう時は前に進んではいけないという学習データ・セットによるものだと理解し、これをもっと改良するためには、この学習データセットを改善する必要があるものだとわかりました。

「近い将来、車は自動運転になる」。そんなことをニュースできいたりしますが、そのためには、安全、安心、そして効率的に自動運転できるための、人間側の知見の蓄積が必要で、サイズは小さいけれど、より多くの人達がJetBotのようなものを使って、楽しみながら取り組むことが、そんな未来につながるのでしょう。

ということで、Jetson Japan User Groupでは今後もGClue佐々木さんのお力を借りながら、JetBotのハンズオンを開催したり、自分のJetBotを持ち寄り、AI-RCカー走行会を開催したりする予定です。

ご興味ありましたら、connpassにあるJetson Japan User Groupへご参加ください。

ABOUT ME
中畑 隆拓
DALIやKNX導入のコンサルティング・コンフィグレーション・機器の販売、AI-IoTを組み合わせたシステムの提案を行っています。