JetRacerの組み立て
NVIDIAからJetson Nanoを使ったAI自動走行車JetBotに続く、JetRacerが発表されました。 github.com
こちら市販のラジコンカーにJetson Nanoとカメラを取り付け、カメラの画像からその時点でどちらに転舵すべきかを機械学習で学習させ、それを元にラジコンカーを自動走行させるというものです。
参考動画:
NVIDIAの公開している #JetRacer 、ついに紙コップ(別名パイロン)で作られた円形のコースを自動走行成功。一箇所コップをふっとばすが、2周目そこをうまく避けるという技を披露して感心(そして彼走るの早い)。もっともコースが簡単でこれは難易度は低いかもしれないから、複雑な場所で試したい。 pic.twitter.com/umn7c6gWPC
— higrademe (@EL2031watson) August 25, 2019
JetBotと異なり、ラジコンカーならではのスピード感ある自動走行を楽しむことができます。(もっと大きい場所でより複雑な形状のコース作って試してみたいが、なかなか東京付近で場所がない... どなたか場所の提供 or いい場所を教えてください...)
ラジコンカーに馴染みない方向けに簡単に補足しますと、今回取り扱うラジコンカーは二つのモーターから構成されており、
サーボーモータ
- 角度を細かく調整できるモータ
- 前輪の回転軸をサーボーモーターによってずらし、ラジコンカーの進行方向を左右に変更する。
DCモーター
- 角度は細かく調整できないが高速で回転させられる
- 前後輪を回転させ、ラジコンカーを前進・後進させる。
という役割を担っています。 デフォルトのJetRacerではDCモーターは常に一定速度で動かし、カメラから得られた情報からサーボーモータをどの程度動かすかを決め、サーボーモーターにそれを伝え、コースアウトしないように走行することで自動走行を実現しています。
今回こちらをパーツの仕入れから、実際に動かすまで一通りやってみたので、その過程をまとめました。なお車体はlatraxというものとtamiyaの2通りありますが、日本で入手しやすいtamiyaのシャーシのものを作成しました。
作成に関する注意事項
作成部品の入手難易度はやや高めかと思います。その理由は、
- パーツ合計がやや高額になる。(3Dプリントパーツ無しでも5万ぐらい?)
- 3Dプリントするパーツが3点ある。(ボード類取り付け用のベース板、シャーシへの穴あけ用の補助板、カメラモジュール取り付け台)
- まあまあ分厚いシャーシに穴あけするボール盤などの道具を利用する必要がある。(私はDMM.make AKIBAを利用しました。固定を接着剤とか別の方法でやるなら不要かもしれません)
一方で上の3つがクリアできれば組み立ては配線系が少しややこしいことを除けば、ラジコンの知識はほぼなくてもできます。
ただし注意事項として、ラジコン本体・プロポ(ラジコンのコントローラー)の調達はよく調べたほうがいいです。 私の場合、横着をして、シャーシ・プロポ・バッテリー・バッテリー充電用ACアダプタセットのものを買ってしまいました。(これと単三電池4本を買うだけで、ラジコンとして遊ぶことができる)
しかしプロポが2つの信号(進行・後退と左右転舵)しか送れない2chのものだったので、公式で推奨している3chのものとは異なり、プロポから自動走行or手動走行を切り替えることができませんでした。このままだと学習させる時、面倒だったので結局3chプロポを買って受信機を取り替えました。 ただし、マルチプレクサを経由せずモータードライバからの信号or受信機からの信号の配線を手で繋ぎ変えて手動・自動を変えることはできますので、予算厳しい方は私と同じく2chの車体・プロポセットを購入すればマルチプレクサなしで最低限手動自動共にJetRacerを動かすことはできます。
なお3chプロポを最初から使うと言う方は、シャーシ、プロポ、受信機、サーボモータ、ラジコン用バッテリー、ラジコン用ACアダプタを個別で調達すると安く上がると思います。
パーツ一覧(購入するもの)
3Dプリントが必要なパーツ
- ボード類を取り付けるベース板
- シャーシに穴あけするときに穴あけ位置を特定するための補助板
- カメラモジュールを取り付ける台
組み立て
基本的にはこちらに従って組み立てます。 jetracer/hardware_setup.md at master · NVIDIA-AI-IOT/jetracer · GitHub
フェーズ1 (シャーシの穴あけ、モーターカバーの除去、スタンドオフの取り付け、受信機の取り付け)
シャーシに穴あけするため、上で3dプリントした2番の補助板をシャーシの裏側(地面側)にテープなどで固定します。この際3dプリントした板の突起がある部分がシャーシ裏側のネジ部分と一致するはずです。(一部ネジを取り外さないとはみ出るので適宜ネジを外す)
補助板に空いている3mmの穴4箇所をターゲットとして3mmドリルで穴あけ、シャーシまで貫通させます。
(オプション) ネジの皿部分がシャーシからはみ出ないように上の4つの穴に対して、皿穴加工をします。私は適当に6,7mmぐらいのドリルで数ミリ穴あけしました。(公式のStep2 Countersink)
シャーシ表側のDCモーター付近のカバーを外します。(大きなモーターの方) これがあると、あとでベース台を固定するときに邪魔になるかと思います。
先ほど開けた4つの穴を通じて、シャーシにM3x8mmのネジでスタンドオフを取り付けます。
(オプション)受信機を3chプロポ対応のものに取り替えるor取り付けます。 車体・プロポセットで買った方はシャーシに2ch用の受信機が付いていますが、こちらを取り外します。粘着力強めの両面テープで付いているだけですので頑張って外してください。
2ch用の受信機を外した後、3ch用の受信機を取り付けます。
フェーズ2(3Dプリントしたベース板に各種基盤を取り付け)
マルチプレクサをM2x8mmのネジ2つでベース板に取り付けします。2箇所だけで少し不安なので、ネジのない側に何か台なり設置したい気はします...
PWMサーボモータードライバーをM2x8mmのネジ4つでベース板に取り付けします。
Jetson Nanoを M2x8mmのネジ4つでベース板に取り付けします。
カメラモジュールのカメラ部分をIMX219のカメラに取り替え、カメラモジュールを3Dプリントしたカメラ台にM2x8mmネジ4つで取り付けます。カメラモジュールのコネクターをJetsonNanoに取り付けます。さらにカメラ台をベース板にM2x8mmネジ4つで取り付けます。最後にカメラモジュールとJetsonNanoを接続します。ラズパイ公式のカメラモジュール仕様の場合、ケーブルが半ねじりの状態になってしまいます。
USB WiFiアダプタをJetson Nanoに取り付けます。
フェーズ3 結線
- Jetson Nanoとモータードライバの接続
これによって、JetsonNano側から来る前進・後進・右転舵・左転舵の指示をモーター側に伝えることができるようになります。1ピンのジャンパーケーブル1つと、3ピンのジャンパーケーブル1つを取り付けします。
Jetson側
- 1ピンジャンパーはGNDに接続します。(図のJetsonNano上のGPIOピン上、右列側の黒線)
- 3ピンジャンパーは3V3, 3番, 5番 に接続します。(図のJetsonNano上のGPIOピン上、左列側の黒線(3V3)・赤線(3番)・白線(5番) )
サーボモータードライバー側
- 1ピンジャンパーはGNDに接続します(図の下側のモータードライバ上の一番上の黒線)
- 3ピンジャンパーはVCC(黒線), SDA(赤線),SCL(白線)に接続します。
なお、JetsonNanoとモータードライバ間の3ピンの結線は以下のような対応になります。
- 3V3 がVCCに(黒)
- SDAが3番に(赤)
- SCLが5番に(白)
- サーボモータドライバとマルチプレクサの接続
マルチプレクサとはA,Bという二つの信号のどちらかをCから出力するという時にDという別の信号によって電気的にA・Bを切り替えることができる装置です。今回、A・Bの信号はJetsonNano・プロポに対応し、マルチプレクサを使うことで、自動走行or手動走行を切り替えすることができるようになります。
具体的には図のようにマルチプレクサを上から見た図で、
- M1~M4 (上の例でいう信号Aたち。Masterの略か)
- S1~S4 (上の例でいう信号Bたち。Slaveの略か)
- Out1~Out4(上の例でいう信号C。ここをモータに繋ぐことでM1~M4 or S1~S4のどちらかの信号がモーター側に伝わります。 )
- SEL (上の例でいう信号D。M1~M4 or S1~S4の切り替えを担当)
となります。
二箇所取り付けます。 この時向きはGND通しが繋がるように注意してください。
- サーボモータドライバ上の0番(黒赤黄上でJetsonと接続したピンから最も近い方)をマルチプレクサのS1に接続。(転舵信号を担当)
- サーボモータドライバ上の1番(黒赤黄上でJetsonと接続したピンから最も近い方)をマルチプレクサのS2に接続。(前進・後進の信号を担当)
- 受信機とマルチプレクサの接続
マルチプレクサのM1,M2,SELを受信機の1番・2番・3番と接続します。この接続によりプロポからの操作信号(転舵・前進後進・手動自動運転の切り替え)をマルチプレクサに送ることができるようになります。マルチプレクサのGND側のピンと受信機の右側のピンが繋がるように注意してください(図では黒線)
- マルチプレクサとサーボモータ、ESCの接続
上の手順でマルチプレクサにJetsonNano(自動運転)とプロポ(手動運転)の信号が入るようになり、この二つはSELの信号によって切り替えられるようになっています。さらにこの信号をサーボモータとESCに送り実際にモーターを動かせるようにします。
なおESC(Electric Speed Controller)は前進後進を行うDCモーターに電流を供給する装置です。入力として駆動信号とバッテリーからの電流の二つをもち、駆動信号を増幅してモーターに駆動に十分な電流を供給します。放熱用のファンがついているものです。
以下の二つの接続を行います。 なおいずれも黒線がマルチプレクサのGNDに接続されるように気をつけてください。
- サーボモータ(受信機の下に付いている)とマルチプレクサのOut1の接続(図で左側の指あたりから出ているESCの赤白黒の線)
- ESCとマルチプレクサのOut2の接続(図で右側の指あたりから出ているサーボモータの赤白黒の線)
フェーズ4 最終組み立て
JetsonNanoなどが取り付けてあるベース板をM3x8mmのネジ4つを使ってスタンドオフに取り付けます。これによってベース板がシャーシに固定されます。
以上でハードウェア部分は完成です。気が向いたら、別の記事でソフトウェア部分について書こうと思います。