はじめに
本格的にROS2を使いたいと思っていた所、ROS Japan UG #42 LT大会の資料にずっとやりたかったGUIが使えるコンテナ環境構築のやり方があったので実際にやってみる。
方針
- 資料で説明されていたやり方の1つである「Ubuntuマシン+DockerでX11経由でGUIを利用」を採用する。
- 他にもWEBブラウザ経由(参考)というやり方があるが、気軽に試す分にはこれが一番簡単。
- ROS2 Foxyでrviz2とgazeboが起動することを確認する。
- 念の為、ROS1 noeticでも可能か確認する。
環境
-
ホストPC
- OS: Ubuntu 18.04
- GPU: Geforce RTX 2060
-
nvidiaドライバのバージョン
user@user-ubuntu:~$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.80 Driver Version: 460.80 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| 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 GeForce RTX 2060 Off | 00000000:0A:00.0 On | N/A |
| 49% 36C P5 22W / 160W | 1232MiB / 5931MiB | 26% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
手順
- Python製Docker CLIラッパーのosrf/rockerを利用することで手軽に環境を構築できるようなのでこれを使う。
- まずnvidiaドライバーとnvidia container toolkitをインストールしてなければインストール。
- 今回ドライバのバージョンは動作確認されているものと違うものを使ったが現状問題なく動作している。
- 後はインストールとテストを行う
- 基本はREADMEに沿ってやればいいがいくつかハマった場所がある。
- rockerインストール時の注意
- pipコマンドを直打は現在推奨されていないので記述が古い。
- 正式には
python3 -m pip install
のような書き方にする。
- 正式には
- rockerインストール時
Failed building wheel for empy
というエラーがでる。- wheelをpipでインストールすれば解決
- pipコマンドを直打は現在推奨されていないので記述が古い。
- テスト実行
- 以下のテスト実行コマンドが動作しない。
nosetests-3.4 --with-coverage --cover-package rocker
- 後述のサンプル実行に影響なさそうなので、原因は後で調べるとして今は無視。
- 以下のテスト実行コマンドが動作しない。
- サンプル実行
- サンプルコマンドを実行するとrivz2やgazeboが実行できる。
- ただし、droneと飛行機のサンプルはエラーがでて動作しなかった。
- マウントが失敗したというエラーがでる。
- 対策が分からなかったため後で調査する。
- foxyで実行
- サンプルにfoxyがなかったが以下のコマンドを実行してrviz2が起動することを確認。
sudo rocker --nvidia --x11 --user --home osrf/ros:foxy-desktop rviz2
- gazebo起動についてはコンテナ内でgazeboをインストールしてから実行。
- コンテナ内に移動:
sudo rocker --nvidia --x11 --user --home osrf/ros:foxy-desktop
- パッケージを最新に更新:
sudo apt update
- gazeboインストール:
sudo apt install gazebo11 ros-foxy-gazebo-ros-pkgs
- gazeboコマンドを入力して起動したらOK
- コンテナ内に移動:
- サンプルにfoxyがなかったが以下のコマンドを実行してrviz2が起動することを確認。
- noeticで実行
- サンプルにnoeticはなかったがrvizはroscoreを起動しないといけないため以下の手順で動作を確認。
- コンテナ内に移動:
sudo rocker --nvidia --x11 --user --home osrf/ros:noetic-desktop-full
- roscoreとrvizを実行:
roscore & rviz
- rvizが起動したらOK。
- コンテナ内に移動:
- gazebo起動は以下のコマンドで起動したらOK
sudo rocker --nvidia --x11 --user --home osrf/ros:noetic-desktop-full gazebo
- サンプルにnoeticはなかったがrvizはroscoreを起動しないといけないため以下の手順で動作を確認。