Code Monkey home page Code Monkey logo

ai_race's Introduction

ai_race

機械学習を学ぶことを目的とした、AIで車両を操作して走行性能を競うゲームです。

1. 準備

ご質問は、FAQに集約します。

1.0. jetson nano準備

記載予定
こちらにjetson nanoの備品を記載
(シミュレータや機械学習は通常のPCでできなくもないが、環境統一のため、以降の環境構築や動作確認はjetson nanoを基準に行う)

1.1. jetson nano起動

以下からイメージファイルを取得する。

Jetpack 4.4.1 以降を推奨

Jetpack 4.4.1
https://developer.nvidia.com/embedded/jetpack

取得後、イメージファイルをSDカードに書き込んで、JetsonNanoに挿して起動する。
起動後、ネットワークに接続する。

* お勧め設定 
ユーザ名: jetson
パスワード: (任意)
# お勧め設定は、順次追記予定。ユーザ名を共通化するとフルパス指定が要る時にハマる確率が減る。
  • 学習用データ、学習モデル【参考】

こちらにsampleデータを置いています。運営の動作確認用です。

  • Docker環境【参考】

こちらにDocker環境の利用手順を置いています。運営の動作確認用です。

2. インストール

結構時間が掛かります。
とりあえず動かしたい方はこちらのDocker環境をお試し頂いてもOKです。
「#」から始まる行はコメントです。

自動インストールスクリプト【推奨】

こちらに、以下 2.0.~2.4. を自動実行するスクリプトを用意しています。
自動インストールスクリプトを使うか、以下の手順を手動で実行してインストールしてください。

2.0 SWAPファイル追加してメモリ増強【必須】

cd ~
git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile.sh
# SWAP領域が増えていることを確認
free -mh

2.1. 基本的なパッケージをインストール

sudo apt-get update
sudo apt-get install -y net-tools git
sudo apt-get install -y python-pip
# install pyqt5 and NumPy
sudo apt-get install -y python3-pip
sudo apt-get install -y python3-pyqt5
pip3 install --upgrade pip
pip3 install numpy
# for judge server
pip3 install flask
pip3 install requests
python -m pip install requests
# pygame
sudo apt-get update -y
sudo apt-get install -y libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
sudo apt-get install -y libsmpeg-dev libportmidi-dev libavformat-dev libswscale-dev
sudo apt-get install -y libfreetype6-dev
sudo apt-get install -y libportmidi-dev
sudo pip3 install pgzero
python -m pip install pygame==1.9.6

2.2. ROSのインストール

  • ROS(melodic)のインストール
# インストール手順参考:
# https://www.stereolabs.com/blog/ros-and-nvidia-jetson-nano/
# こちらの手順を自動化している、karaage0703さんのjetson-nano-toolsを使わせて頂きます。
# catkin_wsも自動で作成してくれます。
cd ~
git clone https://github.com/karaage0703/jetson-nano-tools
cd jetson-nano-tools
./install-ros-melodic.sh
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source /opt/ros/melodic/setup.bash
  • ROS関連パッケージのインストール
# joint state controller, and ros package
sudo apt install -y ros-melodic-ros-control ros-melodic-ros-controllers  ros-melodic-joint-state-controller ros-melodic-effort-controllers ros-melodic-position-controllers ros-melodic-joint-trajectory-controller
# gazebo
sudo apt-get install -y gazebo9
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update -y
sudo apt-get install -y ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control
echo "export GAZEBO_MODEL_PATH=:/home/jetson/catkin_ws/src/ai_race/ai_race:/home/jetson/catkin_ws/src/ai_race/ai_race/sim_world/models" >> ~/.bashrc
export GAZEBO_MODEL_PATH=:/home/jetson/catkin_ws/src/ai_race/ai_race:/home/jetson/catkin_ws/src/ai_race/ai_race/sim_world/models
# camera image
sudo apt-get install -y ros-melodic-uvc-camera
sudo apt-get install -y ros-melodic-image-*

2.3. 機械学習ライブラリのインストール

# インストール手順参考:
# https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-7-0-now-available/72048
# https://github.com/NVIDIA-AI-IOT/torch2trt
# https://github.com/mdegans/nano_build_opencv
# 上記のサイト等を参考にした上で、必要なコマンドを下記に記載しています。


### pytorch from pip image (v1.4)
wget https://nvidia.box.com/shared/static/yhlmaie35hu8jv2xzvtxsh0rrpcu97yj.whl -O torch-1.4.0-cp27-cp27mu-linux_aarch64.whl
sudo apt-get install -y python-pip libopenblas-base libopenmpi-dev
pip install torch-1.4.0-cp27-cp27mu-linux_aarch64.whl
wget https://nvidia.box.com/shared/static/c3d7vm4gcs9m728j6o5vjay2jdedqb55.whl -O torch-1.4.0-cp36-cp36m-linux_aarch64.whl
sudo apt-get install -y python3-pip libopenblas-base libopenmpi-dev
pip3 install torch-1.4.0-cp36-cp36m-linux_aarch64.whl

