1. はじめに
今回は掲題の通り、Zephyr で動作する micro-ROS について取り扱います。
本記事では、公式の手順を補完し、正攻法(?)で Zephyr 用の micro-ROS を動かすところまでをご紹介します。
2. micro-ROS とは
micro-ROS は、リソースが限られたマイコン上から ROS2 のエコシステムに参加するためのフレームワークです。
一般的な ROS/ROS2 は Linux などの汎用 OS 上で動作させることが多く、比較的潤沢な CPU やメモリ、ストレージを利用できます。一方、micro-ROS は、CPU・メモリ・ストレージなどのリソースが限られたマイコンを主なターゲットとしており、FreeRTOS、Zephyr、NuttX などの RTOS をはじめとした環境で動作させることができます。
そのため、micro-ROS では ROS2 の機能をすべてそのまま利用するのではなく、マイコン上でも扱いやすい形で ROS2 の通信や実行モデルを利用できるようになっています。
もちろん、micro-ROS を使わず、一つの ROS2 だけで完結させてもシステムは成立するのですが、
『離れた位置の情報を拾うセンサー』や『脚の数を簡単に増減できる多脚ロボット』などを作る場合、
センサーで情報を拾うためだけにパソコンを追加で用意したり、脚1つ1つにパソコンを内蔵するのは過剰スペックであり、物理的に巨大化もします。
そこに対し、500円玉程度の大きさ、数千円程度(もちろん作る対象によります)でそれらセンサーノードやモーター制御ノードなどを実現させられるのが、micro-ROS の強みとなります。
3. Zephyr 用 micro-ROS 公式ページ
公式の micro-ROS のページは下記です。ただし、2022年ごろから更新されていません。
そのため、github のリポジトリを直接見るほうが良さそうです。
4. 開発環境の構築
基本的には、Zephyr 公式の手順に沿うのですが、2026年現時点で micro-ROS は Zephyr の v4.1.0 までしか動作確認ができていません。
# micro-ROS module for Zephyr
This module has been tested in Zephyr RTOS v4.0.0 (SDK 0.16.9-rc3), and v4.1.0 (SDK 0.16.9-rc3), using a docker image based on `zephyrprojectrtos/zephyr-build:v0.26.17`.
そのため、今回の記事では、v4.1.0 で話を進めます。
4.1. Zephyr の開発環境
Zephyr 公式の手順も正確性を期すため v4.1.0 を基準にしておきます。
以降は、ubuntu 向けの作業をピックアップして貼り付けてあります。
(Windows 等は先述のページを開いて同等の作業を行ってください)
4.1.1. システム側の構築
OS 毎に一度実施しておく必要のある作業。
sudo apt install --no-install-recommends git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
sudo apt install python3-venv
4.1.2. プロジェクト毎の環境準備
プロジェクト毎に実施する必要ある作業。
(zephyrproject は適宜ディレクトリを変えて進めてください)
python3 -m venv ~/zephyrproject/.venv
source ~/zephyrproject/.venv/bin/activate
pip install west
west init ~/zephyrproject
ここで、zephyr リポジトリを micro-ROS に合わせてバージョンを変えておきます。
ブランチ名を付けたい場合は -b [ブランチ名] で指定してください。
cd ~/zephyrproject/zephyr
git checkout v4.1.0
先述のコマンドで zephyr/west.yml も v4.1.0 のものに差し替わっているので、それに沿った modules を west コマンドで取得。
cd ~/zephyrproject
west update
同様に関連ツールも v4.1.0 に沿ったものをインストール。
west packages pip --install
SDK は README.md に記載のある 0.16.9-rc3 を試したのですがうまく通らず、0.17.4 にしておきます。
cd ~/zephyrproject/zephyr
west sdk install --version 0.17.4 -t arm-zephyr-eabi
4.2. micro-ROS 環境の準備
公式の micro-ROS リポジトリを取得。
cd ~/zephyrproject/
git clone https://github.com/micro-ROS/micro_ros_zephyr_module.git
README.md に記載されている通りにパッケージを追加。
pip install catkin_pkg lark-parser empy colcon-common-extensions
4.3. ターゲットを指定してビルド
まずは README.md に記載されているターゲットを指定。
cd ~/zephyrproject/micro_ros_zephyr_module/
west build -b disco_l475_iot1 -p
[201/201] Linking CXX executable zephyr/zephyr.elf
Memory region Used Size Region Size %age Used
FLASH: 130052 B 1 MB 12.40%
RAM: 55872 B 96 KB 56.84%
IDT_LIST: 0 GB 32 KB 0.00%
Generating files from
/home/taka/zephyrproject/micro_ros_zephyr_module/build/zephyr/zephyr.elf for board: disco_l475_iot1
5. まとめ
本当は Arduino UNO Q で Linux 上の ROS2 と MCU 上の Zephyr micro-ROS 連携を構築したかったのですが、
micro-ROS 公式が現時点で Zephyr v4.1.0 までしか動作確認ができておらず、Zephyr が公式に Arduino Uno Q をサポートした v4.4.0 には届きませんでした。
一応、手元では v4.2.1 辺りまではパッチを充てなくてもビルドが通ることを確認していますが、v4.4.0 で zephyr-sdk-0.17.4 から zephyr-sdk-1.0.1 に上がった関係でかなり手直しが必要になっているようです。
その後、claude code を使って v4.4.0 でも通るようにパッチ作成等はできたのですが、
まだ動作確認等ができていないので今回は公式のバニラ環境での構築手順までとしています。