LoginSignup
2
1

More than 1 year has passed since last update.

docker-composeでROSノードを起動する (ROS Noetic対応)

Posted at

はじめに

docker-composeを使用して複数コンテナでROSノードを起動する機会があったので方法をメモ

docker-composeのインストールはこちら
https://docs.docker.com/compose/install/

実行環境

ホストPCのOS : ubuntu20.04.4LTS
DockerコンテナのROS : Noetic
docker-composeのバージョン:1.29.2

作成するもの

ros_tutorialsのtalkerとlistenerを別々のコンテナで実行してコンテナ間で通信するサンプルを作成する。

Dockerfileの作成

ベースイメージのros:noeticにはros_tutorialはインストールされていないため、ros_tutorialをインストールするDockerfileを作成する

こちらの記事のDockerfileをNoetic用に変更
https://qiita.com/Leonardo-mbc/items/cfd38a4fae8667593cf1

FROM ros:noetic-ros-core

RUN apt-get update && apt-get install -y
RUN apt-get install -y ros-noetic-ros-tutorials \
    ros-noetic-common-tutorials \
    && rm -rf /var/lib/apt/lists/

Dockefileをbuildしてイメージの作成

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

docker-compose.ymlファイルの作成

コンテナを作成して実行するためのdocker-compose.ymlファイルを作成する。
以下のチュートリアルを参考に作成

docker-compose.yml
version: '3'

networks:
  ros:
    driver: bridge

services:
  ros-master:
    image: ros:noetic-ros-core
    hostname: ros-master
    command: roscore
    networks:
      - ros
    restart: always

  talker:
    image: ros:ros-tutorials
    depends_on:
      - ros-master
    hostname: talker
    environment:
      - "ROS_HOSTNAME=talker"
      - "ROS_MASTER_URI=http://ros-master:11311"
    command: rosrun roscpp_tutorials talker       
    networks:
      - ros
    restart: always

  listener:
    image: ros:ros-tutorials
    depends_on:
      - ros-master
    hostname: listener
    environment:
      - "ROS_HOSTNAME=listener"
      - "ROS_MASTER_URI=http://ros-master:11311"
    command: rosrun roscpp_tutorials listener
    networks:
      - ros
    restart: always

実行

$ docker-compose up 

バックグラウンドで実行

$ docker-compose up -d

以下のようなメッセージが出ていれば成功

listener_1    | [ INFO] [1652702560.567117299]: I heard: [hello world 122]
listener_1    | [ INFO] [1652702560.667229181]: I heard: [hello world 123]
listener_1    | [ INFO] [1652702560.767135910]: I heard: [hello world 124]
listener_1    | [ INFO] [1652702560.867152489]: I heard: [hello world 125]
talker_1      | [ INFO] [1652702555.667214803]: hello world 73
talker_1      | [ INFO] [1652702555.766609058]: hello world 74
talker_1      | [ INFO] [1652702555.866571646]: hello world 75
talker_1      | [ INFO] [1652702555.966563110]: hello world 76

docker-compose.yamlファイルの説明

以下yamlファイルの中身の説明

docker-composeで作成するコンテナは以下の3つ

  • ros-master : ROS masterにするコンテナ roscoreだけ実行する
  • talker : tutorials talkerを実行するコンテナ
  • listener : tutorials listenerを実行するコンテナ

以下でdocker-composeで使用するネットワークの作成

docker-compose.yml
networks:
  ros:
    driver: bridge

talkerを実行する部分
depends_on オプションにros-masterを指定することでros-masterが起動した後にtalkerコンテナが起動する。
environment オプションでROS_HOSTNAMEとROS_MASTER_URIの設定。
listenerも同様。

docker-compose.yml
  talker:
    image: ros:ros-tutorials
    depends_on:
      - ros-master
    hostname: talker
    environment:
      - "ROS_HOSTNAME=talker"
      - "ROS_MASTER_URI=http://ros-master:11311"
    command: rosrun roscpp_tutorials talker       
    networks:
      - ros

参考文献

Docker + ROS(kinetic)でチュートリアル

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1