memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Docker + ROS2(Jazzy) + Gazebo(Harmonic) をいれてみた(M4 MBP)

ネットに書いてあったことをやっただけです。ROS2もGazeboも中身は触っていない状況で書いていますのでその程度の情報ということでお願いします。

やりたかったのはROS2の比較的新しいバージョン(jezzy)をMacにいれてGazeboでシミュレーション結果を見たい、それだけです。仮想環境にUbuntuをいれて。。。もやりましたがどうもうまくいきませんでした。Dockerがお手軽のようです。特にApple Silicon勢にとっては(らしい、という程度です)。

ちなみに、Dockerの手順を公開してくださり検索にもヒットした以下で進めたのですが中途半端な状況(rviz2とか後入れする必要がある)だったので自分で探して以下にたどり着いたところでした。知識があればこの記事をベースに広げられるのでしょうけど。。。そこまでやっている時間がなかったのですんません。私が悪いです。

Dockerコンテナ内でのROS2開発環境の構築とRVizのブラウザ表示(M1 MacBook, M4 MacBook Pro) #GUI - Qiita

以下、やってとりあえず動いた手順です。

まず、Dockerですね。Docker Desktopを使っていたのですがどうもあれ嫌いだったんです。。。簡単そうで野暮ったくて。CUIで動かせた方がかっこいいな。。。とcolimaというのがあることを以下の記事で教えてもらいましたのでそれを使います。

MACのDocker 環境はcolima にしました - じゃあ、おうちで学べる

brew install docker docker-compose
brew install colima

で、Dockerエンジン?を起動します。stopで停止、statusで状況確認ですね。詳細は本家を参照のこと。

colima start

ここからは以下の元ネタの記事の通りになります。

GitHub - Tiryoh/docker-ros2-desktop-vnc: 🐳 Dockerfiles to provide HTML5 VNC interface to access Ubuntu Desktop + ROS 2

このリポジトリをcloneしますね。

git clone https://github.com/Tiryoh/docker-ros2-desktop-vnc.git

そして、READMEにあるとおり以下のコマンドを入力します。最新版のrollingもありましたので入れたいディストロを選択してください。

cd jazzy && docker build -t tiryoh/ros2-desktop-vnc:jazzy .

しばらくしてビルドが成功したらイメージが作成されます。以下で作成されたimageの存在が確認できると思います。

docker images

あとは以下のようにコンテナを起動すれば使えます。もし他のディストロを選択したらjazzyのところが変わる感じですね。ありがたいです。

docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:jazzy

で、最後の最後にブラウザで以下にアクセスすればROS2+rviz2+gazebo(Harmonic)が使えるようです。ありがたいっすね〜。

http://localhost:6080/

色々やってみたいんです。。。ROS面白いですよね。でも、なかなか時間が取れない。やる気の問題ですね。。。とりあえず環境さえできればいつでもできそうです。

おしまい。

■追記 2025/11/23

このあとやったことをメモします。ROS2は以下の本を参照している(学生さんが)ので、せっかくなのでとこの本が提供しているDocker環境も作っておこうかと手順書通りにやってみたんです。

ただ、このイメージがamd を想定しているらしく途中でエラーで止まりました。

しかたがなくarm64用にイメージ作れないかオプションを加えてみたんです。具体的には以下のbuild用のシェルのargsに「--platform linux/arm64」を入れてシェル実行しただけです。Dockerもとりあえず使っている感じでちゃんと理解していません。ネットで調べるととりあえずこれでいいとか。

docker-ros2-desktop-ai-robot-book-humble/build.bash at main · AI-Robot-Book-Humble/docker-ros2-desktop-ai-robot-book-humble · GitHub

#!/bin/bash

args="--platform linux/arm64"
for v in http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY
do
  eval "test -n \"\$$v\" && args=\"\$args --build-arg $v=\${$v}\""
done
echo "args:" $args

docker build \
$* \
$args \
-t airobotbook/ros2-desktop-ai-robot-book-humble \
.

どうもパッケージの組み合わせ?がうまくいきませんでした。arm64用のイメージが取得できない様子でした。jazzyに変えてみてもダメでした。よくわかりません。

しかたがなく、上記の本家のDocker環境に戻しました(消したので再ビルド)。

