ざきのメモ

2018/04/17

Docker で ROS を動かしてみる

このページでは Docker で ROS のチュートリアルを動かすまでをまとめています。

環境

  • Docker 18.03.0-ce

Dockerfile の記述とコンテナイメージのビルド

まずは、Dockerfile を置くディレクトリをつくっておきましょう。
今回は ROS の Kinetic を動かすので以下のようにディレクトリをつくってみます。

$ mkdir -p docker_ws/ros/kinetic

それでは Dockerfile を記述しましょう。

$ cd docker_ws/ros/kinetic
$ vim Dockerfile
FROM ros:kinetic-ros-base
RUN apt-get update && apt-get install -y \
    ros-kinetic-ros-tutorials \
    ros-kinetic-common-tutorials \
    && rm -rf /var/lib/apt/lists \

つづいてコンテナイメージをビルドします。

$ docker build . --tag ros:ros-tutorials

ROS tutorial を動かす

まず通信用のネットワークを作ります。

$ docker network create ros

それでは、まず roscore を起動しましょう。

$ docker run -it --rm \
--net=ros \
--name master \
ros:ros-tutorials \
roscore

roscore が正しく立ち上がれば成功しています。
では、新しくターミナルを立ち上げてパブリッシャを起動してみましょう。

$ docker run -it --rm \
--net=ros \
--env ROS_HOSTNAME=talker \
--env ROS_MASTER_URI=http://master:11311 \
--name talker \
ros:ros-tutorials \
rosrun roscpp_tutorials talker

配信が始まれば成功しています。
つづいて配信を受け取るサブスクライバを起動してみましょう。

$ docker run -it --rm \
--net=ros \
--env ROS_HOSTNAME=listener \
--env ROS_MASTER_URI=http://master:11311 \
--name listener \
ros:ros-tutorial \
rosrun roscpp_tutorials listener

うまく受信できたでしょうか。この記事はこれで以上になります。
個人的に Docker と ROS はバージョン管理を簡単にし、とても相性がいいものだと考えています。積極的に使っていきたいです。

参考

Copyright © 2017-2021 Ryo Okazaki, all rights reserved.