DonkeyCar
lang
ja
date
Sep 30, 2023
slug
Projects-01-ja
status
Published
tags
DonkeyCar
summary
DonkeyCarを体験してみよう
type
Projects
システムのインストール
バーニングツールのダウンロード(RaspberryPi)
ダウンロードするコンピュータのバージョンを選択してください。

サーバーからdonkeycar-pi-buster-2023-08-01.zipを選択してダウンロードしてください。

最後のシステムを選択する項目をクリックし、先ほどダウンロードしたシステムを選択して書き込みます。

Wi-Fi接続
システムをインストールしましたが、モニターがないと、グラフィカルインターフェースからWi-Fiをリンクするのが非常に面倒なので、Wi-Fiをリンクするための設定ファイルを追加します。donkeyCarはワイヤレスで接続されたままなので、イントラネットからのコントロールが簡単になります。
このファイルをダウンロードする
コンピュータでDonkeyCarの入ったsdcardを開き、wpa_supplicant.confファイルをsdcardのルートディレクトリにコピーします。
vscodeテキストエディタを使ってwpa_supplicant.confファイルを開きます。
ssidにWi-Fi名を入力します(5行目)。
pskにWi-Fiパスワードを入力します(6行目)。

修正後、保存をクリックし、システムのSDカードをカートに入れ、システムが起動するのを待ちます。
OLEDドライバー
カートを起動するたびにモニターに接続してIPを確認する必要がないように、OLEDにIPアドレスが表示され、sshで直接接続するのに便利です。システムアップデートのため、Dockerの仮想環境を使用しているため、ファイルのドライバ設定ディレクトリが変更されており、OLEDにドライバ設定がないため、文字化けしたコードが表示されます。

まずcdコマンドでホームページに戻る
cd
gitコマンドを使って、必要なスクリーン・ドライバーをGitHubからダウンロードする。
git clone https://github.com/Nabaixin/TFOLED.git
ダウンロードが完了したら、lsを使ってカレント・ディレクトリにあるすべてのファイルを表示する。
この時点で、必要なドライバーであるTFLOEDフォルダーが表示される。
ls
sudoで解凍し、cp -pで コピーし、ファイルを貼り付けたいディレクトリを指定する。
sudo cp -P TFOLED/NBX_OLED/OLED.py /var/lib/docker/overlay2/b 76aa24aae347fe87c4738d315c2f1224f1b248cca93eb27e1324c174aaf8ac2/merged/virtualen v/python3/1ib/python3.7/site-packages/Adafruit_SSD1306/SSD1306•py
完全なコマンドを以下に示す。

30秒待つと、ドライバーの設定は正常で、OLEDスクリーンはスプラッシュ・スクリーンではなくなり、正常に表示されている!

トロリーの起動
トロリーの背景にログイン
まず第一に、我々は、対応するIPを入力するブラウザのアドレスバーにトロリーのIPに応じて、ブラウザを開き、IPアドレスの後に8888ポートを追加することを忘れないでください。
例:私のIPログインアドレスは192.168.0.242:8888です。

あなたの車のIPアドレスに従って、対応するIPアドレスに変更してください。

バックグラウンドのログインパスワードは
jupyter
ログインに成功すると、ダッシュボードが表示されます。

マイカーの作成
ターミナルを開き、次の手順を実行します。

以下のコマンドをコピーして mycar を作成する。
pi@docker-raspberrypi:~$ ls
pi@docker-raspberrypi:~$ donkey createcar
pi@docker-raspberrypi:~$ cd mycar/
車のキャリブレーション
キャリブレーションを行う際、車は走行中であるため、作業中は車を持ち上げることが重要である。

最初にキャリブレーションを行い、ステアリングとスロットル値のPWMレンジを見つけます。
このクルマに適切な信号範囲は約 250 ~ 500 です。
スロットル値のキャリブレーション
373の値を入力したら、トロリーのモーターのスイッチを入れます。
pi@docker-raspberrypi:~$ donkey calibrate --channel 0 --bus 1

較正が終わったらqを押して終了します。
方向値の較正
pi@docker-raspberrypi:~$ donkey calibrate --channel 1 --bus 1

qを押して較正を終了します。
設定ファイルの変更
ダッシュボードの左側にある mycar フォルダ内の myconfig.py ファイルをクリックします。

ファイルを開いた後、#(コメント)とスペースを削除して、以下の行を修正する必要があります。
53行目、54行目、55行目、63行目、64行目、65行目、66行目、143行目、146行目、291行目。
コードの最後の行(291行)は、コメントを追加する必要があり、コードの前に#記号を追加することができます。
以下のように修正する。



すべての変更が完了したら、command+sを押して保存します。
カートを動かす
ターミナルに戻り、以下のコードを入力してトロリー・プログラムを開始しよう。
pi@docker-raspberrypi:~$ python manage.py drive

自動運転する台車のデータを収集したい場合は、このコマンドを実行する必要があります。
pi@docker-raspberrypi:~$ python manage.py drive --js
カートのIP+ポート8887をブラウザに入力してアクセスする。
例えば、私のアクセスアドレスは192.168.0.242:8887です。

背景カメラ画面の右側にはカートを操作するタッチパッドがあるので、楽しくカートを走らせることができる!
自動で走らせたい場合は、最低でも1万個のデータを走らせる必要がある。
データトレーニング
これで一連の設定ファイルが完成し、車を走らせることができるようになったので、今度はカメラを通して車に走行ルートを学習させ、データ学習を通して車が自動走行できるようにしたい。
ZIP学習データ圧縮
まず、mycarフォルダに移動する。
cd ~/mycar/
学習データはmycarフォルダの下のdataディレクトリに保存されるので、データの精度を確保するために、最も満足度の高いデータを選択し、残りのデータを削除する。
過去のdata.zipファイルがある場合はrmコマンドで削除してください。
rm data.zip
zipコマンドでデータフォルダを圧縮する。
zip -r data.zip data/
圧縮が完了すると、mycarフォルダにdata.zipアーカイブができます。
Colab(GPU)による学習;
Colabに入り、新しい.ipynbファイルを作成し、コードリストを追加し、以下のコードをコピーして実行します。
Colab OSの確認
!cat /etc/os-release
既存のCUDAをアンインストール
Colabインスタンスに何がインストールされているかわからないので、ここでエラーが出ても構わない。
!apt --purge remove "cublas*" "cuda*"
CUDA-10.1リポジトリの追加
!apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub !wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.1-1_all.deb !dpkg -i cuda-keyring_1.1-1_all.deb
CUDA-10.1のインストール、所要時間約10分
!apt-get update !apt-get install -y cuda-10.0
CuDNN-7.6.5のインストール
!wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.5.32-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libnccl2_2.6.4-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libnccl-dev_2.6.4-1+cuda10.0_amd64.deb !dpkg -i \ libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb \ libcudnn7-dev_7.6.5.32-1+cuda10.0_amd64.deb \ libnccl2_2.6.4-1+cuda10.0_amd64.deb \ libnccl-dev_2.6.4-1+cuda10.0_amd64.deb
TensorFlowのインストール
DonkeyCarのRaspberryPi3にインストールされているのと同じバージョンのTensorFlowをインストールする。Google Colabのデフォルトのtensorflow/cuda/pipパッケージのバージョンが更新されます。Tensorflowは後方互換性を維持していないため、ColabはDonkeyCarの標準TensorFlow 1.13.1のRaspberry Pi版と同じバージョンのTensorflowを使用しています。Google ColabはTensorflow 1.xをサポートしなくなったため、pipを使用しても見つけることができなくなりました。そこで、Minicondaを使ってTensorflow 1.13.1をインストールします。
%%bash MINICONDA_INSTALLER_SCRIPT=Miniconda3-4.5.4-Linux-x86_64.sh MINICONDA_PREFIX=/usr/local wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT chmod +x $MINICONDA_INSTALLER_SCRIPT ./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX
import sys _ = (sys.path.append("/usr/local/lib/python3.6/site-packages")) !pip install -U pip !pip uninstall -y tensorflow !pip install tensorflow-gpu==1.13.1 h5py==2.10.0 protobuf==3.19.6 numpy==1.19.5 pillow==8.4.0 cycler==0.11.0 decorator==4.4.2 python-dateutil==2.8.2 wcwidth==0.2.6
RESTART RUNTIMEを実行してください。 インストールされたTensorflow 1.13.1は再起動後も残ります。再起動後、次のステップから開始できます。
再起動後のPython PATHの再追加
import sys _ = (sys.path.append("/usr/local/lib/python3.6/site-packages"))
TensorFlowのバージョンを確認する
!pip freeze | grep -i -e tensorflow
!python -c "import warnings;warnings.simplefilter(action='ignore', category=FutureWarning);import tensorflow as tf; print(tf.__version__)"
DonkeyCarのインストール
Raspberry PiにインストールされているDonkeyCarのバージョンを合わせます。
# 如果找不到 imageio,DonkeyCar 自动安装的 imageio 版本为 2.16.0,最新截至 2023/03/02。 这需要 numpy1.20.0 或更高版本。 # 截至2023/03/02,可与google colab一起使用的numpy最高为1.19.5,因此请指定imageio版本并安装。 !pip install imageio==2.15.0
!git clone https://github.com/autorope/donkeycar.git %cd donkeycar !git checkout be45ae038cb00d81c5450b9a481dbf5aaa03e688 !pip install -e .[pc]
DonkeyCarプロジェクトを作成する
!donkey createcar --path /content/mycar
myconfig.pyを編集する。
CACHE_IMAGESをFalseにする。 これは学習時のメモリ消費を抑えるために設定する。GYM_CONF["guid"] をコメントアウトします。 20200825現在、開発は主にバーチャルマッチで行われるため、これは有効になっているようですが、学習中には必要ありません。
!sed -i 's/# CACHE_IMAGES = True/CACHE_IMAGES = False/g' /content/mycar/myconfig.py !sed -i 's/use_multiprocessing = False/use_multiprocessing = True/g' /content/mycar/train.py !sed -i 's/^GYM_CONF/# GYM_CONF/g' /content/mycar/myconfig.py
data.zipのアップロードとデータの抽出
data.zip(DonkeyCarで収集した学習データ)をアップロードします。ブラウザ経由でdata.zipをcolabにアップロードする方法と、Google Drive経由でdata.zipをcolabにアップロードする方法があります。ブラウザ経由の方法で通信速度が遅い場合は、Google Drive経由の方法をお試しください。
ブラウザからdata.zipをアップロードする場合
data.zip(DonkeyCarで収集した学習データ)をアップロードします。以下のコードを実行すると、ファイルアップロードフォームが表示されます。ファイルが/content/mycar/に送信され、data.zipが展開されます。データセットのディレクトリ構造は/content/mycar/data/tub_1_xxxxです。
%cd /content/mycar/ import os import shutil from google.colab import files if(os.path.exists("/content/mycar/data.zip")): os.remove("/content/mycar/data.zip") if(os.path.exists("/content/mycar/data")): shutil.rmtree("/content/mycar/data") uploaded = files.upload() file_name = list(uploaded.keys())[0] file_path = "/content/mycar/" + file_name print("-----------------------------------------------------") print("【処理結果】%sにデータをアップロードしました。" % file_path) print("-----------------------------------------------------") !unzip -o data.zip
Google Cloud Drive経由でdata.zipをアップロードする場合
ブラウザ経由でのデータアップロードは非常に時間がかかるので、Googleドライブ経由で素早く行いたい場合に利用する。以下のコードを実行し、認証を行うことで、Google Colab経由でGoogle Driveにアップロードされたdata.zipファイルを利用できるようになります。
from google.colab import drive drive.mount('/content/drive') !ls '/content/drive/My Drive' | grep data
Google Driveは/content/drive/MyDriveにインストールされていますので、data.zipファイルを/content/mycar/にコピーして解凍してください。Google Cloud Driveの任意のフォルダにアップロードした場合は、「/content/drive/MyDrive/任意のフォルダ名/data.zip」に置き換えてください。
%cd /content/mycar/ import os import shutil if(os.path.exists("/content/mycar/data.zip")): os.remove("/content/mycar/data.zip") if(os.path.exists("/content/mycar/data")): shutil.rmtree("/content/mycar/data") !ls -l '/content/drive/MyDrive/data.zip' !cp '/content/drive/MyDrive/data.zip' /content/mycar/data.zip !unzip data.zip
をダブルクリックするか、Enterキーを押して編集します。
始める
Colab環境を作成したので、DonkeyCarについて学習します。
学習対象は/content/mycar/data/にあるすべてのフォルダです。
type = "linear" trained_mode = "/content/mycar/models/mypilot.h5" %cd /content/mycar !python manage.py train --model={trained_mode} --type={type}
学習成果の確認
DonkeyCarは学習したモデルを解析し、動画として出力することができます。学習したモデルがどのようになったかを確認します。モデルごとにレイヤーが全く異なるため、makemovieは線形モデルにしか使えません。
モデル可視化パッケージをインストールする
!pip uninstall -y keras-vis !pip install git+https://github.com/sctse999/keras-vis !apt install -y ffmpeg !pip install opencv-python==4.1.2.30
動画ファイルの作成
複数のtubはサポートされていないので、-tub=tub_xxxxオプションを使用してデータディレクトリを指定する必要があります。
!ls /content/mycar/data
表示されたデータディレクトリから1つを選択し、tub_xxxxとして書き換えてください。 ディレクトリに大量のデータ項目がないかどうか、簡単に確認できます。
%cd /content/mycar mp4_path = 'tub_movie.mp4' !donkey makemovie --tub=data/tub_xxxx --model models/mypilot.h5 --type linear --salient --out=$mp4_path
動画ダウンロード
作成した解析動画をPCにダウンロードします。 ダウンロードした動画をPCで再生することで、モデルの反応を確認することができます。緑線:人間の操作 青線:AIによる判定
from google.colab import files files.download('/content/mycar/'+mp4_path)
学習結果の移行
学習結果は/content/mycar/models/mypilot.h5に保存されています。 以下のセルを実行し、H5ファイルをダウンロードします。学習結果をRaspberryPi上の~/mycar/models/mypilot.h5にコピーすると、DonkeyCarが自動的に実行されます。
from google.colab import files files.download('/content/mycar/models/mypilot.h5')
この時点で、すでに両方のファイルがDonkeyCarによってローカルにダウンロードされています。

私の学習モデル分析ビデオ