ミノルの備忘録

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

記憶にございません!

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が実行できるようになった。

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

  • 環境
    • Windows10 home(20H2)
    • WSL2
    • Ubuntu18.04 LTS

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

$ cd docker/generic
$ ./run.sh -c off

./run.shが正常に完了するとユーザーがautowareに変わる

autoware@それぞれ違う:/home/autoware

ls実行してみるとshared_dirというディレクトリがあるのがわかる。
share_dirはdockerを立ち上げたhostとデータを共有するためのディレクトリ。
(Windowsじゃくて、wslで立ち上げたUbuntuのhost)
ここにdemo用のデータ等を置けばいい。

$ ls
Autoware  shared_dir

公式のInstallationではインストール完了後に、"適切な"ブランチでgitをmasterに更新する、と書いてある。
Installation · Autoware-AI/autoware.ai Wiki · GitHub
"適切な"はおそらく、/home/autoware/Autoware/src/autoware/配下のディレクトリのことだと思われる(commonとかcore_perceptionとか)

autoware@それぞれ:/home/autoware/Autoware/src/autoware/common$ git checkout master
  • とりあえずautowareを実行してみる
    実行ファイルの場所に移動する。
autoware@それぞれ:/home/autoware$ cd Autoware/install/

実行

$ source setup.bash
$ roslaunch runtime_manager runtime_manager.launch

ROSBAG Demo · Autoware-AI/autoware.ai Wiki · GitHub demoデータを何ももってないからか、画面はいまいち。
(demoデータはダウンロード中)

とりあえず起動はできた。 f:id:GriffonMK:20201123011215p:plain (ボタンが重なってる?wsl) f:id:GriffonMK:20201123011323p:plain もしかしたら$ ./run.sh -c offでautowareのversionを1.11.1で指定したほうがよかったのかも。$ ./run.sh -c off -t 1.11.1
Source Build · Autoware-AI/autoware.ai Wiki · GitHub

wsl2で Error: Can't open display

wsl2でUbuntu18.04を導入。
VcXsrvをインストールし、例えば↓の記事に書いてあるように設定してみても
Error: Can't open display が出力される場合のトラシュー。

WSL2におけるVcXsrvの設定 - Qiita

いろんなサイトを見て、DISPLAY変数の書き方変えてみたり、VcXsrv側の設定をちょろちょろ変えてもダメな場合はセキュリティソフトやファイヤーウォールを疑うべし。

私はセキュリティソフトで防がれてしまってました f:id:GriffonMK:20201120002742p:plain

ROS2でSLAM②Turtlebot3インストール

目次

  1. 環境
  2. 手順
  3. 参考にしたページなど

環境

  • ↓でROS2(dashing)のインストールが完了した時点の環境
    (export ROS_DISTRO=dashingされてる前提) griffonmk.hatenablog.com

手順

  • Cartographerの依存パッケージをインストールする。
# SLAM パッケージである Cartographer の依存パッケージをインストール
sudo apt install -y \
google-mock \
libceres-dev \
liblua5.3-dev \
libboost-dev \
libboost-iostreams-dev \
libprotobuf-dev \
protobuf-compiler \
libcairo2-dev \
libpcl-dev \
python3-sphinx
# Gazebo のインストール
sudo apt install ros-${ROS_DISTRO}-gazebo-ros-pkgs
  • SLAM用パッケージのCartographerをインストールする
# SLAM パッケージ Cartographer のインストール
sudo apt install ros-${ROS_DISTRO}-cartographer
sudo apt install ros-${ROS_DISTRO}-cartographer-ros
# ナビゲーションパッケージ Navigation2 のインストール
sudo apt install ros-${ROS_DISTRO}-navigation2
sudo apt install ros-${ROS_DISTRO}-nav2-bringup
# バージョン管理ツールのユーティリティ vcstool のインストール
 sudo apt install python3-vcstool
  • Turtlebot関連パッケージのインストール
# ワークスペースの作成
mkdir -p ~/turtlebot3_ws/src
# ディレクトリの移動
cd ~/turtlebot3_ws
# 関連パッケージの取得
wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos
vcs import src < turtlebot3.repos

vcs import src < turtlebot3.reposの後、こんな感じになればOK
(私の場合、体感で5分くらいかかった)
f:id:GriffonMK:20201029235612p:plain

# ビルド
colcon build --symlink-install

謎のエラー
1 package had stderr output: dynamixel_sdk
いったんここで中断
f:id:GriffonMK:20201030000433p:plain

apt list *dynamixel* --installedで確認したらインストールされてない

# 関係しそうなのをインストール
sudo apt install ros-${ROS_DISTRO}-dynamixel*
# もう一度ビルド
colcon build --symlink-install

できた!
f:id:GriffonMK:20201030001435p:plain

echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
source ~/.bashrc
  • ロボットの選択
# burger, waffle, waffle_piから選ぶ
# この例ではwaffle
export TURTLEBOT3_MODEL=waffle
  • 動作確認
ros2 launch turtlebot3_gazebo empty_world.launch.py

なんかエラーっぽいのを吐くが一番初めの起動時だけらしい。
最初の起動時にダウンロードが完了すればエラー出ない。
f:id:GriffonMK:20201030002326p:plain

できたっぽい?
f:id:GriffonMK:20201030002507p:plain

右クリック + ↑でズーム。shift + マウス操作で視点移動
f:id:GriffonMK:20201030002819p:plain

参考にしたページなど

ROS2でSLAM①ROS2インストール

目次

  1. 環境
  2. 手順
  3. 参考にしたページなど

環境

手順

  1. VirtualBoxUbuntuを起動
    VirtualBoxへのUbuntuインストールは↓などを参照 qiita.com
  2. ROS2(dashing)のインストール。
    新規の端末(Terminal)を開いて以下のコマンドをバシバシ打っていく。
# ロケールの設定(OSの文字コードをUTF-8に変更)
sudo locale-gen ja_JP ja_JP.UTF-8
sudo update-locale LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8
export LANG=ja_JP.UTF-8
# rosリポジトリの鍵をapt-keyに登録
sudo apt update
sudo apt install curl gnupg2 lsb-release
curl http://repo.ros2.org/repos.key | sudo apt-key add -
# aptのsources.list.dに、ROS2のパッケージリポジトリを追加
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update
# 環境変数の登録
export ROS_DISTRO=dashing
# ROS2(dashing)のインストール
sudo apt install ros-${ROS_DISTRO}-desktop
# ロケールの設定を忘れてるとここでエラーになる
# ビルドシステムのColconをインストール
sudo apt install python3-colcon-common-extensions
# ROS3関連コマンドのタブ補完機能のインストール
sudo apt install python3-argcomplete
# ROSパッケージの依存関係解決ツールをインストール
sudo apt install python-rosdep
sudo rosdep init
rosdep update
# pipのインストール
sudo apt install python-pip
# Pythonでバージョン管理ツールを使用するためのツールvcstoolsをインストール
sudo apt install python3-vcstool
# gitのインストール
sudo apt install git
# Ubuntu起動時に環境変数(ROS_DISTRO=dashing)が登録されるように設定する  
source /opt/ros/${ROS_DISTRO}/setup.bash
echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> ~/.bashrc
# 動作確認
# (止めるときは"Ctrl + c")  
ros2 run demo_nodes_cpp talker

f:id:GriffonMK:20201028004336p:plain


参考にしたページなど

Ubuntu備忘録

このページは随時更新する。
いろいろネタが増えてきたら表にしたりするかも


  • apt-keyとは
    aptパッケージの認証に使用するkeyを管理する。
  • echoとは
    文字列などをシェルに出力するコマンド。
    >>>と組み合わせることでファイルへの出力も可能
    • 使用例①
      echo Hello!
    • 使用例②
      echo World! >> file_x
  • |とは
    複数のコマンドを続けて実行。
    前の処理の出力を後ろの処理の入力にする。
    • 使用例
      curl http://xxx.yyy/zzz.key | sudo apt-key add -
  • ;とは
    複数のコマンドを実行。
    |と違い、別の処理として扱う。
    • 使用例
      (処理A) ; (処理B) ; (処理C)
  • >とは
    上書き保存。
    • 使用例
      ls -a > file_x
  • >>とは
    ファイル末尾に追記。
    • 使用例
      echo Hello >> file_y
  • curlコマンドとは
    データ転送に使用するコマンド。
    様々なプロトコルでダウンロード、アップロードができる。
    • 使用例①
      curlによって"http://xxx.yyy/abc.zip"からabc.zipをダウンロード
      curl http://xxx.yyy/abc.zip
    • 使用例②
      curlによって"http://xxx.yyy/abc.zip"からzbc.zipをダウンロードし、xyz.zipという名前で保存
      curl http://xxx.yyy/abc.zip > xyz.zip
    • 使用例③
      curlによって"http://xxx.yyy/zzz.key"からzzz.keyを入手し、それをapt-key addによってapt-keyのリストに登録する。
      curl http://xxx.yyy/zzz.key | sudo apt-key add -
  • exportとは
    環境変数を追加するコマンド。
    • 使用例
      export ROS_DISTRO=dashing
  • sourceとは
    ファイルに書かれた内容を逐次コマンド実行。
    似たコマンドにbashがあるが、こっちはファイル内の処理で閉じる。
    sourceで実行した処理はファイル外へも影響を与える。
    • 使用例 source setup.bash