前回記事では、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 がゴールに向かって動き出すのを確認できるはずです。
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
コメント