ROSをDockerで動かそう
ROSを使ってチームでロボットを開発していると,
環境やヴァージョンによって予期せぬトラブルに見舞われることがある.
そこで実行するだけでROS環境をDocker上に構築するスクリプトを書いてみた.
Dockerとは
雑に言うとめっちゃ小さい仮想環境.
仮想のLinuxなので感覚的にはWSLに近い気がするけど,
簡単に構築でき,簡単に削除でき,同じ環境を配布しやすいかな.
VirtualBoxみたいにOS全部再現します!ってわけじゃないから軽量.
Dockerfileで環境構築
Dockerfileは環境構築の設計図で,このファイルを置いてあるディレクトリで
build & runすると構築される.
今回書いたDockerfileはこんな感じ
# install ros image as base image FROM ros:melodic # always run at initializing OS RUN apt-get update && apt-get install -y ENV ROS_MASTER_URI=http://master:11311
FROM ~で使用するimageを選択.
imageは基礎となる環境かな.これを元にコンテナを作る.
ROS imageはここに置いてあります.
RUN ~はimageが起動したら最初に実行されるコマンド
ENVは環境変数.
rosのノードごとにコンテナを作っており,コンテナ間で通信するために用意.
roscoreがわかるように.
Docker build & run
とりあえず実行してみる.
docker build -t rosimage ./ # カレントディレクトリにあるDockerfileからrosimageと言う名前で新しいimageを作成 docker run -it rosimage # rosimageからコンテナを作成(コンソールに結果表示)
シェルスクリプト化
#!/usr/bin/bash echo "Welcome to ROS master node !!" echo "Buiud and lanch ..." docker build -t rosimage ./ # bulid 'rosimage' image using Dockerfile in current DIR=$(cd $(dirname $0); pwd) docker run -it \ -v $DIR"/.ros/:/root/.ros/" \ -v $DIR"/catkin_ws/:/root/catkin_ws/" \ --device=/dev/video0:/dev/video0 \ rosimage # run ros on docker image exit 0
-vオプションでローカルとDocker上のフォルダを連動させている.
--deviceオプションでdocker上でもwebcamなどのデバイスを使えるようにしている.
winとかmacのカメラにはアクセスできなかった気がする.
基本的には以上でOKかな.
roscore専用のスクリプトを作っていたりするレポジトリは下記に.
https://github.com/Libra23/ROSDocker
Dockerfileとdocker runで似た機能あるなと思ったけど 開発者と作業者の区別している模様.