ミノルの備忘録

技術ネタを中心とした備忘録という名のポエム

記憶にございません!

wsl2(Ubuntu16.04 LTS)にAutoware.aiをインストール

  • 環境
    • Windows10 home(20H2)
    • WSL2
    • Ubuntu16.04 LTS
  • 目標
    • autowareをdockerで起動
    • demo用のrosbag使ってmapを描画

公式のGithubで強く推奨されているDockerを使ってインストールする
Generic x86 Docker · Autoware-AI/autoware.ai Wiki · GitHub

  • wsl2インストールする(VcXsrv等でXserverも使えるようにしておく)
  • Dockerをインストールする
    Docker素人なので、↓に従って慣れてみる
    Docker Installation · Autoware-AI/autoware.ai Wiki · GitHub
    順調にインストールできていたが、最後のsudo docker run hello-worldでエラーになる。
$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

エラーメッセージからするとdocker daemonなるものが動いていない様子。
sudo service docker status で調べてみると

$ sudo service docker status
 * Docker is not running

と出力される。Autowareのほうのチュートリアルは書いてなかったがsudo service docker startでdockerエンジンを立ち上げる?と無事hello-worldまで完了。

$ sudo service docker start
 * Starting Docker: docker                                                                     [ OK ]
$ sudo service docker status
 * Docker is running
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
$ cd ~/docker/generic
$ ./run.sh -r kinetic -c off

※defaultだとROSはmelodicが選択される。 ↓によるとUbuntu16.04ではkineticが推奨らしいので-r kineticを引数に追加。 Source Build · Wiki · Autoware Foundation / MovedToGitHub / autoware · GitLab また、cuda周りでエラーが出たので、とりあえず-c off

ここで下記のエラーが出た場合は、docker実行時に管理者実行できていないことが原因。 補足①を参考に権限を付与する。

無事にrun.shの実行が終わるとユーザーがautowareに変わる。
f:id:GriffonMK:20201123000146p:plain ※2回目に起動したスクショ。1回目はいろんなdownloadが実行される。

  • autowareのdemo実行 一度exitしてhostに戻る(戻らなくてもできるかもしれない)。
    ↓に従い、demo用のデータをダウンロード。 ROSBAG Demo · Autoware-AI/autoware.ai Wiki · GitHub cdで/shared_dirに移動してからダウンロードすると、autowareコンテナと共有できる。 (2個目のsample_moriyama_150324.tar.gzは容量でかい。ダウンロード完了に時間かかる)
$ cd shared_dir/
$ wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz
$ wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz

ダウンロード完了したら再度autoware docker起動。
(もともとautowareユーザーでshare_dirにwgetでもできるかもしれない)

$ cd ~/docker/generic
$ ./run.sh -r kinetic -c off

↓に従い、上記でダウンロードしたデータを指定のフォルダに移動&解凍。
ROSBAG Demo · Autoware-AI/autoware.ai Wiki · GitHub

$ cd ~
$ mkdir .autoware
$ cd .autoware
$ cp ~/shared_dir/sample_moriyama_* .
$ tar zxfv sample_moriyama_150324.tar.gz
$ tar zxfv sample_moriyama_data.tar.gz

ここから先が公式のチュートリアル"2.Run Autoware"とは異なる。
autowareのバージョンは1.12以上(1.14)なのだが、autoware.aiというディレクトリがない。
代わりにAutowareというディレクトリに移動する。

$ cd ~/Autoware
$ source install/setup.bash
$ roslaunch runtime_manager runtime_manager.launch

なんだかエラーなのかよくわからんのがターミナル上に表示される。 f:id:GriffonMK:20201123230323p:plain
とはいえautoware自体は起動する。 f:id:GriffonMK:20201123230344p:plain Simulationタブに移動する f:id:GriffonMK:20201123230503p:plain さきほどダウンロードしたdemo用のrosabagデータを読み込む。
ダウンロード&解凍したディレクト.autowareは隠しファイルなので、"右クリック→Show Hidden Filesをクリック"で表示させる。 f:id:GriffonMK:20201123231001p:plain sample_moriyama_150324.bagを選んでopen。 f:id:GriffonMK:20201123230912p:plain こんな感じになる
f:id:GriffonMK:20201123231058p:plain Start Timeに140をセットし、Playを押す。
f:id:GriffonMK:20201123231253p:plain 適当なタイミングでPause押す。
f:id:GriffonMK:20201123231341p:plain 右下にあるRVizを押す。
f:id:GriffonMK:20201123231510p:plain
が、一瞬RVizのロゴが出てきて何も起こらない・・・
どうもOpenGLが原因らしい。
WSLやらVcXsrvやら一度すべて落として再起動。
VcXsrvのwindows側のOpenGLを使用しない設定の引数を追加する。 f:id:GriffonMK:20201123233740p:plain
再度、docker起動し.autowareにデータコピー&解凍。
roslaunchでAutoware起動。
同じ手順でrosbagデータを読み込むと今度は無事RViz起動。 f:id:GriffonMK:20201123234209p:plain
Configを読み込む。
f:id:GriffonMK:20201123234331p:plain
↓のパスにあるdefault.rvizを読み込む。

~/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/default.rviz

f:id:GriffonMK:20201123234611p:plain
最初に起動したときのconfigの変更するか聞かれるが、とりあえずdiscard。
f:id:GriffonMK:20201123234901p:plain
QuickStartのタブに戻る。
公式の画像だと画像がつぶれて見えにくいが、おそらく下記の設定にする。
f:id:GriffonMK:20201123235355p:plain
・Map:
home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_map.launch
・Sensing:
/home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_sensing.launch
・Localization:
/home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_localization.launch
・Detection:
/home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_detection.launch
・Mission Planning:
/home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_mission_planning.launch
・Motion Planning:
/home/autoware/Autoware/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/my_motion_planning.launch
Mapボタンを押す。
f:id:GriffonMK:20201123235913p:plain Simulationタブに戻り、Pauseを解除するとMapがRVizに描画される。
f:id:GriffonMK:20201124000211p:plain


  • 補足①
Got permission denied while trying to connect to the Docker daemon socket

sudoなしでdockerを動作させられるように、下記を参考に権限付与。
dockerコマンド実行時の「Got permission denied while trying to connect to the Docker daemon socket」 - Libra Studio エンジニアブログ

$ sudo gpasswd -a $USER docker
$ sudo chgrp docker /var/run/docker.sock

参考にしたサイトではdockerの再起動でOKとのことだったが、私の環境ではダメだったのでUbuntuを再起動(プロンプトを再起動)したらsudoなしでdockerが実行できるようになった。