この記事について

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からダウンロードしてインストールします。立ち上げると画面右上に鯨のような船のアイコンが表示されます。

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

ここから.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 Xqurtz
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 turtlesim_teleop_key

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

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

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

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.