Help us understand the problem. What is going on with this article?

LGSVL SimulatorとAutowareによる自動運転チュートリアル

Autowareとシミュレータ

こんにちは、株式会社ティアフォーにてROSによる自動運転オープンソースソフトウェアである「Autoware」の開発に取り組んでます片岡です。
自動運転で一番大変なのは実験だと個人的に考えています。
許可をとって場所を抑えて車両を手配して・・・・超時間がかかります。
そこで重要なのがシミュレータです。
シミュレータならものの10秒で実験環境を用意することが可能で事故ったとしても誰にも迷惑がかかりません。
Autowareでは過去にcat_vehicleというgazeboベースのシミュレータをサポートしていたことがあったのですがいろいろと依存パッケージが古くなり誰もメンテしていないところまで来てしまったためまともなシミュレータがない状況がずっと続いていました。

IMAGE ALT TEXT HERE
すると今年のROSCONにおいて突如LG電子さんのシリコンバレー研究所がAutowareとAppolo対応の自動運転シミュレータつくったよ!!!というニュースが飛び込んできてこれはもうこの流れに乗るしかないということで現在こちらのシミュレータをサポートするべく作業を進めています。(https://github.com/CPFL/Autoware/issues/1724)
もちろん他のシミュレータは今後一切サポートしないとかではなく当面これに合わせてミニマムな仕様を作っていろんなシミュレータとAutowareのインターフェースを共通化していこうと企んでいます。ご意見いただけたらすごく喜びます。

今回はROSアドベントカレンダー初日ということで街一個シミュレーションしてその中で最もミニマムな構成でAutowareを動かして遊ぶというチュートリアルができればと思っています。

用意するもの

  1. Linuxマシン(シミュレータ専用のWindows専用マシンがあるとなおよし)
CPU Core i7以上 : 8スレッド以上、第八世代だとコンパイルが早くて快適なのでおすすめです。 
GPU GTX 1060以上 : Yoloによる物体検知がしたい場合このくらいは必要です。
メモリ 32GB以上 : Autoware + Simulatorで17~18GB程度は常時消費します。
  1. ハンドルコントローラ
    Waypointを作成するときにあるとかなり楽です。 このチュートリアルではこのLogicool製G29ハンドルコントローラを使います。   image.png これ以外のハンドルコントローラだとキーアサインがずれてこのチュートリアル通りにやっても車両への制御司令が正しく出ない可能性がありますのでご了承ください。

LGシミュレータのビルド

LGシミュレータのリポジトリはこちらになります。
バイナリの量が結構あるのでgit lfsで管理されています。
入れていない場合は以下の手順でインストールしておいてください。

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt update
sudo apt install git-lfs

またLGシミュレータはUnityベースですのでビルドにはUnityが必要です。
こちらからLinux向けのUnityをインストールしておいてください。
次にシミュレータのコードをダウンロードします。

git clone https://github.com/lgsvl/simulator.git

ただし現状のシミュレータではLidarシミュレーションに不備がありモデルをカスタムする必要があります。
以下のコマンドでカスタムしたLidarのモデルをダウンロードしてください。

git clone https://github.com/Tomoya-Sato/lg_velodyne

ダウンロードした中にあるLidarSensor.csとシミュレータ内部にあるLidarSensor.csを差し替えXE_Rigged-autoware32.prefabをXE_Rigged-autoware.prefabにリネームした後でシミュレータ内部にあるXE_Rigged-autoware.prefabを上書きしてください。
現在この変更はシミュレータのリポジトリにPRを出していて通るのを待っている状態です。
次にUnityEditorを開いてプロジェクトをビルドしてください。

Autowareのビルド

シミュレータのビルドが完了したらAutowareをビルドします。
こちらの手順にしたがってAutowareをビルドしてください。
下記のjoy_vehicle_cmd_senderでAutowareのパッケージを利用するので以下の一文を.bashrcに書き込んで環境変数を通しておいてください。

source ~/Autoware/ros/devel/setup.bash

joy_vehicle_cmd_senderのビルド

次に以下の手順でjoy_vehicle_cmd_senderをビルドします。

sudo apt install ros-kinetic-rosbridge-server
git clone https://github.com/hakuturu583/joy_vehicle_cmd_sender
cd <catkin_ws>
catkin_make

Waypointの作成

まずはAutowareで追従したい経路を作成します。

点群地図等のダウンロード

mkdir ~/shared_dir && cd ~/shared_dir
git clone https://github.com/lgsvl/autoware-data.git

Simulatorの立ち上げ

UnityEditorを開きBuild&Runを選択
image.png
こちらの画面まで進んだらFree Roamingを選択してください。
image.png
この画面まで来たらAutowareを立ち上げてください。

cd ~/Autoware/ros/
./run

Autowareが立ち上がったらruntime_managerという以下のUIが立ち上がります。
image.png
Mapタブを開きPointcloudmapに

autoware-data/data/map/pointcloud_map_sf_portion/

内部に含まれるpcdファイルをすべて入力してPointCloudのボタンをクリックしてください。
image.png

次にG29ハンドルコントローラがPCにつながっていることを確認したあと以下のコマンドでjoy_vehicle_cmd_senderおよびrosbridge_serverを起動します。

roslaunch joy_vehicle_cmd_sender sender.launch

その後シミュレータのウインドウに移動してRUNをクリックします。
すると以下のような画面に移行します。
image.png
Autowareでは自己位置推定にLidarセンサの情報を使用するのでEnable Lidarのチェックボックスにチェックをいれてください。

Autowareによる自己位置推定

sensingタブを開きvoxelgrid_filterのチェックを入れcomputingタブに移動した後ndt_maching,voxel_grid_filterにチェックを入れてください。
image.png

次にrvizを立ち上げ2DPoseEstimateによって自己位置推定の初期姿勢を与える。
点群地図とシミュレータからの点群を比較し自己位置推定がハマったとおもったらいよいよWaypointを作る段階に入ります!!

Waypointの作成

G29ハンドルコントローラを用いてWaypointを作成します。
computingタブを開いてwaypoint_saverを起動します。
image.png
そしてその後G29を使ってシミュレータに/vehicle_cmdに速度司令を送るとwaypoint_severでwaypointが作られます!!楽しい!!
iOS の画像.jpg

自動運転開始

それでは作成したWaypointにしたがって自動運転をしていきたいと思います。
もう司令を手動で送る必要はないので

roslaunch joy_vehicle_cmd_sender sender.launch

は落としてください。
代わりに以下のコマンドでrosbridge_serverだけを立ち上げます。

roslaunch rosbridge_server rosbridge_websocket.launch

シミュレータ画面でResetをクリックして初期地点に車を戻します。
車が初期地点に戻ったので以前に書いた手順に従って自己位置推定をもとにもどしてください。

次にComputingタブを開いて必要なノードを立ち上げていきます。
image.png
まずはlane_rule,lane_sotp,lane_selectを立ち上げます。
image.png
次にobstacle_void,velocity_set,pure_pursuit,twist_filterを立ち上げます。
最後にwaypoint_loaderを立ち上げます。
その際にappタブをクリックしてwaypoint_serverで作成したwaypointのcsvファイルが読み込まれていることを確認してください。
うまく行っていれば動画のように自動運転ができるはずです!!
IMAGE ALT TEXT HERE

最後に

今回はAutowareとそれに対応したシミュレータを使って最もミニマムな構成で自動運転する手順を紹介しました。
シミュレータ自体がAutowareをサポートしているだけのことはあってかなり少ない手間で自動運転までもっていくことができました。
現在このシミュレータとAutowareの組み合わせをさらに使いやすいものとするべくgithubのissue上で議論をしています。
(https://github.com/CPFL/Autoware/issues/1724)
今後はこのシミュレータをつかって大規模なシミュレーション(交通流ありの状態で複数のAutowareによる自動運転シミュレーション等)を行っていこうと考えています。
こんな機能がほしい!等の要望がございましたらぜひgithubのissueあるいはAutowareのdeveloper slackまでよろしくお願いします!!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away