### torch vision (v0.2.2)
# https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-7-0-now-available/72048
pip install future
pip3 install future
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
cd ~
git clone --branch v0.5.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.2.2
sudo python setup.py install
sudo python3 setup.py install
cd ../
pip install 'pillow<7'

### torch2trt
cd ~
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
sudo python setup.py install
sudo python3 setup.py install

### sklearn python3
pip3 install scikit-learn
#pip3 install matplotlib
#sudo apt-get -y install python3-tk

### pandas python2,3 (defaultを使えばよい)
#pip3 install cython
#pip3 install numpy
#pip3 install -U pandas

### opencv python
### opencv python はソースからビルドする必要がある. 8~10時間ほど掛かる.
cd ~
git clone https://github.com/mdegans/nano_build_opencv
cd nano_build_opencv
./build_opencv.sh 3.4.10
  • ライブラリバージョン

推奨環境

ライブラリ バージョン(python3)   バージョン(python) 備考
pytorch 1.6.0 1.4.0 1.4.0 -
torchvision 0.2.2 0.2.2 -
torch2trt - - -
sklearn 0.23.2 Not_Installed -
pandas 0.22.0 (1.1.3必須かも) Not_Installed -
cv2 3.4.10 3.4.10 -
pygame 1.9.6 1.9.6 -

参考
pytorchとtensoflowのバージョンをコマンドラインから調べる

2.4. ai_raceリポジトリの取得とビルド

(例)https://github.com/seigot/ai_race リポジトリの場合

mkdir -p ~/Images_from_rosbag
cd ~/catkin_ws/src
git clone http://github.com/seigot/ai_race         # 自分のリポジトリを取得する場合は、ここのURLを変えて下さい。
cd ~/catkin_ws
catkin build
source devel/setup.bash
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

別リポジトリのビルドや、パッケージ追加時の再ビルド手順は、FAQ #catkin_wsを再buildするにはどうすればよい?をご参考下さい。

3. サンプルコード

3.1. サンプルコードの実行

別々のターミナルで実行して下さい。

サンプルデータのダウンロード

cd $HOME
git clone http://github.com/seigot/ai_race_data_sample

シミュレータ起動

cd ~/catkin_ws/src/ai_race/scripts
bash prepare.sh

simulator_sample_plane.png

学習モデルを利用した推論、車両操作

サンプルデータのダウンロードして使う場合の例。
以下の通り実行する。

# 分割しているsampleデータを結合する
cd $HOME/ai_race_data_sample/model/plane
cat sample_plane_trt_p* > sample_plane_trt.pth
# 推論
cd ~/catkin_ws/src/ai_race/ai_race/learning/scripts
python inference_from_image.py --trt_module --trt_model $HOME/ai_race_data_sample/model/plane/sample_plane_trt.pth

inference_sample_plane.png

学習モデルを作成

サンプルデータを使って学習モデルを作成する場合の例。一度実行すると結構時間が掛かります。

cd ~/catkin_ws/src/ai_race/ai_race/learning/scripts
python3 train.py --data_csv $HOME/ai_race_data_sample/dataset/plane/_2020-11-17-01-34-45/_2020-11-17-01-34-45.csv --model_name sample_model

次に、JetsonNanoに合わせて学習モデルを軽量化する。(trtあり版と呼ばれるもの)
作成した学習モデルのパスが、$HOME/ai_race_data_sample/model/plane/sample_plane.pth である場合の例。

python3 trt_conversion.py --pretrained_model $HOME/ai_race_data_sample/model/plane/sample_plane.pth --trt_model sample_model_trt.pth

その後は前述同様、軽量化した学習モデルを利用して推論、車両操作を行って下さい。

学習用データの取得 (Optional)

rqt, joystick, 各種コントローラーで車両操作し、学習用のデータ(画像、コマンド操作ログ)を取得する。
サンプルデータでは期待する性能を出ない等、課題を感じた場合は、学習データを独自に取得することをお勧めします。
以下を実行することで、keyboardから車両操作ができます。

cd ~/catkin_ws/src/ai_race/ai_race/utility/scripts
python keyboard_con_pygame2.py

上記実行後、左下の「?」のうちkeyboard_con....pyが表示されてるものを押して、
その状態で以下キーを押すと車両が動く。

キー 車両の動き
l 進む
a 左にまがる
d 右にまがる

車両が動いている際の、画像とコマンド操作ログを取得するには以下を別ターミナルで実行する。

