MacにDocker Desktopをインストールし、ROS 2 HumbleのコンテナをVS Codeから操作するまでの手順を紹介します。最後に、ROS 2のサンプルノードであるtalkerとlistenerを起動し、メッセージが届くことを確認します。
実はWindows PC上のIsaac Simでロボットのシミュレーションを動作させてROS2によってPublishし、それを別PCでSubscribeしてRviz上に表示するまでを動作させたいと考えています。ただ、自宅にRvizを動作させるだけのパワーを持つPCがMacしかなかったので、せっかくなら、Mac上でROS2を動かすところまでまずはチャレンジしてみよう!というのがきっかけです。
今回の記事ではApple Silicon搭載Macを例にします。Docker DesktopとVS CodeはMacにインストールし、ROS 2はDockerコンテナの中で動かします。
この記事の流れ
- Docker DesktopをMacにインストールする
- ROS 2 HumbleのDockerイメージを取得してコンテナを起動する
- VS Codeから起動中のコンテナを開く
- talkerとlistenerでROS 2の動作を確認する
1. Docker Desktopをインストールする
Docker公式のインストールページから、Macのチップに合ったDocker Desktopをダウンロードします。Apple Siliconの場合は「Mac with Apple silicon」用のインストーラーを選びます。
ダウンロードした Docker.dmg を開き、DockerアイコンをApplicationsフォルダーへドラッグします。その後、ApplicationsフォルダーからDockerを起動し、画面の案内に従って初期設定を完了します。
Docker Desktopが起動したら、ターミナルを開いて次のコマンドを実行します。
docker version
Dockerのクライアントとサーバーのバージョンが表示されれば、Dockerを利用できます。続けて、MacのCPUアーキテクチャを確認します。
uname -m
Apple Silicon搭載Macでは通常 arm64 と表示されます。
2. ROS 2 Humbleコンテナを起動する
この記事では、OSRFが公開している osrf/ros:humble-desktop イメージを使います。元資料の構成に合わせ、Apple Silicon上でもamd64版のイメージを使うため、Dockerコマンドに --platform linux/amd64 を指定します。
まず、作業用フォルダーをMac上に作成します。
mkdir -p ~/ros2_ws/src
続いてROS 2 Humbleのイメージを取得します。
docker pull --platform linux/amd64 osrf/ros:humble-desktop
イメージを取得したら、次のコマンドでコンテナを起動します。
docker run -it --rm \
--platform linux/amd64 \
--name ros2_humble \
-v ~/ros2_ws:/ros2_ws \
osrf/ros:humble-desktop \
bash
コマンドが実行されると、ターミナルのプロンプトがコンテナ内のものに変わります。ROS 2の環境を読み込み、ディストリビューション名を確認します。
source /opt/ros/humble/setup.bash
printenv ROS_DISTRO
humble と表示されれば、コンテナ内でROS 2 Humbleを利用できています。
-v ~/ros2_ws:/ros2_ws は、Mac上の ~/ros2_ws とコンテナ内の /ros2_ws を共有する設定です。コンテナを終了しても、このフォルダー内のファイルはMac側に残ります。
3. VS Codeからコンテナを開く
MacにVS Codeをインストールしていない場合は、VS Code公式ダウンロードページからインストールしてください。続いて、VS CodeのExtensionsビューでMicrosoft製の「Dev Containers」拡張機能をインストールします。
コンテナを起動したまま、VS Codeで次の操作を行います。
-
F1または⌘+Shift+Pを押してCommand Paletteを開く -
VS Codeで「File」→「Open Folder...」を選び、
/ros2_wsを開く
VS Codeのウィンドウがコンテナに接続されます。以降、VS Codeの統合ターミナルで実行するコマンドはコンテナ内で動作します。
統合ターミナルを開き、次のコマンドで接続先とROS 2の環境を確認します。
pwd
source /opt/ros/humble/setup.bash
printenv ROS_DISTRO
pwd が /ros2_ws、ROS_DISTRO が humble と表示されることを確認してください。統合ターミナルを新しく開いた場合は、そのターミナルでも source を実行します。
4. ROS 2のtalkerとlistenerを動かす
ROS 2のサンプルノードを2つ起動し、一方が送信したメッセージをもう一方が受信することを確認します。VS Codeの統合ターミナルを2つ開いてください。
1つ目のターミナルで、メッセージを送信するtalkerを起動します。
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
次のような出力が繰り返し表示されれば成功です。
Publishing: 'Hello World: 1'
Publishing: 'Hello World: 2'
2つ目のターミナルで、メッセージを受信するlistenerを起動します。
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp listener
listener側に、次のような出力が繰り返し表示されれば成功です。
I heard: [Hello World: 1]
I heard: [Hello World: 2]
終了するときは、talkerとlistenerそれぞれのターミナルで Ctrl+C を押します。コンテナを終了する場合は、コンテナを起動したターミナルで exit を実行します。起動時に --rm を指定しているため、コンテナ自体は終了時に削除されますが、Macと共有している ~/ros2_ws は残ります。
まとめ
MacにDocker Desktopをインストールすれば、ROS 2をmacOSへ直接インストールせずに、Humbleの環境をコンテナとして利用できます。VS CodeのDev Containers拡張機能で実行中のコンテナへ接続し、talkerとlistenerを動かすことで、ROS 2ノード間のメッセージ通信まで確認できました。
なお、Docker Desktopは個人利用・非商用利用だと無料で使えますが、一定規模以上の会社で商用利用する場合は有料となるのでご注意ください。詳しくは、下記を参照ください。
https://www.docker.com/products/personal/?utm_source=chatgpt.com
ここまで読んでいただき、ありがとうございました。
参考文献
- Docker Docs: Install Docker Desktop on Mac — https://docs.docker.com/desktop/setup/install/mac-install/
- Visual Studio Code: Attach to a running container — https://code.visualstudio.com/docs/devcontainers/attach-container



