Jetbotを公開されているデータを元に作成する

# Jetbotを公開されているデータを元に作成する(ハード制作編)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/624a5ddd-7263-3924-2d7a-64b7b05a5aa2.png)

## はじめに
本記事は、 [AI RC Car Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ai-rc-car) 12/9の記事として書いています。

Jetson Nanoが販売されてすぐに購入していたのですが、積み基板状態でした。ソフトウェアで制御できる車を作って遊んでみようと思っていたところ、お手軽にAIカーが作れるJetbotという設計データ一式が公開されている事を知り、それをベースに自分も作成して動かしてみた、という記事です。[JetBot Wiki](https://github.com/NVIDIA-AI-IOT/jetbot/wiki)を見て作成される方の補足情報になれればいいなと思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Jetbotのroad_following続き。トミカのコースは厚みがあって後輪のボールキャスターが登れないのでコースをコピー用紙に複写して貼り付けてみた。右折しか学習させてなかったので、左折部はこんな感じ。あとで学習させてみよう。 <a href="https://t.co/5GEYO1CZfK">pic.twitter.com/5GEYO1CZfK</a></p>&mdash; Yasuhiro ISHII (@yishii) <a href="https://twitter.com/yishii/status/1194613548678287366?ref_src=twsrc%5Etfw">November 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

本記事では、主にハードを構築するまでのポイントで、公式Wikiの補足になりそうな事を書いています。ハードが完成したらJetBotの起動イメージをセットして自動走行できるようになりますが、その辺りは別記事でまとめていきたいと思います。

## JetBot Wikiにない本記事のみに記載している内容
基本的には、[JetBot Wiki](https://github.com/NVIDIA-AI-IOT/jetbot/wiki)に書かれている内容をトレースしています。が、モータードライバ基板を秋月電子で入手できるものに変更していること、日本から発注しやすい発注先のリンクの整備、そして同Wikiにて安定して動作すると勧められているm.2 WiFiモジュール(技適無し)を使用する為に、総務省に技適未取得機器実験等特例の届け出方法です。

## 用意したもの
(価格情報は2019/12/8時点のものです)

[JetBot Wiki - Bill of Materials](https://github.com/NVIDIA-AI-IOT/jetbot/wiki/bill-of-materials) を揃えればOKですが、日本から発注するにあたり使用したリンクを書いてみました。モータードライバ基板については秋月の基板に変更しています。制御はオリジナルと同じようにできるのでソフトに手を入れる必要はありません。

|#| 品名 | 必要数 | 入手先URL | 参考価格 | 備考 |
|:-:|:-:|:-:|:-:|:-:|:-:|
|1|Jetson Nano Developer Kit | 1 | [リンク](http://akizukidenshi.com/catalog/g/gM-14393/) |  12,300円(秋月電子) |   |
|2|128x32単色OLEDモジュール | 1 | [リンク](https://ja.aliexpress.com/item/33005472768.html?spm=a2g0s.9042311.0.0.27424c4d3jGHFm) | 428円(Aliexpress)  | IPアドレスなどの表示をするのに便利です。必須ではありませんがあると便利。 |
|3|I2C接続16チャンネル サーボ&PWM駆動キット |1|[リンク](http://akizukidenshi.com/catalog/g/gK-10350/)|950円(秋月電子)|4.のモータードライバとセットで使用します|
|4|TB6612使用 Dual DCモータードライブキット|1|[リンク](http://akizukidenshi.com/catalog/g/gK-11219/)|350円(秋月電子)||
|5|m.2 WiFiカード Intel 8265NGW|1|[リンク](https://www.amazon.co.jp/gp/product/B0721MLM8B/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B0721MLM8B&linkId=09ebd885a2c097d373f297fb3dbeac38)|2,818円(Amazon)|
|6|WiFi/BTアンテナ  | 1(2本) |[リンク](https://www.amazon.co.jp/gp/product/B071CVWY8T/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B071CVWY8T&linkId=ba07b875efaaed330f5dc487288c8e86) |980円(Amazon)|Jetbot WikiではU.FLと記載されていましたが、MHF4のコネクタのタイプが必要です。|
|7|視野角(FoV)160度 RaspberryPi用MIPIカメラ|1|[リンク](https://www.amazon.co.jp/gp/product/B07VFFRX4C/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B07VFFRX4C&linkId=fcc4162299ded94fe7ffbd219accba35)|3499円(Amazon)||
|8|モバイルバッテリー|1|[リンク](https://www.amazon.co.jp/gp/product/B07YRK5BCF/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B07YRK5BCF&linkId=2c7e7fb46408825e367b6bb97c5949ff)|1,999円(Amazon)||
|9|ピンヘッダ オスL型 2x40|1|[リンク](http://akizukidenshi.com/catalog/g/gC-00148/)|100円(秋月電子)||
|10|タミヤ 楽しい工作シリーズ No.144 ボールキャスター 2セット入 (70144)|1|[リンク](https://www.amazon.co.jp/gp/product/B001VZHRW2/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B001VZHRW2&linkId=b4a53b48aeedd8d36304ac9912e705c3)|249円(Amazon)||

## 今回制作するJetbotのシステムブロックダイアグラム

今回制作するJetBotのブロックダイアグラムを以下に記載します。Jetson Nanoが他のハードと通信する経路はI2CとMIPI CSIのみです。I2CはOLEDモジュールとモーターの制御に使用します。I2Cはマスター-スレーブ通信で、同一のシリアル上に異なるスレーブアドレスのデバイスであれば複数接続して通信相手を指定した通信が可能ですので、OLEDとモーターの制御が1系統のI2Cのみで実現できます。

MIPI CSIはラズパイカメラモジュールを接続するのに使用します。MIPI CSI接続のカメラでもUSB UVCカメラでもLinuxデバドラ/dev/videoX(X=0~)として見えるので、最初は手持ちのUSBウェブカメラで何とかしようと思っていたのですが、JetBot Wikiを読んでいくと低レイテンシのMIPIカメラがお勧めとの事で今回は視野角(FoV) 160度のものを購入しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/bd292187-994e-a64a-a83c-17ff21db504e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/9bbb22a7-fdaa-1c4a-e9c0-77637a6cab6d.png)
使用したOLEDモジュール(Amazon商品紹介より)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/a30e915c-2020-9f87-8e3d-fcd5e6f62441.png)
購入したMIPI CSIカメラ(Amazon商品紹介より)

## 3Dプリンタ出力

[JetBot Wiki - 3D Printing](https://github.com/NVIDIA-AI-IOT/jetbot/wiki/3D-printing)に従って行います。

### 3Dプリント
シャーシ本体 ([STLファイル](https://github.com/NVIDIA-AI-IOT/jetbot/blob/master/assets/chassis.stl)) とカメラマウント ([STLファイル](https://github.com/NVIDIA-AI-IOT/jetbot/blob/master/assets/camera_mount.stl)) を3Dプリンタで出力します。私は手持ちの [ANYCUBIC I3 MEGA-S](https://www.amazon.co.jp/gp/product/B07J5P3SP9/ref=as_li_tl?ie=UTF8&tag=ishiiyasu-22&camp=247&creative=1211&linkCode=as2&creativeASIN=B07J5P3SP9&linkId=9c302318c347fad66b40e5864719d797)で半日ほどかけて出力しました。3Dプリンタが無ければ3Dプリントサービス等を使用しても良いでしょうし、田宮模型などの台車のキットを活用して自作する事も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/f34e4879-a2ba-e6a7-3d51-d226ba27c420.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/22331431-2b0e-2045-522e-b5bdd49ecd4f.png)
出力結果

## ハードの制作

基本的に、[JetBot Wiki - Hardware setup](https://github.com/NVIDIA-AI-IOT/jetbot/wiki/hardware-setup)に従って行います。

### OLEDモジュール(PiOLED)にピンヘッダを接続する

PiOLEDモジュールは出荷された時点で、RaspiberryPi用に接続する為のピンヘッダが取り付けられています。
今回は、ブロックダイアグラムに示したようにOLEDとモータードライバは同じI2Cラインを共有して制御する為、物理的な結線が必要で、その為のピンヘッダをはんだ付けします。ピンヘッダは公式の作成同様、L字型のピンヘッダを用意しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/f67c49a8-2f16-cc3b-d9e0-321f072b8fc8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/9f6e9599-d595-5a6b-a28a-8d8545267a06.png)


### Jetson Nanoとモータードライバ、モーターとの接続

JetBot公式の部品表では、モータードライバはAdafruitの[DC Motor + Stepper FeatherWing Add-on For All Feather Boards](https://www.adafruit.com/product/2927)を使用することになっています。このモータードライバは、I2C制御の16ch 12bit PWMコントローラー [NXP PCA9685](https://www.nxp.com/products/power-management/lighting-driver-and-controller-ics/ic-led-controllers/16-channel-12-bit-pwm-fm-plus-ic-bus-led-controller:PCA9685)と、PWM+制御端子制御の2chのモータードライバ [東芝 TB6612](https://toshiba.semicon-storage.com/jp/product/linear/motordriver/detail.TB6612FNG.html) を2つ搭載することでI2Cで4つのモーターの独立制御が可能な基板です。

今回は、秋月電子のPCA9685基板を持っていたので、同じく秋月電子でTB6612の基板を購入し、接続することでAdafruitと同等の制御ができる構成にします。モーターは2つのみ使用しますので、TB6612は1つで問題ありません。
図中の「半田でショートする」という部分は、I2Cシリアルラインのプルアップと、I2Cスレーブアドレス設定をAdafruitの基板同等にする為のものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/a244500c-4885-d661-c98d-0f5d8409002a.png)

PCA9685基板のI2Cサブアドレスを指定するショートジャンパーはSeeedstudioのものに仕様を合わせるためA5の部分にはんだを盛ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/2dae0e4f-7e47-48b1-79c6-c9b3bd24ff86.png)

配線していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/94e98af2-a214-d382-3fbf-7f9f976a9169.png)

そして、タミヤの楽しい工作シリーズの板を使用し無理くり固定します。(笑)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/6a55f040-6c08-44b1-cc9e-70f377b9cbb6.png)


### シャーシへのJetson NanoとWiFiモジュールの取り付け

Jetson Nanoのm.2コネクタに購入したWiFiモジュールを取り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/d8a6fda3-e88b-8393-25b9-a4f3aae3b53c.png)

超雑ではありますがとりあえずアンテナモジュールをシャーシに取り付けました。アンテナはMHF4タイプでしたので注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/df41aa37-76c1-69a7-b4db-87e8242e8fcc.png)


全て組み付けると装置としては完成です!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/7b1fe09a-8774-2347-f037-a26f16f82ba1.png)


## 電波法関連

JetBot WikiではWiFiアダプタとして、USBドングルタイプでは現時点では課題がありm.2のタイプを推奨するとの記載があります。(以下)

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/bad59e17-0c2c-5bc3-c034-8ab69f25f852.png)

その為、今回はそのまま、指定のアダプタを使用していますが、本カードには実は技適マークがありません。このままでは電波暗室でしか使用できません。これでは日本国内で使用できないため懸念だったんですが・・・ちょうどいいタイミングで、以下のようなニュースがあり超いいタイミングでしたので早速これを申請します。もちろんこの制度を用いてどのような装置でも適当に電波を使用できるようになるわけではなく、日本以外の国の電波出力に関する申請を通過しているもの(ex. FCC IDを取得している)に関して、180日以内の実験目的に電波利用が可能になるものだそうです。今回使用するWiFi/BTモジュールはFCC IDを取得している為、申請すれば利用可能になります。

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/2d22d690-b4ad-bb41-ad88-6be739bd2d10.png)

では申請していきます。

### 技適未取得機器を用いた実験等の特例制度の申請

[総務省 技適未取得機器を用いた実験等の特例制度](http://www.tele.soumu.go.jp/j/sys/others/exp-sp/)のサイトにアクセスし、届出書の作成をします。2020年4月までは、Web申請が出来ないため書類を印刷して郵送する事による申請になるそうです。総務省のサイトの説明に従い、「確認メール」(いわゆる空メール的なもの)を送信すると、入力フォームのアドレスが届きます。

まずは以下のようなメールを送信します。

件名 : [技適未取得機器実験等特例][メールアドレス確認]
送信先 : exp_sp_reception■soumu.go.jp (■を@に変更してね)

すると、以下のようなメールが届きますので申請を実施します。

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/10489e5e-a649-ee09-0427-d57023387077.png)

申請フォームでは、申請の目的を入力します。私の場合はひな形を利用し「nVidia Jetson Nano を用いた 遠隔制御ロボット の実験」としました。

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/b1a079ad-5e52-3712-1df8-ab9f2eb4dd9a.png)

また対応する規格等については、[Intel Dual Band Wireless-AC 8265](https://ark.intel.com/content/www/jp/ja/ark/products/94150/intel-dual-band-wireless-ac-8265.html)を参考に以下のように入力します。

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359377/4b23855d-3d70-7a3d-0188-f48d07b77dd1.png)

あとは指示に従い申請します。私の場合は神奈川県から東京の総務省関東総合通信局に郵送しました。受理には1日と、すぐに完了しました。これで無事日本国内でWiFiを使用可能になりました。

## JetBotを動かしてみる

ここからはJetBot WikiのSoftwareに記載の内容で進められます。また続きの記事を作成して投稿したいと思います!