tshell_blog

ソフトウェアと車輪がついた乗り物のはなし

ROS2開発環境をDockerで構築する

何番煎じであろうと私はまだ煎じていない

ROS2の勉強始めよっかな〜と思い立ったので ROS2ではじめよう 次世代ロボットプログラミングの第2章を参考にROS2環境をDockerで構築してみました。

セットアップ方法を見ていると「ROS1環境があるところにROS2をセットアップすると環境変数とか依存関係で大変なことになる場合があります」というようなことが書いてあって,そのままインストールするとあとで大変になりそうなのでDockerイメージとして構築してみます。

Dockerfileの作成とイメージのビルド

以下のようなDockerfileを作成します。

# docker build -t ros2:dashing .
FROM ubuntu:18.04
ENV DEBIAN_FRONTEND noninteractive

ENV ROS_DISTRO dashing

# ロケールのセットアップ
RUN apt-get update && apt-get install -y locales && \
    dpkg-reconfigure locales && \
    locale-gen ja_JP ja_JP.UTF-8 && \
    update-locale LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8
ENV LC_ALL   ja_JP.UTF-8
ENV LANG     ja_JP.UTF-8
ENV LANGUAGE ja_JP.UTF-8

# APTソースリストの設定
RUN apt-get update && \
    apt-get install -y curl gnupg2 lsb-release && \
    curl http://repo.ros2.org/repos.key | apt-key add - && \
    sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu \
    `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list' && \
    apt-get update

# ROS2パッケージのインストール
RUN export ROS_DISTRO=dashing && \
    apt-get install -y ros-$ROS_DISTRO-desktop \
    python3-colcon-common-extensions python3-rosdep python3-argcomplete && \
    rosdep init && \
    rosdep update

## 環境設定
RUN    echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc

Dockerfileを保存したディレクトリの中で以下を実行します。

$ docker build --rm -t ros2:dashing .

30分以上かかるので気長に待ちます。

動作確認

demo_nodes_cppに含まれるTalkerとListenerを使って動作確認してみます。
うまく行けばTalkerで出力された内容がListenerで受信されることを確認できます。

ターミナルを2つ開き,それぞれで以下のコマンドを実行してコンテナを起動します。

$ docker run --rm -it ros2:dashing

Listenerの起動

一方のターミナルで以下のコマンドを実行し,Listenerを起動します。

# ros2 run demo_nodes_cpp listener

Talkerの起動

もう一方のターミナルで以下のコマンドを実行し,Talkerを起動します。

# ros2 run demo_nodes_cpp talker

表示例

Talkerの表示例
f:id:tshell:20200213174147p:plain

Listenerの表示例
f:id:tshell:20200213174223p:plain

以上のようにTalkerの内容がListenerに反映されれば正常に動作しています。