本リポジトリは、ROS (1/2)をDockerコンテナ上で開発・実行するための環境を提供する。Setup ROS 2 with VSCode and Dockerを参考にして作成した、各ディストリビューション向けのDockerfileやdocker-compose.ymlを用意してある。GUIにも対応し、rviz等OpenGLアプリケーションも実行できる。vscodeユーザであれば、そのままdevcontainerとして利用することもできる。ホストのディレクトリのマウントやDocker volumeの活用により、ホストの再起動後などにも速やかに環境を復旧できる。
- Ubuntu 20.04 (x86_64, NVIDIA GPU)
- make
- docker
- nvidia-container-runtime (必要な場合)
ディレクトリ構成を次のようにしておく。<ROS workspace>はROSのworkspaceとして扱うディレクトリのパス。例えば~/wsなど。srcの下のpackage_*は無くても良い。
<ROS workspace>
└─ src
├─ package_1
├─ package_2
...
cd <任意のディレクトリ>
git clone git@github.com:amslabtech/amsl_ros_docker_ws.git
cd amsl_ros_docker_ws
make install TARGET_WS=<ROS_workspace> ROS_DISTRO=noetic NVIDIA_DOCKER=false
セットアップ後、ディレクトリ構成は以下のようになる。
<ROS workspace>
├─ cache
│ └─ ROS_DISTRO
│ ├─ build
│ ├─ install
│ └─ log
└─ src
├─ .devcontainer
│ ├─ devcontainer.json
│ ├─ Dockerfile
│ └─ docker-compose.yml
├─ package_1
├─ package_2
...
.devcontainerのあるディレクトリ(<ROS workspace>/src)でcode .すると、vscode起動時にReopen in containerのポップアップが表示される。それを実行すれば、Docker imageをビルドし、コンテナを実行、vscodeからコンテナに接続できる。
<ROS workspace>/srcでdocker compose -f .devcontainer/docker-compose.yml upすれば上記と同様のコンテナが立ち上がる。
上記のように起動したコンテナ内では、パッケージのビルドにcolconを使う。colconはcatkinパッケージでもamentパッケージでもpure cmakeパッケージでも自動判別して適切にビルドしてくれる。そのため対象のパッケージがROS 1でもROS 2でも同じコマンドでビルドできる。コンテナ内ではcbというエイリアスが定義されているので、活用すると良い。
なお、colconコマンドは<ROS workspace>ディレクトリで実行する必要がある。
代表的なコマンドを以下に示す。
cb- ワークスペース全体をビルド
cb --packages-select package_1package_1をビルド
colcon test --pacakges-select package_1package_1のテストを実行