Help us understand the problem. What is going on with this article?

Donkey carをWaveshare製Jetbotで試した。

Donkey carとは?

RCカーに小型コントローラを乗せたAIロボットカー。
https://www.donkeycar.com/
ラズパイを使うのが一般的ですが、今回はJetsonを積んだJetbotで挑戦!
いろいろ試した結果をまとめました。

動画<追記、速度UPしました!>

気になっていたオーバーステアを修正し操作性がUP。教師データの高速化に伴い自動運転も50%速度が上がりました。
https://www.youtube.com/watch?v=NqYa7hOFcN0
you.PNG

車体の準備

Waveshare 製のJetbotを使いました。
IMG_1333a.jpg
1) モータのギア比変更
低速走行時のトルクUPを狙いギア比を1:48から1:120に変更しています(4個で$13程度)。
高トルクギアは低速時でもタイヤが止まり難く制御が安定します。
モータユニット外寸は同じなので、モーター配線の「はんだ付け」のみで変更できます。
IMG_1686.JPG

2)電池ケースの細工
保護回路付きの電池(長さ69mm、想定より2mm長い)が使えるよう、電池ケースの金具をペンチでつぶして隙間を広げ、電池が入るようにします。

3)カメラの移動
カメラの視野を広げるため、カメラ取付高さを倍にします。また、パイロン旋回時にもパイロンを見失わないよう、足元まで見れるようカメラを下向きにします。
下向きカメラでは「人の映り込み」等の外乱が少なくなり、Jetsonは道路に集中できます。
cameraview.PNG
カメラの映像
IMG_2062.JPG
カメラの視野
IMG_2080a.jpg

首長になった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
1) SD Card FormatterでSDカードのフォーマット
2) 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
1) Adafruit_MotorHAT パッケージをインストール
2) donkeycar/donkeycar/parts/actuator.pyの修正
3) mycar/manage.pyの修正
4) mycar/myconfig,pyの設定

<追記>オーバーステアの修正
/home/jetbot/projects/donkeycar/donkeycar/parts/actuator.pyの変更。
Actuator.PNG

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に表示に合わせて下さい)。
donkeyMonitor.PNG

3) PCにPS4コントローラをUSBで有線接続。

WEB上の「Control Mode」で「Gamepad」をクリック。
Mode&PiotをUser(d)選択。
これでDonkey carがPS4から操作できます。
gamepad.PNG
IMG_1978.jpg

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に切り替えると、エラー発生。
localpilot.PNG
ValueError.PNG

2) donkeycar/donkeycar/parts/camera.pyの修正

frameのサイズの問題?camer.pyを修正してみました。
224x224の学習データだとcamera.pyは160x120で自動運転できましたが、逆に160x120で学習させるとcamera.pyは224x224で自動運転できましたので、今のところcamera.pyを切り替えて使っています。
frame1.PNG
frame1a.PNG

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を選択で自動運転開始!
auto.PNG

年末にJetson本とJetbotを購入。それから半年以上かかりましたが、やっとここまでたどり着きました。
いろいろな情報を共有して頂き、ありがとうございました。

ここまで読んで頂きありがとうございました!

Hirubi
M5Stack Core2買いました。                             。 .
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away