AI自律動作ロボットJetBotを作ってみた。

2019年6月のハンズオン参加報告です。

6月8日（土）、本格的なDeep Learningを実装したAI自律動作ロボット、JetBotを実際に作って動かすハンズオン ワークショップに参加しました。会場は大手町のNTT Communicationsさんです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/63f40180-b7ce-9a67-d679-b73a1060a35b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/df9f6ab5-f48e-0466-8f9e-e829790c895b.png)

流れはこうです。この春に発表された NVIDIA社のシングルボードコンピュータJetson Nano とその他の部品でJetBotを組み立てます。そしてJetBotのカメラで収集した画像データを用いてAzure環境でニューラルネットワークの学習を行い、その学習済みモデルをIoTエッジデバイスであるJetBotにデプロイして衝突回避、物体追従といった機能を実現します。そして最後はみんなでJetBotを走らせてAI x ロボティクスのパワーを体験する。

こちらが[メディアの紹介記事](https://robotstart.info/2019/06/08/jetbot-workshop-dllab.html)です。

残念ながら時間切れでJetBotへのデプロイまでしかできませんでしたが、一通りの流れは理解したので、なんとかモノにしたいと思っています。

以下はそのフォトレポートです。
講師は[GClue](https://www.gclue.com/)の佐々木さん。[NVIDIAさん](https://www.nvidia.com/ja-jp/)、[マクニカさん](https://www.macnica.co.jp/)がバックでサポートして下さって最強の布陣で支えて頂きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/01134122-d6a0-eec8-3cbd-ce4d17c12cd5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/845594de-b24d-50b9-06c0-f308d45ab068.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/539a04a0-83d4-170a-a6de-ff23a40e796d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/5cdde38d-b674-3ea1-0963-6956d8eb7f61.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9931b552-5ff5-c234-8648-11e3a959ef88.png)
組み立て開始。ボールキャスターの組み立ては少し手間取ります。シャーシにギヤモーターを取り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/a22be08c-a606-ec3f-033f-38e82976ae6f.png)
両サイドの留め具を外に開きヒートシンクを持ち上げる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b928ebc1-4f4c-cd0d-ebff-fe1ce219440e.png)
Wifi Moduleを取り付ける。USB Wifi Dongle型は速度がでないため mini PCI-Express型のWifi Moduleを使用するのだそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ba0bfdfc-f2fb-64e6-ee99-0b218d04b15b.png)
カメラはフラットケーブルをJetson nano 側のコネクタに取り付けるのでゆっくりていねいに。Controller Boardに配線するときは白いポッチを上から押してその隙間に差し込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/3dd70aeb-b0eb-a5ca-0c23-831c1456f6e3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/06246677-0ff7-ad95-3216-68f15b8f94cb.png)
ディスプレイとキーボードにつなげてバッテリーの電源をつなぎます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/f648d6ff-d9dc-306e-c478-4c1b11af0d03.png)
WiFi spotに接続したら ifconfig -a でwlan0のIPアドレスを確認します。 アドレス 192.168.1.144が取得できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9ce4dc9f-a532-cf34-02ba-344ccd3bc9c9.png)
Controller Board側のOLEDにもネットワークアドレスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/015306b4-a487-722e-013a-d6c24c59a443.png)
JetBotのポート8888にhttp接続します。最新版のjetbotプロジェクトをインストールしたり、いろいろやってJupyterからモーター制御周りのサンプル basic_motion.ipynb を起動します。モーターが動いて foward, left などマウスで操作できるようになります。次に画像による境界線認識のための data_collection.ipynb を起動します。カメラで撮影した画像が障害物の時はadd blocked, 開放エリアの時はadd freeで写真を登録していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/d249232e-34de-1734-1d89-bf57e902a1bf.png)
ペットボトルを障害物にして add blockedで登録。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/d66c7ebc-5f2c-4b75-d7ef-b019917843cd.png)
メガネケースを を障害物にして add blockedで登録。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/3c9f487c-0752-f13b-0aa9-2b017ea8e3c1.png)
集めた画像をもとに dataset.zip を作成。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ea2e6bec-a904-e24f-ce92-2a91d17587da.png)
train_mode.ipynpを実行してクラウド（Azure環境）で学習をさせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/e5c56e3a-5399-24d3-634e-ba0f93176209.png)
学習がうまくいってAccuracyが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/560af6c3-f18c-ee23-7618-76dd7eae0776.png)
学習済みモデル best_model.pth が生成されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/608076fc-7747-635c-b560-43cb0f9e55e2.png)
生成されたモデルをJetBotにデプロイします。ぎりぎり粘ってここで時間切れ。

ここまで来るのに途中何度も手を挙げてサポートして貰いました。ぎりぎり粘ってここで時間切れ。
あとは帰って続きをやります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/621e3cd5-061f-9967-58a2-7fd3453d5dab.png)
ひとまず懇親会へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/68971eb0-b43f-6b53-6f18-d934cecc2b3c.png)
ありがとうございました。