#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
トレーニングからデモまでの流れ、合計約1時間の作業を8分のビデオにしています。
Jetbotが学習し走行距離を伸ばしていく様子が見所です。
https://www.youtube.com/watch?v=JcZf29wvSmQ
#<追記>Jetbotの改造(ギア比を1:48から1:120へ変更)
当初はハード無改造で進めていましたが再現性の低さに耐えきれずハード改造を決定。
極低速でタイヤが止まる対策で、ギア比を高トルクに変更しました。
幸い1:120のギアは4個セット(タイヤ付き)で$13で入手できました。
ギアケース外寸が同じなので、モーター配線のはんだ付けで交換できます。
高トルクギアを使うと「極低速でもタイヤが止まらない高トルク」と「低速化で距離当たりの制御回数UP」となり、箱庭サーキットのJetbotにはお勧めです。
#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学習初期はデータ量が少ないためはっきり見えませんが、学習が進むに伴い同じデータでも画像が鮮明に見えるようになります。
#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処理後(右下)
#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
Jupyter画面を2分割しLauncherのTerminal上で、下記コマンドでトレーニングを起動。
$ 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さん、貴重な情報ありがとうございました。