Donkey carとは?
RCカーに小型コントローラを乗せたAIロボットカー。
https://www.donkeycar.com/
ラズパイを使うのが一般的ですが、今回はJetsonを積んだJetbotで挑戦!
いろいろ試した結果をまとめました。
動画<追記、速度UPしました!>
気になっていたオーバーステアを修正し操作性がUP。教師データの高速化に伴い自動運転も50%速度が上がりました。
https://www.youtube.com/watch?v=NqYa7hOFcN0
車体の準備
- モータのギア比変更
低速走行時のトルクUPを狙いギア比を1:48から1:120に変更しています(4個で$13程度)。
高トルクギアは低速時でもタイヤが止まり難く制御が安定します。
モータユニット外寸は同じなので、モーター配線の「はんだ付け」のみで変更できます。
2)電池ケースの細工
保護回路付きの電池(長さ69mm、想定より2mm長い)が使えるよう、電池ケースの金具をペンチでつぶして隙間を広げ、電池が入るようにします。
3)カメラの移動
カメラの視野を広げるため、カメラ取付高さを倍にします。また、パイロン旋回時にもパイロンを見失わないよう、足元まで見れるようカメラを下向きにします。
下向きカメラでは「人の映り込み」等の外乱が少なくなり、Jetsonは道路に集中できます。
カメラの映像
カメラの視野
首長になったJetbot.
SDカード作成(Jetbotの基本機能)
初めにJetbotの準備をします。64GBのUSBに「jetbot_image_v0p4p0.zip」を書き込み、アップデート、wifi設定を行います。インストールの確認はカメラ、モーターが制御できればOKです。
https://github.com/NVIDIA-AI-IOT/jetbot/wiki/software-setup
https://www.waveshare.com/wiki/JetBot_AI_Kit
- SD Card FormatterでSDカードのフォーマット
- balenaEtcherでファイルの書き込み
Donkey car プログラムを追加
Donkey carに必要なopencvなどを入れます。
作業は「DonkeyCar for Jetson Nano-Setup Jetson Nano」に従います。
所要時間は半日です。permissionなどのエラーにはsudoで対応。
https://www.waveshare.com/wiki/DonkeyCar_for_Jetson_Nano-Setup_Jetson_Nano
Step 1. Install libraries
Step 2. Setup virtual environment
Step 3. Install OpenCV。但し、numpyだけは1.17.3をインストールします。
Step 4. Install DonkeyCar Python codes,
このステップのみこちらのサイトに従う。
http://docs.donkeycar.com/guide/robot_sbc/setup_jetson_nano/
Step 5. Create DonkeyCar
このステップはwavehareに戻ります。
Donkey car の設定変更
inachiさんのサイトに詳しい説明がありますので、「足まわりの制御のセットアップ」に従って下記修正、設定を行います。情報ありがとうございました。
https://qiita.com/inachi/items/d9d9e5b5c91fbc0fa4b9
- Adafruit_MotorHAT パッケージをインストール
- donkeycar/donkeycar/parts/actuator.pyの修正
- mycar/manage.pyの修正
- mycar/myconfig,pyの設定
<追記>オーバーステアの修正
/home/jetbot/projects/donkeycar/donkeycar/parts/actuator.pyの変更。
donkey car を手動で操作
http://docs.donkeycar.com/guide/get_driving/
「Start your car」に従います。
1) Donkey car プログラムを起動
PCのJupyter上でTerminalから下記コマンドでDonkey carプログラムを起動。
cd ~/mycar
python manage.py drive
"ModuleNotFoundError: No module named"のエラー発生時はパスの追加で対応。
こちらのサイトにパス追加方法が詳しく説明されています。
https://qiita.com/yutoman027/items/7ee796c41575eb0511c3
2) Donkey car を操作できるWEBサーバーに接続
Donkey carを操作できるWEBサーバーに接続、PCのGoogle Chrome上で
http://192.168.0.103:8887/ (IPはJetbotのOLEDに表示に合わせて下さい)。
3) PCにPS4コントローラをUSBで有線接続。
WEB上の「Control Mode」で「Gamepad」をクリック。
Mode&PiotをUser(d)選択。
これでDonkey carがPS4から操作できます。
Donkey car データ収集
優秀なAI自動運転には優秀なRC運転の手本が必要です。頑張りましょう。
幸いJetbotの速度が遅いので、すぐに無事故で周回できるようになります。
運転練習後、学習に必要ないデータを消しましょう。
PCのJupyterから~/mycar/data/内の不要フォルダを消去します。
学習データは「箱庭サーキット」を無事故で10周できればOKです。
Donkey car 機械学習
Donkey carがインストールされていればPC上、jetson nano上、google colab上、何処でもトレーニング(機械学習)ができます。ここでは説明の簡単なJetsonを使った方法を説明します。
1) mycar/myconfig,pyの修正
BATCH_SIZE=64
CACHE_IMAGES=False
2) JupyterのTerminalで学習開始
python ~/mycar/manage.py train --model ~/mycar/models/mypilot.h5
Jetsonでは学習に1時間位かかりますが、学習後、学習データ(mypilot.h5)はJetson上に作成されるので特に操作はありません。
PCやGoogle Colabで学習するともっと短時間で処理できます。学習終了後、学習データ(mypilot.h5)をJetsonの同じフォルダにコピーしてください。
カメラの画像データフォーマット変更
1) 自動運転を選択エラー発生!
Mode PilotをLocal Pilotに切り替えると、エラー発生。
2) donkeycar/donkeycar/parts/camera.pyの修正
frameのサイズの問題?camer.pyを修正してみました。
224x224の学習データだとcamera.pyは160x120で自動運転できましたが、逆に160x120で学習させるとcamera.pyは224x224で自動運転できましたので、今のところcamera.pyを切り替えて使っています。
Donkey carを自動運転
1) JupyterのTerminalからDonkey carを立ち上げます。
今回は学習データ指定付き。
python manage.py drive --model ~/mycar/models/mypilot.h5
2) Max throttle, Mode&Pilotを選択
Max Throttle = 15%, Local Pilotを選択で自動運転開始!
年末にJetson本とJetbotを購入。それから半年以上かかりましたが、やっとここまでたどり着きました。
いろいろな情報を共有して頂き、ありがとうございました。
ここまで読んで頂きありがとうございました!