LoginSignup
5
4

More than 3 years have passed since last update.

Learning_RacerをWaveshare製Jetbotで試した。

Last updated at Posted at 2020-05-09

IMG_1333a.jpg

Learning_Racerとは?

masato-kaさんのブログにある「深層強化学習を利用してAI RC Carの走行を学習させるソフトウェアLearning_Racer」をWaveshare社製のJetbotで試したまとめです。
こちらがmasato-kaさんのブログ。
http://masato-ka.hatenablog.com/entry/2020/04/29/153505

こちらが学習後の動画です。Jetbotは高トルクギアに交換しています。
https://www.youtube.com/watch?v=HMKXacEuFqg
youtube.PNG
トレーニングからデモまでの流れ、合計約1時間の作業を8分のビデオにしています。
Jetbotが学習し走行距離を伸ばしていく様子が見所です。
https://www.youtube.com/watch?v=JcZf29wvSmQ
training.PNG

<追記>Jetbotの改造(ギア比を1:48から1:120へ変更)

当初はハード無改造で進めていましたが再現性の低さに耐えきれずハード改造を決定。
極低速でタイヤが止まる対策で、ギア比を高トルクに変更しました。
幸い1:120のギアは4個セット(タイヤ付き)で$13で入手できました。
ギアケース外寸が同じなので、モーター配線のはんだ付けで交換できます。
高トルクギアを使うと「極低速でもタイヤが止まらない高トルク」と「低速化で距離当たりの制御回数UP」となり、箱庭サーキットのJetbotにはお勧めです。
IMG_1686.JPG

Jetbotの準備

Waveshareのサイトに従い、「3. Teleoperations」まで実施。
https://www.waveshare.com/wiki/JetBot_AI_Kit
カメラ、モーターが動くことが確認できればOK。
ついでにbasic_motionで止まらない最低速度を確認します。私のJetbotでは0.06でした。
足元まで映るようカメラの取り付け金具を少し曲げておきます。
SDカードのイメージはjetbot_image_v0p4p0.zipを使いました。

Learning_Racerのインストール

jetbot_image(v0p4p0.zip)の上にlearning_racerのソフトを入れますので、Jetbotの準備が終わってから、masato-kaさんのサイトに従いLearning_Racerをインストールします。なんと3行です!

$ cd ~/ && git clone https://github.com/masato-ka/airc-rl-agent.git
$ cd airc-rl-agent
$ sh install_jetpack.sh

インストール確認

masato-kaさんのサイトからvae.torchファイルをDLしてairc-rl-agentフォルダに入れておきます。
PCからChromeでhttp://192.168.0.107:8888/lab?に接続(アドレスはJetbot上のOLEDに表示されています)。
Jupyterでairc-rl-agent/notebooks/utility/jetbot/vae_viewer.ipynbを開き、上から順番にクリック、Start main processまで進めます。ビデオ画像、トリム画像、VAE処理画像が表示されればインストールはOKです。
次にJetbotを道路に乗せてVAE処理画面を再度確認。VAE処理画像で道路がきれいに再現できれば問題ないのですが、ノイズが酷い場合は実機に合うVAEモデルの作り直しが必要です。

VAEモデルの作成

VAEモデルの作成に必要な時間は、データ取り10分+google Colab時間が20分ぐらいの作業です。カメラの高さや角度、道路のパターンが変わるとVAEを作り直す必要があります。

作業はmasato-kaさんのサイトに従い、PCからJupyterでairc-rl-agent/notebooks/utility/jetbot/data_collection_withoutgamepad.ipynbを開きます。”Set callback for collect the training data”までクリックして、「enable logging」を押すと連写が始まります。ボタンをもう一度押すと停止。
2千枚程度取れたら”Cleanup”、”Cleate dataset.zip file”をクリック。zipファイルが作成されますので、ファイル名を変更しGoogle Driveにコピー。
次にairc-rl-agent/notebooks/colabo/VAE_CNN.ipynbをColab上で開きVAEファイルを作ります。Google DriveのGPUが使えるので非力なPCでも問題なく学習ができます。

データ取りではタイヤ表面に紙テープを巻いて滑りやすくしアイロンをかける要領でJETBOTを道路上で滑らせデータ採取しました。Jetbotの向きを変えながら、あっという間に2000枚撮影終了です(実撮影時間は合計20秒ぐらい?)。

nanoのpowermodeをMAXNに切り替えると短時間で処理が終わります。念の為電源コードも接続しておきました。必要に応じてJETBOTにモニタとキーボードを接続すると何かと便利です。作成したvae.torchファイルをairc-rl-agentフォルダに入れておきます。
こちらはColab上のスクリーンショットです。VAE学習初期はデータ量が少ないためはっきり見えませんが、学習が進むに伴い同じデータでも画像が鮮明に見えるようになります。
step1.PNG
step49.PNG

VAEモデルの確認

JETBOT起動後、PCからChromeでhttp://192.168.0.107:8888/lab?に接続。
Jupyterでairc-rl-agent/notebooks/utility/jetbot/vae_viewer.ipynbを開く。
Start main processまでクリックするとCreate GUIにカメラ映像とクロップ画面、VAE返還後の画像が出ますのでJETBOTをコースの上に乗せ画像を確認します。
Jetbotの位置、向きを変えてもノイズが少ないことを確認します。
実機と同じ条件で作ったvaeでノイズが抑えられます。
結局、自分の環境に合ったVAE作りが効いた様です。
確認後、カメラのリセットも兼ねJETBOTの再起動。
vae.PNG
オリジナル映像(上)
トリム後(左下)vae処理後(右下)

config.ymlの編集

再起動したJETBOTにPCからJupyterで再接続後、Jupyterの左のエクスプローラ風のウインドウからairc-rl-agent/config.ymlをダブルクリックし編集、保存します。
こちらは私の使った設定です。
AGENT_SETTING:
# Agent settings
N_COMMAND_HISTORY: 10
MIN_STEERING: -0.06 #コースの最小回転半径
MAX_STEERING: 0.06 #コースの最小回転半径
MIN_THROTTLE: 0.10 #止まらない最低速度+余裕代。
MAX_THROTTLE: 0.12
MAX_STEERING_DIFF: 0.2

トレーニング

masato-kaさんのサイトに従いトレーニングをします。
処理速度を上げるためnanoのpowermodeはMAXNです。

PCからJupyterでairc-rl-agent/notebooks/user_interface_without_gamepad.ipynb
を起動後、下記の3章をクリックしておきます。
 Import module
 Show toggle button
 Start controll process

LauncherのTerminalを追加。
Terminal.PNG

Jupyter画面を2分割しLauncherのTerminal上で、下記コマンドでトレーニングを起動。
screen.PNG
$ racer train -robot jetbot -vae ~/airc-rl-agent/vae.torch -config ~/airc-rl-agent/config.yml -device cuda -steps 200000

後は指示に従います。Terminalで”Press START”が出たら、”user_inter..."側のSTARTボタンを押すと走り出します。車両がコースアウトする直前で停止させ、車両の位置を手で戻して、もう一度走行させ、あっという間に学習してしまいます。
やっと満足のいく仕上がりになりました。

「深層強化学習」凄いですね。
masato-kaさん、貴重な情報ありがとうございました。


学習中のTerminalの表示はこんな感じです。
epi2.PNG
epi9.PNG
epi15.PNG
epi19.PNG
epi2nd.PNG

5
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4