はじめに
そこそこのスペックのUbuntuデスクトップが手に入ったので、自動運転システムのOSSであるAutoware.Autoの環境構築を実施してみます。
ただ、環境構築だけじゃ面白くないので、Autowareが提供しているデモを動かすところまで実施します。
Autoware.Autoとは
Autoware(オートウェア)はティアフォー が主導で開発をしているLinuxとROSベースのオープンソースの自動運転車用オペレーティング・システムです。
もともとROS1をベースとしてAutoware(Autoware.AIと呼ばれている)は開発されており、ROS2が出てからROS2ベースとして再開発されているものがAutoware.Autoになります。
今回は、ROS2ベースであるAutoware.Autoの環境を構築していきます。
システムの依存関係と対象環境
Autoware.Autoではサポートされているプラットフォームや推奨スペックがあるので、下記に記載します。
ハードウェア/ソフトウェア要求
-
CPU
- amd64 / x86_64 (Intel/AMD)
- arm64 / aarch64 / arm64v8 (ARM v8, 64-bit)
-
OS
Ubuntu ROS Version 20.04 LTS ROS2 Foxy (active development) 18.04 LTS ROS2 Dashing (maintenance only)
[補足]
Ubuntu 18.04でも動くとは書いてあるが、今後の機能追加はされなさそうなので、おとなしくUbuntu 20.04 を使うのが良いでしょう。
推奨スペック
Autonomous Valet Parking Demonstration のデモを動かす際の推奨スペックは下記の通り。
-
CPU
Intel(R) Core(TM) i9-9900KF CPU @ 3.60GHz (16 virtual cores) with 64GB RAM
※最低 Core i5 はないと厳しそう -
GPU
NVIDIA GeForce RTX 2080 with 8 GB memory
※最低 NVIDIA RTX1080 はないと厳しそう -
SSD
Dockerのイメージが結構容量を食うので、あるだけあると良さそう。
※なんだかんだで1TBぐらいあれば困ることはなさそう
事前準備
Autoware.Autoを動かすために必要なツールを準備しましょう。
- Git
- NVIDIA Graphic Driver
- Docker CE
- NVIDIA Container Toolkit
[補足]
2から4に関しては、[Ubuntu 18.04 LTS で NVIDIA-Docker2 を使ってみる] のページを参考にしました。
1. Gitのインストール
下記コマンドでGitをインストールします (導入済みであればスキップ)。
sudo apt -y install git
2. NVIDIA Graphics Driverのインストール
-
グラフィックスドライバのリポジトリを追加します。
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update
-
使っているGPUで利用できるドライバを確認するためにubuntu-drivers-commonをインストールします。
sudo apt-get -y install ubuntu-drivers-common
インストールできるドライバの一覧は下記コマンドで確認することができます。
ubuntu-drivers devices
-
下記コマンドで、ドライバの一覧の中で推奨 (recommended) になっているドライバをインストールします。
sudo ubuntu-drivers autoinstall
[補足]
バージョンを指定してインストールするときは 下記のようにapt-getを使うことで実施できます。
特定のバージョンのみ使用したい場合はこの方法でインストールしてください。sudo apt-get -y install nvidia-driver-430
3. Docker CEのインストール
[Install Docker Engine on Ubuntu]を参考にインストールを実施します。
2022/10/30時点では下記のような手順になります。
-
パッケージの更新およびインストールを実施します。
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
-
GPGキーを追加します。
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
-
リポジトリをセットアップします。
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
最新版のDockerをインストールします。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4. NVIDIA Container Toolkitのインストール
[Installation Guide — NVIDIA Cloud Native Technologies documentation]を参考にインストールを実施します。
2022/10/30時点では下記のような手順になります。
-
パッケージを更新します。
sudo apt-get update
-
GPGキーを追加します。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
-
nvidia-docker2パッケージをインストールします。
sudo apt-get install -y nvidia-docker2
-
Dockerデーモンを再起動します。
sudo systemctl restart docker
これで、事前準備は一通り完了となります。
問題なく導入できているかを確認するために、下記コマンドでCUDAコンテナを実行してみます。
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
問題なく導入できていれば、下記のような結果が返ってきます。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------
Autoware.Autoのセットアップ
Autoware.Autoでは開発環境としてDockerベースのツールであるAgile Development Environment (ADE)を使用します。
[Installation with ADE]と[ADE-Installation]を参考にしてADEをインストールし、ADEで用意したコンテナに資材を入れたり、シミュレーション環境を用意するといった作業を実施していきます。
ADEのインストール
以下のコマンドでadeのバイナリをダウンロードし、/usr/local/bin
に移動させます。
wget https://gitlab.com/ApexAI/ade-cli/-/jobs/1341322851/artifacts/raw/dist/ade+x86_64
mv ade+x86_64 ade
chmod +x ade
mv ade /usr/local/bin
下記コマンドでADEが実行できるかを確認します。
cd ~
# パス確認コマンド
which ade
# バージョン確認コマンド
ade --version
バージョン情報が表示されれば、ADEのインストールは完了です。
ADE Projectのセットアップ
ADE を使用する際、コンテナを作成することになるのですが、ADEで作成するコンテナ内のユーザディレクトリには、ホスト内のディレクトリがマウントされている必要があります。
下記の手順で、ホスト内にADEにマウントするためのディレクトリを用意します。
下記コマンドで、任意の場所にadehomeディレクトリを作成し、フォルダ内に.adehomeファイルを作成します (下記ではユーザフォルダに作成しています)。
# adehome を作成する場所はどこでも良い
mkdir -p ~/adehome
cd ~/adehome
touch .adehome
下記コマンドで、先ほど作成したadehomeディレクトリ内にAutoware.Autoのリポジトリをクローンします。
cd ~/adehome
git clone https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto.git
公式HPには、次の手順として [ホストシステムと ADE 間のファイルの共有(Sharing files between the host system and ADE (Optional))] という手順がありますが、この手順を実施しなくてもデモは動作します。公式HP の内容を確認し、必要だと思う方は実施してください。
ADE(開発環境)の起動
下記コマンドでADE環境を立ち上げることができます。
実行すると、AEDで用意されたコンテナに入った状態となります。
# SVLボリュームでADEを開始
cd ~/adehome/AutowareAuto
ade --rc .aderc-amd64-foxy-lgsvl start --update --enter
[備考]
今回のデモではSVLシミュレータを使用しますが、使用しない場合はSVLボリュームは不要なので、下記コマンドでコンテナを起動しても問題ないはずです。# デフォルトでADEを開始 cd ~/adehome/AutowareAuto ade start --update --enter
なお、別ターミナルから起動中のADEコンテナに入りたい場合は、下記コマンドを実行すれば入れます。
ade enter
以上で、Autoware.Autoの環境構築は完了となります。
SVLシミュレータの動作確認
デモをする前に、SVLシミュレータの動作確認だけ行っておきます。
SVL simulator: running the SVL simulator alongside Autoware.Auto を参考にキー入力で車両を操作するシミュレーションを実施してみます。
SVLシミュレータのアカウント作成
SVL Simulatorを使用するためには 公式サイト でアカウント作成する必要があります。アカウントを持っていない方は、作成しておきましょう。
SVLシミュレータの起動&サインイン
SVLボリュームのADEコンテナを起動し、下記コマンドでSVL Simulatorを起動します。
# コンテナに入る
ade enter
# コンテナ内で実施する
/opt/lgsvl/simulator
SVL Simulatorが開かれたら、LINK TO CLOUD
をクリックします (ダイアログが表示されたらOK
をクリック)。
SVL Simulatorの Webサイトが開かれるので、先ほど作成したアカウントでサインインします。
シミュレーション環境の用意
下記の手順でシミュレーションを実施するための環境(道路や車両)を用意します。
- 左ツリーの
Clusters
を選択し、New Cluster
に任意の名前を入力してCreate Cluster
をクリックします。(とりあえずade-clusterとした) - 左ツリーの
Library/Maps
を選択し、AutonomouStuffを検索してヒットするかを確認します。
ヒットしない場合、左ツリーのStore/Maps
にて AutonomouStuff を検索&選択し、Add to Library
をクリックします。 -
ROS2ForUnitySVLBridge のページにアクセスし、
Add to Library
をクリックします。 - 左ツリーの
Library/Vehicles
を選択しAWFLexus2016RXHybridを選択します。
Sensor Configuration
の右側にあるボタンを押し、最下部にあるAdd New Configuration
をクリックします。
Configuration Name
は任意(とりあえずAutowareAuto-ROS2_bridgeとした)、Bridge
はROS2ForUnitySVLBridgeを選択します。 -
Sensor Configuration
の最下部にAutowareAuto-ROS2_bridgeがあるのでクリックします。
Visual Editor
の右端にある{...}
を選択し、avp-sensors.jsonの内容をコピペします。(コピペするとセンサーが追加されるはず) - キー入力操作用のシミュレーションを作成します。
左ツリーのSimulations
を選択し、Add New
を選択します。
Simulation Name
は任意(とりあえずSample-KeyControlとした)、Select Cluster
はade-clusterを選択し、Next
をクリックします。
Run Template
はRandom Traffic、Map
はAutonomouStuff、Vehicle
はLexus2016RXHybrid、Select Sensor Configuration
はAutowareAuto-ROS2_bridgeを選択し、Next
をクリックします。
Autopilot
はOther ROS 2 Autopilot (自動操縦)を選択し、Next
、Publish
の順にクリックします。
シミュレーションを実施
左ツリーのSimulations
の中に先ほど作成したシミュレーションが入っています。
作成したシミュレーションを選択し、Run Simulation
をクリックすると、SVL Simulatorアプリの画面にシミュレーション環境が表示されます。
左下の ▶ をクリックするとシミュレーションが開始され、キー操作により車両を動かせるようになります。
(F1を押すとキー操作のリストが表示されます)
以上で、SVLシミュレータの動作確認が完了となります。
Autoware.AutoおよびSVLシミュレータが準備できたので、最後にデモを実施していきます。
Autoware.Autoのデモ: Autonomous Valet Parking Demonstration
Autowareでは、バレーパーキングのデモが提供されています。
ユーザが駐車場を指定し、指定した駐車場まで自動運転した後に駐車するといったデモ内容となります(障害物がある場合は停止します)。
下記手順に沿ってデモを実施していきます。
-
SVLボリュームでADEコンテナの起動、SVL Simulatorの起動&サインイン、 先ほど作成したSample-KeyControlのシミュレーションの起動まで実施します。
-
ターミナルを開き、ADEコンテナ内に入り、下記コマンドを実行してRViz(可視化ツール)を起動します。
# コンテナに入る ade enter # コンテナ内で実施する source /opt/AutowareAuto/setup.bash ros2 launch autoware_auto_launch autoware_auto_visualization.launch.py
-
新しいターミナルを開き、ADEコンテナ内に入り、下記コマンドでデモを実行します。
# コンテナに入る ade enter # コンテナ内で実施する source /opt/AutowareAuto/setup.bash ros2 launch autoware_demos avp_sim.launch.py
-
RViz内の車両位置がSVLシミュレータとあっていないため、
2D Pose Estimate
を使用してRViz内の車両位置を調整します。
(本来車両が位置する場所に矢印を引けば位置合わせできるはず) -
2D Goal Pose
で駐車スペースを選択します。
[補足]
プログラムからでも駐車スペースを指定することができます。その場合は下記のようなコマンドにようになります。ros2 topic pub /planning/goal_pose geometry_msgs/msg/PoseStamped '{header: {frame_id: "map"}, pose: {position: {x: -96.46856384277344, y: 58.39532775878906}, orientation: {z: 0.42554035782814026, w: 0.9049394130706787}}'} --once
実際にデモを動作させている様子は下記の通りです(容量制限の関係上、カクついたgifになっていますがご了承ください)。
※オレンジの矩形が荒ぶっていますが、一旦スルーで、、
指定した駐車スペースに駐車しているっぽい振る舞いになったので、これで良しとしました!
おわりに
今回は自動運転システムのOSSであるAutoware.Autoの環境構築およびデモ実施までを行いました。
トヨタ自動車が東京オリンピックで動かしていた自動運転バス「e-Palette(イーパレット)」にAutowareが採用されており、注目を浴びているOSSです。
動作環境としては、ある程度スペックがあるPC(GPUなど)が必要になるので手軽に動かすのは難しいですが、興味がある方は触ってみてはどうでしょうか?