- はじめに -
Python APIを備えた自動車運転シミュレータである「CARLA: An Open Urban Driving Simulator」を動かすまでの記事です。
CARLAはConference on Robot Learning 2017でも発表された、Unreal Engine 4を使ったシミュレータパッケージです。
自動運転技術開発のための様々なカメラ、センサー情報をPythonで取得し、車操作に反映する事ができます。
とやかく言っても仕方ないので以下YouTubeの動画を一回参照して下さい。
本記事はCARLAの導入と触りまでを記述するものです。
特に物を作ってどうこうしてるアレではありません。
- CARLAについて -
CARLAは、CoRL2017発表論文のAbstにもあるように、自動運転技術の発展のためのOSSです。
作者
作者はAlexey Dosovitskiy、German Ros、Felipe Codevilla、Antonio Lopez、Vladlen Koltunらで、IntelやTOYOTAの研究所、Computer Vision Centerのメンバーです。
(Toyota Research Instituteなのでシリコンバレーの方だと思います)
競合
競合パッケージではMicrosoftのAirSimが一番有名だと思います
CARLAと同じくUE4を利用しており、C++, Python, C# and Javaのクライアントがあります。
また、CARLA同様、カメラ画像情報だけでなく深度やSegmentationのセンサー情報を利用できます。
車だけでなくドローンも対応しており、Windowsバイナリもあるのでパパっと始められる点で優位です。
強いてCARLAを使った理由は環境(天気とか)が変えられる事くらいです。
正直buildしんどかったのでAirSimの方が良いのかなと思ったりしています。
あと他にもUdacityの教材リポジトリもありました。
GitHub - udacity/self-driving-car-sim: A self-driving car simulator built with Unity
こちらはUnityを直接触る内容のようです。
こういうのがちらほらあります。
CARLAパッケージ情報
Document:http://carla.readthedocs.io/en/latest/
CoRL2017発表論文:http://vladlen.info/papers/carla.pdf
動作環境
Documentには、WindowsとLinuxの項目がありますが、現在Windows版の説明部分はComing Soonとなっています。
How to build on Windows - CARLA Simulator
Linuxでは、Ubuntu 16.04かそれ以降のバージョンを推奨しています。
How to build on Linux - CARLA Simulator
他に環境構築をしていて気になった点は以下です
- pyenvやvirtualenv環境下のPythonではPATH周りで死ぬ
- 素直にaptでpython3-dev入れるのが現状良い
- ストレージがそれなりに必要
- UnrealEngine本体のbuildと素材のダウンロード
- 50GBでやったら足りませんでした
- sudoersアカウント欲しい
- setupスクリプトでsudoある
- Unreal Engine 4がOpenGL 3.x or 4.xを使う
- VirtualBoxがOpenGL 2.2までしか対応してないのでVMでやるならVMware Fusion
- VMだとGraphicDriverを起動させるためにVM Toolsの導入必須
- 別途Windowsが必要
正直注意点が多いのでクリーンでストレージも多いUbuntu 16.04が入ったハード1つ用意出来るならそれがベストです。
その中でVMでWindows動かすとかが良いでしょう。
- CARLAインストール -
buildしていきます。
一応ドキュメントに従っていきますが、まあまあ大変です。
How to build on Linux - CARLA Simulator
私の環境
一応私の環境を書いておきます
MacbookPro上のVMware Fusion Ubuntu 16.04 python3-dev ストレージ 100GB コア数 4 メモリ 8GB (UE4のEditor開くだけでもmmapで1.5GBくらい確保してたのでそれなりに必要) 別途適当なWindows10端末
依存パッケージのインストール
CARLA依存パッケージは以下コマンドで導入
途中でrequestsが必要になったのでここでインストールしています。
sudo apt-get install clang-3.9 cmake ninja-build python-dev tzdata sed curl wget unzip autoconf libtool python3-dev libxml2-dev libxslt-dev git build-essential python3-pip python3-requests
pip3 install protobuf requests
以下を参考にUnrealEngineのbuildの依存パッケージを導入
Building On Linux - Epic Wiki
# Ubuntu 16.04 sudo apt-get install mono-mcs mono-devel mono-xbuild mono-dmcs mono-reference-assemblies-4.0 libmono-system-data-datasetextensions4.0-cil libmono-system-web-extensions4.0-cil libmono-system-management4.0-cil libmono-system-xml-linq4.0-cil cmake dos2unix clang-3.5 libfreetype6-dev libgtk-3-dev libmono-microsoft-build-tasks-v4.0-4.0-cil xdg-user-dirs
各Setupスクリプトでchmodコマンドが幾つか使われているので、自身のアカウントをsudoersに入れておく。
Ubuntuでsudoersに自身を入れるには以下
sudo gpasswd -a {アカウント名} sudo
Unreal Engineとの依存関係と互換性問題を解決するには、コンパイラとC++ runtime libraryを全て統一する必要がある。
今回は素のUbuntuが用意できたのでドキュメントの通り、clang3.9とLLVMのlibc++を使用した。
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-3.9/bin/clang++ 100 sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-3.9/bin/clang 100
update-alternativesによってclang提供のメッセージが出ればOK
Unreal Engine 4のインストール
UnrealEngineをcloneしてくるが、EpicGamesのGithubリポジトリはcloseしているため、開発者として登録する必要がある。
以下URLの右上からサインアップしてGithubアカウントをProfileに記載する必要がある。
https://unrealengine.com
ここ
サインアップしたら登録したメールアドレスの認証も行っておく(認証してないと後述の自動車素材がダウンロードできない)
サインアップ後、右上に人型アイコンができるのでそこから開発者用Profileページへ。
「接続済みアカウント」に行って下にスクロールしていくと、Githubアカウントを記載するフォームがあるので書く。
https://github.com/EpicGamesとか適当にgithubページに行くと招待状が届いている。
invitationを表示してjoin memberする
(背景が黒いのは自分が拡張しているから)
これでやっと以下スクリプトが通るようになるので、clone時にGithubアカウント認証して設定スクリプトを走らせてmakeする。
makeでは[x/N]みたいな表示が何回か出るし、素材ダウンロードもあるので適当なマシンでやると4時間くらいかかる。
最初適当に50GBくらいVMで容量設定したが、make時足りなくなって途中で止まったのでGPartedを久々に使う事になった。
ストレージは多めに見積もる必要がある。
git clone --depth=1 -b 4.17 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.17 cd ~/UnrealEngine_4.17 ./Setup.sh ./GenerateProjectFiles.sh make
Setup.shでは、「Success」となっていてもその下にエラーメッセージが表示されている場合がある(大抵権限周りで)。
~/.configを触る権限がないとかなのでsudoersでやり直し。
Setup.shの真のSUCCESSは以下画像参照
makeする時もsudoersに入ってないアカウントで作業して、sudo等の扱い間違えると権限の関係で以下辺りで死ぬ。
chmodやchownコマンドで権限を読み書きできるようにして無理やり通しても、後続のCARLAビルドする時に死ぬので諦めてやり直すのが吉。
Refusing to run with the root privileges. (rootじゃmakeできないよー) Access to the path "~~~~~" is denied (Access権限足りんよー) CrushReport-linux-Shippingのレシピで失敗しました
権限周りを丁寧にやっていてもUE4Editorのレシピだけ失敗する場合がある。
Makefile:188: commands for object 'UE4Editor' failed make: *** [UE4Editor] Error 137
依存パッケージのビルド順の問題だったので以下のように1つ1つ愛のある手作業でビルドしていくと通った。
make ShaderCompileWorker make UnrealLightmass make UnrealPak make UE4Editor make CrashReportClient-Linux-Shipping RequiredTools UnrealFrontend
UnrealFrontend-Linux-Shippingじゃないの…と思ったけどUnrealFrontendっぽい。
参考:Compilation error: make: *** [UE4Editor] Error 137 - UE4 AnswerHub
もしUEのbuildをやり直したい時はmake cleanがないので以下のようにARGSを設定する
(Building On Linux - Epic WikiのEnhancing the Makefile)
make ARGS=-clean
CALRAのインストール
CARLAをcloneしてきてbuildする。
~/CARLA/Unreal/CarlaUE4/Contentへの追加や色々ダウンロード等が入るので、これもまた1時間ほどかかる。
(後で知ったけどCompiled versionもダウンロードできるっぽい…)
Release CARLA 0.7.0 · carla-simulator/carla · GitHub
Windows端末が必要な作業が後半にあるので、Setup中に出来る所までやっておくと吉。
ここでpyenv使ってる人はfaildやskippedが出たり、protobufやpyconfig.hが見つからないよと出る。
pyenv global systemして、UE4の関連パッケージインストールからやり直せば大丈夫。
git clone https://github.com/carla-simulator/carla ~/CARLA
cd ~/CARLA
./Setup.sh
SUCCESSとなったら設定おわり
この後まさかのWindows端末が必要になる。
これも時間がかかるのでSetup中に出来る所まで以下やっておくと吉。
~/CARLA/Unreal/CarlaUE4/Content/配下に、追加で手動で自動車素材となるAutomotiveMaterialsを入れる作業である。
http://carla.readthedocs.io/en/latest/how_to_add_automotive_materials/
WindowsにAutomotive Materialsを追加したダミーのプロジェクトを作り、プロジェクト内にあるAutomotiveMaterialsディレクトリをLinux端末にコピーしてくる(現状ライセンスの関係で自分で入れる形になっているらしくこの方法の改善に取り組んでいるらしいが…)
以下URLからパッケージを0$で購入してダウンロードする訳だが、そのダウンロードがWindowsのLauncherアプリからしかダウンロードできない。
Automotive Materials by Epic Games in Epic Showcase,Materials - UE4 Marketplace
Windows端末で上記のパッケージのURLにアクセスして、右上の「ダウンロード」からEpic Games Launcher自体のインストールためのInstallerを落としてくる。
そしてInstaller起動してよしなにWindowsにインストール。
インストールできたらLauncherを起動して「次へ」をおしながら、.NETFrameworkが必要だったりするので、ウィンドウの表示に従ってポチポチしていけば良い。
起動したらLauncher内でマーケットプレイスに行けるので移動して、Automotiveで検索。
バージョンを4.17に合わせてプロジェクトを作成する(最新が4.18になってたので注意)。
プロジェクト作成したらダウンロードがはじまる。
上記作業が終わったら、Windowsの「プロジェクト作成」で作ったプロジェクト配下にある{プロジェクト名}/Content/AutomotiveMaterialsディレクトリをコピーして、scp等でどうにかLinuxマシンに移動する。
Linuxに送信したら、Linux端末の~/CARLA/Unreal/CarlaUE4/Content/配下に送信してきたAutomotiveMaterialsディレクトリを丸々コピーする。
(ContentディレクトリはSetup.shによって生成される)
以下のようにPathを設定しておく
echo 'export UE4_ROOT=~/UnrealEngine_4.17' >> ~/.profile source ~/.profile
Rebuildスクリプトを走らせて、素材ファイルのリンクと周辺のビルドをする。
OpenGL 3.x環境の場合はUE4Editorの起動時の引数に-opengl3が必要になるので、Rebuild.shの編集が必要。
Rebuild.sh 最後の方(65行目くらい)にある以下を変更 - ${UE4_ROOT}/Engine/Binaries/Linux/UE4Editor "${PWD}/CarlaUE4.uproject" + ${UE4_ROOT}/Engine/Binaries/Linux/UE4Editor -opengl3 "${PWD}/CarlaUE4.uproject"
UE4_ROOT=~/UnrealEngine_4.17 ./Rebuild.sh
リンク作業のためにUE4Editorが起動する(ここでOpenGLが3以上でないと詰む)
初回起動時は初期化が入るのでそれなりの時間を要する。
リンク作業は以下参照
http://carla.readthedocs.io/en/latest/how_to_add_automotive_materials/
コンテンツブラウザでContent/Static/Vehicles/GeneralMaterials/MaterialRedirectorsに行って「RedirectorInstance」を開き検索フォームで「Parent」を検索。DummyCarをM_Carpaintに名前を変えて上書き保存して終わり。
多分この作業で失敗すると人や車が表示されないので何度かやってみる。
以下のようにxbuild周りでエラーが出た場合は、UEのmakeをやり直すか権限設定を見直す。
ERROR: UBT ERROR: Failed to produce item not found xbuild
- CARLA Serverの実行と操作 -
CARLAの操作はServerを建ててPython Clientから操作という形になる
具体的にはC lang APIを叩いており、ドキュメントにある図で言うとこんな感じ
http://carla.readthedocs.io/en/latest/how_to_run/
ドキュメントの通りbuildに成功していれば~/CARLAディレクトリ直下に以下スクリプトができているので実行すると、UE4が起動しCarla Serverが動き始める。
./CarlaUE4.sh /Game/Maps/Town01 -carla-server -benchmark -fps=15
ない場合はbuild失敗してるか、compile済みのlatestから取ってくるか。
操作用のクライアントsampleを動かのに必要なパッケージを入れる
sudo pip3 install numpy Pillow pygame
別コンソールを開いて~/CALRA/PythonClient/内にあるsampleを動かせばひとまず操作できるようになる。
python3 ~/CALRA/PythonClient/manual_control.py
manual_controlの操作は以下の通り
W : 進む S : ブレーキ A : 左 D : 右 Q : バッグ Space : ハンドブレーキ R : restart
とりあえず楽しいです。
- おわりに -
ひとまず動作させるまでで終わりです。
本当は年末年始でAirSimも試し、クライアント作りまでやって設定色々書こうくらいまで思っていましたが、UE4のbuildに何回も失敗したり、Ubuntuが死んだり、CARLAが起動しても人Moduleが表示されなかったりとまあまあ辛かったのでここまでになりました。
UE4Editorがsegmentation faultで落ちるようになってきた
— ばんくし (@vaaaaanquish) 2018年1月8日
ただUE4を動かしたいだけなのにubuntu-desktopを壊しまくっている
— ばんくし (@vaaaaanquish) 2018年1月7日
CARLAが動けばAirSimも動くはずなのでチャレンジします。
次は自身で自動運転操作するまでの工程とか、CARLAのパラメータsettingについて書いていきたいと思います。
がんばるぞ。