で、なぜ本家じゃなくこの教科書版にしたかったのかですが、上記の環境ではコンテナ内での作業が保存されない問題があったのでして。とても基本的なことで。。。申し訳ない話しです。教科書版は保存できると学生さんが言っていたのでこれにしようかなと。

ググるとイメージ作成時にDockerfileにVOLUMEを指定する方法の他、コンテナ起動時に-vオプションをつけてホスト側と相互通信できる指定があったのですね。。。今まで使ってきたような気もしますが言われるがまま使ってきたので。

とりあえず以下のようにしてみました。「-v ホスト側:コンテナ側」になります。僕の環境では教科書版にはMac側の~/myfiles/ros/dとコンテナ側の/home/ubuntu/Documentsを同期させる設定にしました。

docker run -p 6080:80 \
--security-opt seccomp=unconfined \
--shm-size=512m \
-e RESOLUTION=1920x1080 \
-v ~/myfiles/ros/d:/home/ubuntu/Documents \
tiryoh/ros2-desktop-vnc:jazzy

具体的な使い方としては、VNCのせいでしょうか、Linuxでのファイル編集がとても使いにくいので、Mac側でSDFファイルをVSCodeで編集し~/myfiles/ros/dに置くとリアルタイムで/home/ubuntu/Documentsに現れるので、そこで以下を実行するとシミュレーション実行ができます。

gz sim -v 4 building_robot.sdf

なんかやっと遊べる環境ができたな。。。という感じです。ROSの情報って歴史があるせいもあってか、ほんと素人が扱うには難しくて理解するまで時間がかかります。

ちなみに、GazeboはLinux以外の環境でもネイティブで実行できるようですね。これも知らなかった。。。要はGazeboでのシミュレーション環境構築で(学生さんが)詰まっているのでROSが動作しなくてもとりあえずいいのかと。これは本家のサイトに書かれている通りにやれば動きました。

Binary Installation on MacOS — Gazebo jetty documentation

ちなみにMacだけ実行方法が変わっています。gz simをサーバーとGUIで別ターミナルで起動しなければならないようです。これが面倒なんですよね。。。Gazeboではなぜかホットリロード?ができないようです。これが面倒くさい。SDFファイルをちょっと修正したあとgz simを再実行する必要があります。なぜホットリロードできないんだろう?これ面倒だという発想がないのかな?それとも技術的な問題か。

インストール(harmonicの場合)

brew tap osrf/simulation
brew install gz-harmonic

アンインストール

brew uninstall gz-harmonic

起動(ターミナル1)

gz sim -v 4 shapes.sdf -s

起動(ターミナル2)

gz sim -v 4 -g 

もしSDFファイルを修正したら、両方のターミナルを停止して再起動する必要があります。めんどくさい。。。絶対こんなことをやっているわけないんだけどなぁ。。。調べても出てこない。

いや。。。ほんとcolima最高です。

■追記 2025/11/23 その2

Gazeboのチュートリアルを進めています。キー入力で自作ロボットを動かすところでつまずきました。チュートリアルに以下の一文がありますがこれがなかなか見過ごしやすい。

Moving the robot — Gazebo jetty documentation

Keyboard Publisher プラグインを手動で起動する必要があるそうです。

手順を以下の画像にしました。これ。。。一度やればわかりますがわかんねーよ。。。という感じです。GUIのアフォーダンスがいまいち過ぎる。。。開発者の方すいません。。。でも。

3ドットを押します。

メニューが出てきますが、この、これが何の集まりなのかわかりません。。。想像もつきません。慣れの問題でしょう。

検索窓にkeyとタイプすると候補が出てきます。

あとは選択すると右ペインにKeyPublisherのインスペクタっぽいものが現れます。これでGazeboにプラグインがローディングされたことになるらしいです。わからないです。。。

どうでもいいことついでに。VNC環境でLinuxの解像度を変更したけど効かないという現象がありました。これはVNCの設定が悪かったようです。デフォルト?は以下の画像でリモートってなっていると思いますが、これをローカルに変えるとLinux側の設定した解像度になります。解像度がとても低い状態ではGazebo全体が見れないので非常に使いにくかったのですが。。。これでやっとまともになりました。どうでもいいレベルの話しですが躓いたので書いておきます。