このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
こんにちは、Fixstars Autonomous Technologiesの吉村です。
Fixstars Autonomous Technologiesでは、自動運転を実現するためのアルゴリズム開発を行っています。
今回の記事では自動運転向けのアルゴリズム開発に活用できるオープンソースの自動運転シミュレータ「CARLA」の概要について紹介します。
CARLAは、自動運転のアルゴリズム開発、検証を支援するためのオープンソースのシミュレータです。また、CARLAは以下のセンサ出力に対応しており、シミュレータ空間上の任意の位置にセンサを設置することができます。CARLAでサポートしているセンサの詳細についてはこちらを参照ください。
下図に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_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を起動します。-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(Non Player Character)の車両を追加できます。このスクリプトでは-n
オプションでNPCの数を指定することができます(以下の例では50台の車両を追加しています)。
$ cd ${CARLA_ROOT}
$ python spawn_npc.py -n 50
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パッケージをビルドします。
$ 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を実行します。
$ 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の信頼性 【最新論文紹介】」という発表で弊社メンバも登壇するので、自動運転やコンピュータビジョンに興味のある方はぜひご参加ください!
2/12(火) 19時より 画像認識技術に関する技術交流会「バイオイメージングx自動運転 Tech Night」を開催します!
弊社はもちろん、バイオイメージング・医療画像診断のエルピクセルさんや、自動運転のZMPさんもご登壇されます!
分野をまたいで技術について語らいましょう!https://t.co/zfLxVic6TP— 株式会社フィックスターズ (@Fixstars_JP) 2019年1月22日
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...