roslaunch sim_environment rosbag.launch

デフォルトでは${HOME}に画像とコマンド操作ログを含むrosbagファイルが出力されます。
rosbagファイルを、画像とコマンドに変換するには以下を実行します。

cd ~/catkin_ws/src/ai_race/ai_race/utility/script
python rosbag_to_images_and_commands.py <rosbagファイル>

以上で作成したデータを、学習モデル作成に使用下さい。

3.2. 各種コマンドの説明

学習用データの取得、学習モデルを作成、学習モデルを利用した推論用コマンド

  • Step1.学習用データの取得

bash prepare.shを実行した状態で、別ターミナルから以下を実行

## 学習用データ取得
## rosbag取得
roslaunch sim_environment rosbag.launch output_path:=<出力ファイルのディレクトリ 絶対パス指定>
rqt # rqtを使う場合。robot steering -> 車両制御パラメータ(v,rad)指定

## rosbag --> image/command 変換
cd ~/catkin_ws/src/ai_race/ai_race/utility/scripts
mkdir -p /Images_from_rosbag
sudo chmod 777 /Images_from_rosbag
python rosbag_to_images_and_commands.py **.bag   # bagファイルから学習用データ(画像と車両制御パラメータ)を取得
python listup_all_rosbag_timestamp.py *.bag               # 時刻表示できる
  • Step2.学習用データから、学習モデルを作成
