0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

microROS-AgentとrqtをColima上のDocker Containerで動かす(Apple Silicon対応)

Last updated at Posted at 2025-10-11

概要

macOS上でmicroROS-AgentをColima上のDockerで動かす手順を説明します。

動作環境

  • MacBook Pro (14-inch, 2023.11)
  • Apple Silicon M3
  • macOS Sequoya 15.7.1
  • ROS2 Kilted

Colimaをインストール

Docker Desktopからその他へ乗り換えた人も多いかと思います。ここではColima導入を簡単に手順を説明します。

$ brew install colima docker docker-compose docker-buildx

動作確認

$ colima start --arch aarch64 --cpu 8 --memory 16 --disk 100
$ docker version
Client: Docker Engine - Community
 Version:           28.5.1
 API version:       1.47 (downgraded from 1.51)
 Go version:        go1.25.2
 Git commit:        e180ab8ab8
 Built:             Wed Oct  8 02:50:32 2025
 OS/Arch:           darwin/arm64
 Context:           colima

Server: Docker Engine - Community
 Engine:
  Version:          27.4.0
  API version:      1.47 (minimum version 1.24)
  Go version:       go1.22.10
  Git commit:       92a8393
  Built:            Sat Dec  7 10:39:01 2024
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.24
  GitCommit:        88bf19b2105c8b17560993bee28a01ddc2f97182
 runc:
  Version:          1.2.2
  GitCommit:        v1.2.2-0-g7cb3632
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

$ docker compose version
Docker Compose version 2.40.0

$ docker buildx version
github.com/docker/buildx v0.29.1 Homebrew

$ colima version
colima version 0.9.1
git commit: 0cbf719f5409ce04b9f0607b681c005d2ff7d94a

runtime: docker
arch: aarch64
client: v28.5.1
server: v27.4.0

$ colima stop

サービスとして起動します。ログインまたはブート時に自動実行されます。

$ brew services start colima

サービスをストップします。ログインまたはブート時に自動実行を無効にします。

$ brew services stop colima

サービスとして起動します。

$ brew services run colima

サービスを停止します。ログインまたはブート時に自動実行は変更しません。

$ brew services kill colima

microROS-AgentとrqtをColima上のDocker Containerで動かす

ROS2 KiltedをインストールしたDockerイメージを使います。docker-compose.yaml に2行追加します。(元のyamlファイルがどこだったかメモを忘れました。)

DISPLAYは、ホスト側のmacOSのXQuartzで表示するための設定です。

LIBGL_ALWAYS_INDIRECTを設定すると、libGL はハードウェア アクセラレーションではなく必ず間接レンダリングを使うようになります。

docker-compose.yaml
version: "2.1"

services:
  micro-ros-agent:
    image: microros/micro-ros-agent:kilted
    container_name: micro-ros-agent
    network_mode: host
    stdin_open: true
    tty: true
    environment:
      - ROS_DOMAIN_ID=8
    ports:
      - 8888:8888/udp
    command: udp4 --port 8888 --verbose 6

  rqt:
    image: osrf/ros:kilted-desktop
    container_name: rqt-visualizer
    network_mode: host
    ipc: host
    pid: host
    tty: true
    privileged: true
    device_cgroup_rules:
      - 'c 189:* rmw'
    environment:
      - ROS_DOMAIN_ID=8
+      - DISPLAY=host.docker.internal:0
      - QT_X11_NO_MITSHM=1
+      - LIBGL_ALWAYS_INDIRECT=1
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
    command: bash -c "source /opt/ros/kilted/setup.bash && rqt"

XQuartz

XQuartzのインストール

$ brew install xquartz
$ open -a XQuartz

XQuartzの設定

  • XQuartzのメニューからXQuartz設定を選択
  • セキュリティタブを開き、ネットワーク・クライアントからの接続を許可にチェックを入れる
  • XQuartzを再起動

ターミナルでxhostを実行

コンテナのGUIをホスト側で表示できるように許可します。

$ xhost +localhost

XQuartzの設定

初期状態を確認します。

$ defaults read org.xquartz.x11
{
    "NSWindow Frame x11_apps" = "395 457 454 299 0 0 1800 1125 ";
    "NSWindow Frame x11_prefs" = "1080 195 584 369 0 0 1800 1125 ";
    SUHasLaunchedBefore = 1;
    SULastCheckTime = "2025-09-29 14:30:43 +0000";
    "app_to_run" = "/opt/X11/bin/xterm";
    "cache_fonts" = 1;
    "done_xinit_check" = 1;
    "enable_iglx" = 0;
    "login_shell" = "/bin/sh";
    "no_auth" = 0;
    "nolisten_tcp" = 0;
    "startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}

古い情報ではorg.macosforge.xquartz.X11になっていますが、現在はorg.xquartz.X11です。

xtermを起動しないようにします。(これはお好みで設定してください。)

$ defaults write org.xquartz.X11 app_to_run /usr/bin/true

Indirect GLX を有効にします。

$ defaults write org.xquartz.X11 enable_iglx -bool true

glxgearsをテスト実行

glxgearsを動かしてみます。

Dockerfile

Dockerfile
FROM alpine

RUN apk --no-cache add mesa-demos

CMD ["glxgears"]

ビルド

$ docker build -t glxgears .

エラーはでますが動きました。

$ docker run --rm -e DISPLAY=host.docker.internal:0 -v ~/.Xauthority:/root/.Xauthority glxgears
No matching fbConfigs or visuals found
glx: failed to create drisw screen

LIBGL_ALWAYS_INDIRECTを設定すると、エラーは出なくなる。

$ docker run --rm -e DISPLAY=host.docker.internal:0 -e LIBGL_ALWAYS_INDIRECT=1 -v ~/.Xauthority:/root/.Xauthority glxgears

glxgears.png

ソフトウェアでレンダリングするので、パフォーマンスは良くないです。

microROS-Agentとrqtを実行

docker-compose.yamlのあるディレクトリで以下のコマンドを実行します。

$ brew services run colima
$ docker-compose up

とりあえずウィンドウだけです。お見せできるようなデータはありません。申し訳ありません。

rqt.png

まとめ

Ubuntuマシンか、Parallels DesktopのようなVM上のUbuntuでやるのが一番楽です。でも、いつも使っているmacOS上でサクッと動かしたいのです。Colimaを使うと、Docker Desktopを使わずに済むので、ライセンスの問題もクリアできます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?