1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pixiとDocker Desktop on Macで始めるmacOSにおけるROS 2開発環境構築

Last updated at Posted at 2025-03-09

はじめに

一昔前であればmacOSでROS 2開発環境構築する時、ソースビルドによりインストールされていました。以下に参考記事を示します。

ただし、この方法は必要なROS 2パッケージをソースビルドする必要があり、パッケージ管理システムの恩恵を受けることができないため、開発環境構築が煩雑となっていました。

そのような混沌とした状況の中、高瀬先生より「pixiというパッケージ管理システムを使うとmacOSでROS 2開発環境構築が簡単にできる」という情報が共有されました。

従来よりDocker Desktop on MacでROS 2開発環境を作る方法もあったのでそれぞれの長所、短所を列挙します。

  • pixi
  • Dockerコンテナ
    • 長所:UbuntuにおけるROS 2開発環境構築手順を踏襲できる(aptでパッケージをインストールできる、rosdepで依存関係解決できるなど)
    • 短所:センサデバイス、GUI、macOS固有のアクセラレータ利用に制限がある

上記のことからわかるようにそれぞれ一長一短あることがわかります。本記事ではpixiとDockerコンテナのROS 2環境を連携させることでそれぞれの不満点を補うことができるような方法を紹介します。

動作確認環境

今回動作確認に用いた開発環境は以下の通りです。

  • MacBook Air (15インチ, M3, 2024)
  • macOS Sonoma 14.4
  • Docker Desktop on Mac 4.39.0
  • pixi 0.42.1

前準備

Docker Desktop on Macインストール

https://docs.docker.com/desktop/setup/install/mac-install/を参照してDocker Desktop on Macをインストールします。また、Docker Desktop設定画面にてResources-NetworkEnable host networkingにチェックを入れます。

Dockerコンテナ起動

以下のコマンドを実行してROS 2 HumbleのDockerコンテナを起動します。

docker run --rm -it \
           --net=host \
           --ipc=host \
           ros:humble-base \
           bash

また、今回、Fast DDSを使います。Fast DDSはデフォルトで共有メモリを介して通信を行うことがあるため、docker runのオプションに--ipc=hostを付与します。このあたりの挙動が気になる方はhttps://qiita.com/dandelion1124/items/9c0a9c16956bb8fb9065を参照ください。

pixiでROS 2 HumbleをインストールするとデフォルトのDDSはCyclone DDSとなっています。ただし、現状のpixiではCyclone DDSの場合にDockerコンテナと疎通できない問題(https://github.com/prefix-dev/pixi/issues/2979)があったため、今回、Fast DDSを使っています。

pixiインストール

以下のコマンドを実行してpixiをインストールします。

curl -fsSL https://pixi.sh/install.sh | bash

pixiプロジェクト作成

以下のコマンドを実行してpixiプロジェクトを作成します。

pixi init my_ros2_project -c robostack-staging -c conda-forge

パッケージインストール

以下のコマンドを実行してros-humble-desktopをインストールします。

cd my_ros2_project
pixi add ros-humble-desktop

pixiプロジェクト設定

my_ros2_project以下にあるpixi.tomlに以下の記述を追記し、環境変数を設定できるようにします。

[activation]
scripts = ["activate.sh"]

また、my_ros2_project以下にactivate.shを作成し、以下の記述を追記します。

export ROS_LOCALHOST_ONLY=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

動作確認

pub

pixi上で以下のコマンドを実行します。

pixi run ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

sub

Dockerコンテナで以下のコマンドを実行します。

ros2 topic echo /turtle1/cmd_vel

連携例

具体的なpixi、Dockerコンテナ連携例を以下に示します。

  • pixi:RViz2
    • RViz2はGUIアプリケーション、画面描画にハードウェアアクセラレーションの恩恵が受けられる
  • Dockerコンテナ:Gazebo Ignition、navigation2
    • Gazebo Ignitionはheadlessで動かす
    • Gazebo Ignition、navigation2および依存パッケージはapt、rosdepの恩恵が受けられる

おわりに

本記事ではpixiとDockerコンテナのROS 2環境を連携させることでそれぞれの開発環境での不満点を補うことでができるような方法を紹介しました。これらの情報を参考にしながら

  • pixi:センサデバイス、GUI、macOS固有のアクセラレータ利用するパッケージ
  • Dockerコンテナ:それ以外のパッケージ

と言うような使い分けをすることで、pixi、Dockerコンテナ単体での不満点を補完することができるようになります。そのため、これまでよりmacOS上でROS 2を使ったアプリケーション開発がやりやすくなるでしょう。

参考記事

1
1
1

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?