## 学習 
cd learning/scripts (学習用フォルダへ移動) 
python3 train.py --data_csv <csvのパス フルパス指定> --model_name <保存するモデル名>  
#### 以下のディレクトリにモデルが保存されます
ls ~/catkin_ws/src/ai_race/ai_raceexperiments/models/checkpoints/*.pth
  • Step3.学習モデルを使って推論、車両操作

bash prepare.shを実行した状態で、別ターミナルから以下を実行

## 学習モデルを利用した推論、車両操作
## 推論(trtなし trt=比較的軽量なモデル) 
cd ~/catkin_ws/src/ai_race/ai_race/learning/scripts
python inference_from_image.py --pretrained_model <学習させたモデル フルパス指定> 
  • Step3+.学習モデルを軽量化して推論、車両操作
## 推論(trtあり)
#### 準備(準備は最初の一回でOK) 
cd ~/catkin_ws/src/ai_race/ai_race/learning/scripts
python3 trt_conversion.py --pretrained_model <学習させたモデル フルパス指定> --trt_model <保存するtrtモデル名>   
#### 指定したディレクトリにモデルが保存されます
#### 実行 
python inference_from_image.py --trt_module --trt_model <保存したtrtモデル名 フルパス指定> 

3.3 ディレクトリ構成

ディレクトリ 内容   備考
./ai_race/learning 機械学習スクリプト -
./ai_race/utility 学習データ取得ツール  -
./ai_race/your_environment 各参加者の作成コードを格納するためのディレクトリ(ここにコードを置くと運営側のアップデートとconflictしない) 主に参加者向け
./scripts 起動、終了スクリプト -
./ai_race/sim_world シミュレータ用モデルデータ 主に運営向け
./ai_race/sim_environment シミュレータ用ROSノード等 主に運営向け
./judge 審判サーバ 主に運営向け
./document 公開資料 主に運営向け
./docker docker環境 主に運営向け
./ai_race/example シミュレータ用モデルデータのサンプル ROS/シミュレータ等、学びたい人向けチュートリアル
(主要なファイルを抜粋)
├── README.md                           # 本Readme
├── ai_race
│   ├── learning
│   │   └── scripts                     # 機械学習スクリプト
│   │       ├── MyDataSet.py            # 学習モデル作成用スクリプト
│   │       ├── train.py                # 学習モデル作成用スクリプト
│   │       ├── inference_from_image.py # 推論による車両操作用スクリプト
│   │       └── trt_conversion.py       # 学習モデル軽量化用スクリプト(TRT版に変換する用)
│   ├── utility
│   │   └── scripts                              # 学習データ取得ツール
│   │       ├── joycon.py                        # 車両操作用
│   │       ├── keyboard_con_pygame2.py          # 車両操作用
│   │       ├── listup_all_rosbag_timestamp.py   # rosbag timestamp表示用
│   │       └── rosbag_to_images_and_commands.py # rosbag-->image,comand変換用
│   │  
│   ├── your_environment       # 各参加者の作成コードを格納するためのディレクトリ
│   │   │                      # (ここにコードを置くと運営側のアップデートとconflictしない)
│   │   ├── launch
│   │   │   └── sim_environment.launch  # 参加者独自で学習データ取得する場合の、シミュレータモデル追加用ひな形ファイル
│   │   └── scripts
│   │       └── your_train.py           # 参加者独自でtrain.pyを作成する場合のひな形ファイル
│   │   
│   ├── example                   # シミュレータ用モデルデータのサンプル	
│   │   └── tutorial1-7 
│   ├── sim_environment           # シミュレータ用ROSノード等	
│   └── sim_world                 # シミュレータ用モデルデータ
│   
├── FAQ.md            # FAQ
├── docker            # docker環境
├── document          # 公開資料
├── judge             # 審判サーバ
└── scripts           # 起動用スクリプト
    ├── prepare.sh    # シミュレータ環境起動用(level1-3対応)
    ├── start.sh      # [大会用] 開始スクリプト
    └── stop.sh       # [大会用] 停止スクリプト

3.4 学習モデルチューニングのはじめかた

まず、Githubアカウントを取得して本リポジトリを自リポジトリにforkして下さい。

リポジトリのフォークの例

  1. GitHubアカウントを作成/ログインする。
  2. GitHub で、https://github.com/seigot/ai_raceリポジトリに移動します
  3. ページの右上にある [Fork] をクリックします。
    参考:リポジトリをフォークする

forkしたリポジトリで各々のローカル変更、チューニング等行ってください。

・機械学習モデルの作成を工夫する場合
   --> train.py周りを参考にして、パラメータや各種処理の更新を行ってください。
       変更ファイルは、運営とのconflictを避けるためにyour_environment下に格納することをお勧めします。
・学習データの取得を工夫する場合
   --> utility以下を参考に、手動で車両を操作して学習データを取得して下さい。
       サイズの大きなデータは可能な限り、本リポジトリ以外でやりとりすることをお勧めします。(Githubの1ファイル最大が50MBまでという制約あり)

今後、本リポジトリもバージョンアップしていく予定です。
本リポジトリのバージョンアップを取り込む場合は、以下手順を行って下さい。
- ローカルのmasterブランチに移動
- fork元のリポジトリをupstream という名前でリモートリポジトリに登録(名前はなんでもいい。登録済みならスキップ)
- upstream から最新のコードをfetch
- upstream/master を ローカルのmaster にmerge
git checkout master
git remote add upstream https://github.com/seigot/ai_race
git fetch upstream
git merge upstream/master

参考:github で fork したリポジトリで本家に追従する

4. ルール

4.1. 概要

学習モデルにより推論し、車両を操作して走行性能を競います。
今回は以下のルールを採用予定です。

  • 制限時間4分以内に、コースを何週回れるかを競う。
  • 後述するコースのうち、最もシンプルなlevel1を使う。
  • コースアウトは、自力復帰困難な場合はスタート地点に復帰して走行を継続する。

こちら に詳細を記載予定

4.2. 経過時間と周回回数の計測方法

前述のprepare.sh実行時に起動するタイマーと、周回カウンターを使い自動計測します。

4.3 コース

以下のコースを用意しました。

- level1 level2 level3
名称 Plane Medium Track Hard track
外観 medium_track_plane-2.png medium_track-2.png hard_track.png
特徴 地面:一様な模様です 地面:濃淡付きの模様です 地面:サーキット型の模様です。カーブが急で、速度を調整しないと曲がれない
障害物 なし なし 三角コーンを置くかも
起動コマンド bash prepare.sh -l 1 bash prepare.sh -l 2 bash prepare.sh -l 3
学習データのサンプル あり(1週分)url あり(1週分)url なし
備考 今回のルールで採用 optional optional(準備中)

4.4 提出して頂くもの

  • level1コースで動作する学習モデルを提出して下さい。(学習モデルは、前述のJetsonNano向けに軽量化したtrtあり版をお願いします)
  • 提出方法は、Githubリリースの機能を使うと簡単なのでお勧めです。この場合はGithubリポジトリ名/リリースURLを教えて下さい。

学習モデルを提出(バイナリリリース)する場合の手順参考
リポジトリのリリースを管理する
7.オプションで、コンパイルされたプログラムなどのバイナリファイルをリリースに含めるには、ドラッグアンドドロップするかバイナリボックスで手動で選択します。

  • 途中経過含めて、上位の結果はどこかに載せたいと考えています。

FAQ

こちらに記載

参考

Jetson NanoにROSをインストールする方法
Jetson Nano関係のTIPSまとめ Swapファイルの設定
NVIDIA Jetson Nanoで OpenCV 3をビルドしてインストールする方法、NVCaffe等の OpenCV 4未対応を動かす
https://github.com/mdegans/nano_build_opencv
PyTorch for Jetson
https://github.com/NVIDIA-AI-IOT/torch2trt
RESPECT OneNightRobocon
リポジトリをフォークする
github で fork したリポジトリで本家に追従する
リポジトリのリリースを管理する

Finally

~~ HAVE FUN ! ~~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.