【Docker】ROSのcatkinワークスペースを構築するDockerfileの書き方

DockerfileからROSのcatkinワークスペース環境を構築する方法をご紹介します。

Dockerfile

専用のディレクトリを作ります。その中に"Dockerfile"という名前のファイルを作り、以下をコピペします。ちなみに、Dockerfileには拡張子が必要ないです。

hoge/
 ┗ Dockerfile

########## Pull ##########
# FROM ros:kinetic #←こっちでもok FROM osrf/ros:kinetic-desktop-full ########## ROS setup ########## RUN mkdir -p /home/ros_catkin_ws/src && \ cd /home/ros_catkin_ws/src && \ /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_init_workspace" && \ cd /home/ros_catkin_ws && \ /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_make" && \ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc && \ echo "source /home/ros_catkin_ws/devel/setup.bash" >> ~/.bashrc && \ echo "export ROS_PACKAGE_PATH=\${ROS_PACKAGE_PATH}:/home/ros_catkin_ws" >> ~/.bashrc && \ echo "export ROS_WORKSPACE=/home/ros_catkin_ws" >> ~/.bashrc ######### initial position ########## WORKDIR /home/ros_catkin_ws

解説

FROM osrf/ros:kinetic-desktop-full

土台となる既存のイメージを指定します。
“ros:kinetic”は素のROSですが、”osrf/ros:kinetic-desktop-full”にはrviz等の基礎的なパッケージが既に用意されています。
また、他のディストロを指定したい場合は、kineticの部分を書き換えればokです(indigo、melodicなど)。


Dockerfile内でのROSコマンド

Dockerfile内でROSコマンド(catkin_init_workspace、catkin_makeなど)を実行するには、毎度ROSのsetupを以下のように指定する必要があります。

RUN /bin/bash -c "source /opt/ros/kinetic/setup.bash;(ROSコマンド)"

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Dockerfile内でsetup.bashを指定しても、コンテナ内では無効になっているので、起動と同時に実行されるよう、bashrcに追加しておくと便利です。


echo "export ROS_WORKSPACE=/home/ros_catkin_ws" >> ~/.bashrc

コンテナ内において、roscdコマンドでワークスペースのディレクトリに移動できるように設定しています。


使い方

イメージのビルド

$ cd (上記のDockerfileがあるディレクトリ)
$ docker build -t ros_kinetic:latest .

イメージの名前(ros_kineticなど)は任意です。


コンテナのラン

$ docker run --rm -t -i ros_kinetic:latest

このコマンドでDockerコンテナ内に入れます。


さいごに

Dockerfileはややこしい部分が多いですが、使いこなせると便利です。
少しでも参考になれば幸いです。

以上です。


Dockerの基礎が固まっていないあなたへ

私がDockerの基礎を勉強した本を載せておきます。

Amazonで試し読みする(無料)

Ad.