自動運転シミュレータCARLAを使う

2019年1月24日

こんにちは、Fixstars Autonomous Technologiesの吉村です。
Fixstars Autonomous Technologiesでは、自動運転を実現するためのアルゴリズム開発を行っています。
今回の記事では自動運転向けのアルゴリズム開発に活用できるオープンソースの自動運転シミュレータ「CARLA」の概要について紹介します。

CARLAとは

CARLAは、自動運転のアルゴリズム開発、検証を支援するためのオープンソースのシミュレータです。また、CARLAは以下のセンサ出力に対応しており、シミュレータ空間上の任意の位置にセンサを設置することができます。CARLAでサポートしているセンサの詳細についてはこちらを参照ください。

  • RGBカメラ
  • Depthカメラ
  • Semantic Segmentation(Cityscapesラベルに対応)
  • LiDAR

下図にCARLAがサポートしているセンサの出力例を示します。

RGBカメラ
Depthカメラ
Semantic Segmentation

また、走行時の天候もカスタマイズすることができるため、例えば悪天候時のカメラ画像も得ることができます。下図に天候の例を示します。CARLAでサポートしている天候の詳細についてはこちらを参照ください。

逆光
大雨
曇り(雨上がり)

CARLAの機能をおおまかに知るには公式のデモムービーを観るとわかりやすいでしょう。

動作確認環境

今回の記事ではUbuntu 16.04 64bit上でCARLAの基本機能を使ってみることにします。また、以降はUbuntu install of ROS Kineticの手順でROS Kinetic(ros-kinetic-desktop-full)をインストール済みであることを前提に説明します。

CARLAインストール

まず、CARLAのリリースページからコンパイル済みのバイナリをダウンロードします。今回は本記事執筆時点で最新のCARLA_0.9.2.tar.gzを使います。

ダウンロードが終わったら以下のコマンドを実行して展開することでCARLAを使うことができます。以降、展開後のディレクトリのパスを${CARLA_ROOT}と記載します。

$ tar xfvz CARLA_0.9.2.tar.gz

また、Python APIを使用するために.bashrcに以下の記述を追記し、PYTHONPATHを設定しておきます。

export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla-0.9.2-py2.7-linux-x86_64.egg

その後、

$ python -c 'import carla;print("Success")'

と実行し、

Success

と表示されればPYTHONPATHが正しく設定されていることがわかります。

マニュアル操作

CARLAの起動

以下のスクリプトを実行して、CARLAを起動します。-benchmarkオプションはFPS固定にするための指定です(公式ドキュメントの「Fixed time-step」参照)。また、-fpsオプションでFPSを指定します。

$ cd ${CARLA_ROOT}
$ ./CarlaUE4.sh -windowed -ResX=320 -ResY=240 -benchmark -fps=10

マニュアル操作スクリプト

以下のスクリプトを実行することでシミュレータをマニュアルで操作することができます。

$ cd ${CARLA_ROOT}
$ python manual_control.py

このスクリプトを実行して表示されたウィンドウに対して以下のキー入力を行うことで自車両の操作や設定変更などを行うことができます。

キー入力 処理内容
W throttle
S brake
AD steer
Q toggle reverse
Space hand-brake
P toggle autopilot
M toggle manual transmission
,/. gear up/down
TAB change sensor position
` next sensor
[1-9] change to sensor [1-9]
C change weather (Shift+C reverse)
Backspace change vehicle
R toggle recording images to disk
F1 toggle HUD
H/? toggle help
ESC quit

ただし、このスクリプトではデフォルトのセンサ位置が自車両を後方から見下ろすような配置になっている点に注意が必要です。 TABキーを押下することでセンサ位置を自車両の前方/後方に切り替えることができます。

カメラ画像(自車両の後方にセンサ設置) カメラ画像(自車両の前方にセンサ設置)

また、Pキーを押下することでautopilotモードのON/OFFを切り替えることができます。 このautopilotモードではマップ内のレーンを信号機、交通状況に応じて自動的に走行するモードです。

NPCの追加

以下のスクリプトを実行することで、自車以外のNPC(Non Player Character)の車両を追加できます。このスクリプトでは-nオプションでNPCの数を指定することができます(以下の例では50台の車両を追加しています)。

$ cd ${CARLA_ROOT}
$ python spawn_npc.py -n 50

ROS連携

CARLAはros-bridgeを使うことでROS(Robot Operating System)と連携することができます。

依存パッケージのインストール

以下のコマンドを実行してros-bridgeの依存パッケージをインストールします。

$ sudo apt-get install python-protobuf
$ pip install --user simple-pid
$ sudo apt-get install ros-kinetic-derived-object-msgs
$ sudo apt-get install ros-kinetic-ackermann-msgs

ros-bridgeパッケージのビルド

以下のコマンドを実行してros-bridgeパッケージをビルドします。

$ git clone https://github.com/carla-simulator/ros-bridge.git
$ mkdir -p ~/ros/catkin_ws_for_carla/src
$ cd ~/ros/catkin_ws_for_carla/src
$ cp -r ~/ros-bridge .
$ source /opt/ros/kinetic/setup.bash
$ cd ..
$ catkin_make

ros_bridgeの実行

以下のコマンドを実行してros-bridgeを実行します。

$ source ~/ros/catkin_ws_for_carla/devel/setup.bash
$ roslaunch carla_ros_bridge client_with_rviz.launch

このlaunchファイルでは、現状CARLAで有効になっているセンサ情報、自車位置などをrvizで可視化することができます。下図はRGBカメラ、LiDARのセンサ情報をrvizで可視化した例です(緑色の四角は自車の位置を表すマーカーです)。車両の左側前方にある樹木や車両右側にある壁に点群が出ていることがわかります。

ただし、CARLA v0.9.2時点ではros_bridge経由で得られるego_vehicle_control_info topicの値(車両の速度、加速度、ステアリング角度など)にシミュレータ上の値が反映されていない問題があるようなので注意が必要です。

https://github.com/carla-simulator/ros-bridge/pull/22で修正されているようなのでCARLA v0.9.3に反映されることが見込まれます。

おわりに

本記事では自動運転アルゴリズム検討のためのオープンソースのシミュレータであるCARLAの基本的な機能紹介をしました。今後はCARLAのPython APIを使った各種センサのカスタマイズや定義した交通シナリオを再現するscenario_runnerの使い方について紹介する予定です。

イベント告知

2019/02/12(火)に「バイオイメージングx自動運転 Tech Night」というイベントを開催します。「自動運転におけるCNNの信頼性 【最新論文紹介】」という発表で弊社メンバも登壇するので、自動運転やコンピュータビジョンに興味のある方はぜひご参加ください!

About Author

yoshimura

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media