Help us understand the problem. What is going on with this article?

Docker for MacでROSの亀さんと戯れた

この記事について

ROSの初心者が、あろうことかほぼ使ったことないDocker上でROSのプログラミングに挑戦しようとして、いきなりチュートリアルでくじけそうになりながらもなんとか亀さんを動かすまでの記録です。

なぜDocker上でROSを動かすのかというと、

  • MacにもROSはあったりするけどUbuntuほどサポートされていない。
  • Dockerでやれば他の人とも簡単に開発環境を共有できる
  • Mac上の環境がぐちゃぐちゃにならない

などの理由があります。

この記事はロポットプログラミングやりたいけどMacから離れられない人に役に立つでしょう。

初心者のため間違いなどもあると思いますが、お気付きでしたらご指摘ください。

参考URL

Using ROS with Docker in macOS

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

前準備

Docker for macをインストールして立ち上げておく

Docker Community Edition for MacをDocker storeからダウンロードしてインストールします。立ち上げると画面右上に鯨のような船のアイコンが表示されます。

Xquartzをインストールしておく

ここから.dmgファイルをダウンロードしてインストールします。起動したら環境設定->セキュリティと進んでネットワーク・クライアントからの接続を許可にチェックを入れます。
Docker上でGUIを動かすのに使います。

コンテナ一つで亀さんを動かす

参考URLにあげたやり方ではどちらもコンテナ一つでノードを動かしていて、ネットワークの設定をするのが面倒です。
ここではdocker runの代わりにdocker execを使ってネットワークの設定なしにチュートリアルの亀さんを動かしてみます。

Dockerの準備

Dockefile

ワーキングディレクトリに以下のようなDockerfileを準備します。

# Dockerfileの中身
FROM ros:kinetic

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

Docker image をbuildする

以下のコマンドでdocke imageをbuildします。

docker build -t ros-tutorials .

Docker runでコンテナを起動する

Docker runでコンテナを起動して、roscoreでmasterノードを立ち上げます。
ただし、ここでは亀さんが出てくる窓を映すためにディスプレイの設定をする必要があります。
また、後で同じコンテナに入るために--nameオプションでわかりやすい名前をつけておきます。

以下のコマンドでディスプレイを設定しmasterノードを立ち上げます。

open -a Xquartz
ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
echo $ip
xhost + $ip
docker run --rm -e DISPLAY=$ip:0 --name ros-test ros-tutorials roscore

起動したコンテナでturtlesimを実行する

上のコマンドを実行するとターミナルは入力を受け付けなくなるので、新しいターミナルを立ち上げturtlesimを実行します。

# hostのMac内
docker exec -it ros-test bin/bash
# 上で立ち上げたコンテナ内部
source opt/ros/kinetic/setup.bash
rosrun turtlesim turtlesim_node

これで画面に亀が出てきます。最後に同じようにしてキーボード入力を受け付けるノードを立ち上げます。

# hostのMac内
docker exec -it ros-test bin/bash
# 上で立ち上げたコンテナ内部
source opt/ros/kinetic/setup.bash
rosrun turtlesim turtle_teleop_key

最後に入力したターミナルをアクティブにして上下左右キーを押せば亀さんが動くはずです。
亀さんのいる窓をアクティブにしても亀さんは動きませんので注意しましょう。

わざわざdocker execするたびにsource opt/ros/kinetic/setup.bashするのも面倒なのなんかいい方法ありませんかね。

SLAMがやりたくて始めたROSですが、先はまだまだ長そうです。

ryo_21
人に疲れてロボットと戯れるデータサイエンティスト(笑)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした