docker 上に ROS 2 環境を構築し TurtleBot simulation を動かす

ROS

前回記事では、ubuntu 上での docker 環境構築について説明しましたが、今回は docker 上で ROS 2 環境を構築し、TurtleBot のシミュレーションを動かしていきます。こちらの Qiita 記事を参考にしました。

TurtleBot シミュレーション実行

筆者の環境は以下です。

  • Thinkpad X1 Intel Core i7
  • Ubuntu 24.04

docker-compose.yml と Dockerfile を用意します。github にこれらは載せているので、clone してもよいです(筆者動作確認済み branch は article_7216 であることにご注意ください)。

version: '3.9'

services:
  ros2_nav2:
    build: .
    container_name: ros2_nav2
    network_mode: "host"
    environment:
      - DISPLAY=${DISPLAY}
      - QT_X11_NO_MITSHM=1
      - XAUTHORITY=/root/.Xauthority
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - $XAUTHORITY:/root/.Xauthority
      - ./workspace:/workspace:rw
    stdin_open: true
    tty: true
FROM ros:humble

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update && apt install -y \
    vim \
    ros-humble-rviz2 \
    ros-humble-navigation2 \
    ros-humble-nav2-bringup \
    ros-humble-turtlebot3-gazebo && \
    rm -rf /var/lib/apt/lists/*

RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc

WORKDIR /workspace

CMD ["bash"]

上記ファイルがあるディレクトリで docker container をビルドします(所要時間 11 分程度)。

docker compose up -d --build

docker container の中に入り、TurtleBot の Gazebo シミュレータを起動します。

docker exec -it ros2_nav2 bash
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/$ROS_DISTRO/share/turtlebot3_gazebo/models
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

以下が表示されたら(所要時間 3 分程度です。Gazebo が TurtleBot3 のモデルやワールドファイルをダウンロードしたり、物理エンジンやセンサ等のプラグインを初期化したりするのに結構時間がかかります。)

Ctrl-C で Gazebo を終了し、下記コマンドを実行します。

ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False

以下の画面が表示されるはずなので、

動画のように 2D Pose Estimate でロボットの自己位置を合わせましょう。Nav2 Goal をクリックしてゴールの位置を指定すれば、TurtleBot がゴールに向かって動き出すのを確認できるはずです。

ROS2 で TurtleBot を動かしてみる(2D Pose Estimate と Nav 2 Goal の実行)

docker 関連ファイル説明

docker 関連ファイルのそれぞれの行がどのような意味なのかを説明します。

docker-compose.yml

Docker コンテナの GUI(X11)をホストと安全に共有する(rviz 等が docker container 内から開けるようになります)。

    environment:
      - DISPLAY
      - QT_X11_NO_MITSHM=1
      - XAUTHORITY=/root/.Xauthority
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix  # X11 ソケットの共有
      - $XAUTHORITY:/root/.Xauthority  # X11 認証情報の共有

Dockerfile

ベースは ROS 2 humble

FROM ros:humble

必要な ROS の機能のインストール

RUN apt update && apt install -y \
    vim \
    ros-humble-rviz2 \
    ros-humble-navigation2 \
    ros-humble-nav2-bringup \
    ros-humble-turtlebot3-gazebo

docker container 起動時に毎回 setup.bash を実行しなくて済むようにする。

RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc

コメント