🤖

Docker on MacとFoxgloveで構築するROS2環境

に公開

はじめに

ROS2(Robot Operating System 2)は、ロボット開発のためのオープンソースフレームワークです。しかし、ROS2は主にLinux環境を前提としており、macOSでは直接GUIツールを使用することができません。

MacでROS2を始めようとしたとき、多くの人が以下のような課題に直面します:

  1. GUIツールの制約: RVizやGazeboなどの主要なGUIツールはLinux専用

    • VNCやX11フォワーディングを使っても、もたついて快適ではない
    • レスポンスが悪く、開発効率が落ちる
  2. ハードウェア投資のハードル: Linux PCを買うのはコストがかかる

    • 既存のMac環境を活用したい
    • 追加のハードウェア投資を避けたい
  3. 環境の汚染とパフォーマンス: ホスト環境に直接インストールするとシステムが汚れる

    • 仮想マシンを使うと、リソース消費が大きくてパフォーマンスが悪い
  4. 再現性の問題: 環境構築手順が複雑で、再現が困難

本記事では、これらの課題を解決するために、Dockerコンテナ上でROS2環境を構築し、Webベースの可視化ツールであるFoxglove Studioを使用する方法を紹介します。この構成により、VNCのようなもたつきもなく、追加のハードウェア投資も不要で、既存のMac環境をそのまま活用できます。

環境構築

プロジェクト構成

ros2_foxglove_docker_env/
├── Dockerfile              # ROS2環境の定義
├── docker-compose.yml      # コンテナ設定
├── workspace/
│   └── src/                # ROS2パッケージ(ホストと共有)
│       ├── talker_py/      # Pythonサンプル
│       ├── listener_py/    # Pythonサンプル
│       └── cpp_talker/    # C++サンプル
└── README.md

Dockerfileのポイント

FROM ros:humble

# Python/C++開発環境
RUN apt-get update && apt-get install -y \
    python3-pip \
    python3-colcon-common-extensions \
    build-essential \
    cmake \
    ros-humble-rclcpp \
    ros-humble-foxglove-bridge \
    ...
  • ROS2 Humbleをベースイメージとして使用
  • PythonとC++の両方の開発環境を用意
  • Foxglove Bridgeをインストール

docker-compose.ymlのポイント

services:
  ros2:
    build: .
    volumes:
      - ./workspace/src:/workspace/src  # ソースコードのみ共有
    ports:
      - "8765:8765"  # Foxglove WebSocket
    environment:
      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID:-0}
  • workspace/srcのみをホストと共有(build/install/logはコンテナ内のみ)
  • ポート8765を公開(Foxglove Studio接続用)

セットアップ手順

1. コンテナの起動

docker-compose up -d --build

2. コンテナに入る

docker-compose exec ros2 bash

3. ワークスペースのビルド

cd /workspace
source /opt/ros/humble/setup.bash
colcon build

実際の使い方

Pythonパッケージの実行

# コンテナ内で
source install/setup.bash
ros2 run talker_py talker

C++パッケージの実行

# コンテナ内で
source install/setup.bash
ros2 run cpp_talker talker

Foxglove Bridgeの起動

別ターミナルで:

docker-compose exec ros2 bash -c "source /opt/ros/humble/setup.bash && ros2 run foxglove_bridge foxglove_bridge"

Foxglove Studioでの可視化

  1. https://studio.foxglove.dev にアクセス
  2. 「Open Connection」→「Foxglove WebSocket」を選択
  3. URL: ws://localhost:8765 を入力
  4. /chatterトピックを選択して可視化

Foxgloveでは可視化したいものに合わせてパネルを選択する。

raw_messageでトピックの中身確認

Log

Topic GraphでNodeやトピックの依存関係を確認できる。

まとめ

本記事では、DockerとFoxglove Studioを使用してMac環境でROS2開発環境を構築する方法を紹介しました。

この構成により:

  • ✅ Mac環境でもROS2開発が可能
  • ✅ 環境の分離と再現性が確保される
  • ✅ Webベースの可視化ツールで快適に開発できる
  • ✅ PythonとC++の両方のパッケージを開発可能

所感
まだトピックの可視化しか試していないが、Foxgloveとの連携が思ったよりも簡単すぎて感動。
gazeboを使ったリアルタイムのシミュレーションをする際もこんな簡単にできるのかはわからないが、これほど快適で簡単なら、VNCをしてまでRviz使うのはもはや悪手なのではと思った。
とは言いつつも、やはりLinux実機でやりたいのでお金貯めないと、、

まだまだロボティクスの勉強を始めたばかりなのでご指摘大歓迎です。

参考リンク

Discussion