本記事の目的とモチベーション
この文書は2025年11月時点で複数開発されているRustクライアントの実装状況を記録するためのものです。
既存の同様の調査として、2022年に@OTLさんがこの記事でROS 2におけるRustのクライアントの実装状況について報告していました。また、拙作の記事ではありますが、2024年にも同様の調査を行いました。
この調査に関しては、メジャーバージョンがリリースされたときのみ(Humble, Jazzy)の調査で今年は実施しなくてもいいかなぁと思っていたのですが、ROSCon2025に参加された@takasehideki先生が以下の発言を聞いて考えが変わりました。
「そんなにアツいなら定点調査として意味がある!!」と思い、筆を執った次第です。
今回も調査対象のクライアント一覧を作成し、各クライアントの機能を比較と対応バージョン確認を行っていきます。
ROS2 Rustクライアント一覧
以下に今回調査対象としたRustクライアントの一覧を示します。
ちゃんと探したつもりではありますが、すべて探しきれてなかったら申し訳ありません。
RustクライアントはAtostek ROSCon 2022: Native Rustを参考に、Githubで「ros2」「rust」を検索し、クライアントの実装を行っていると認められるものを一覧に加えました。ros-zはROCon2025で紹介されており、Zenoh限定ではあるのですが面白い試みなので加えています。
※1 rus2は5年前から開発止まってるので除外
※2 roslibrustはクライアントではなく、ROSのインストールなしで部分的にpub/subする仕組みなので除外
※3 Yuma Hiramatsuさんのrclrustがリストにありましたが、すでにPublic archiveになっていたので除外
※4 safe_driveに関しては2025年3月からPJの動きが止まっているので今回は除外
ROS2クライアントで調査する機能
調査対象の機能は以下の7点としました。
基本的な機能としてPub/Sub , Service , Action, Parameterの四つのサポートに加えて、QoSのチューニング等の実装状況を調査しました。
- Pub/Sub
- Service
- Action
- Parameter
- Messege generation
- QoSチューニング
- async / await実装
ROS2 Rustクライントの実装状況
実装状況を以下の表にまとめます。
表中の記号は以下の意味で記述しています。付記してあるリンクは対象の実装がある箇所です。
| 実装あり | |
|
|
実装が見つからない |
| 実装されているが、実験的/未検証の記述あり |
| 機能カテゴリ | ros2-rust | r2r | ros2-client | ros-z |
|---|---|---|---|---|
| Publisher |
publisher.rs |
publisher.rs |
pubsub.rs |
pubsub |
| / Subscriber | subscription.rs | subscriber | - | - |
| Service / Client |
service.rs client.rs |
service.rs |
service/ |
service |
| Action |
src/action/* |
action_* |
action/ |
|
| Parameter API |
parameter.rs |
parameters |
parameter.rs |
|
| msg/srv 自動生成 |
message_demo.rs |
r2r_msg_gen |
msggen |
|
| QoS 設定 |
qos.rs |
qos.rs |
rustdds/qos |
qos.rs |
| async/await |
minimal_client_async |
examples |
async_* |
z_pubsub.rs |
前回からの大きな変化として、公式と目されるros2-rustの機能が充実しています。Actionに加えExecutorの実装もたされている等、急激な機能向上があります。
全体的に今回調査した機能は新興のROS-Zを除いてすべて実装されていました。実用段階に入ったと評価しても良いのではないでしょうか。
対応バージョン
各プロジェクトの対応バージョンをEOLを迎えていないDistroについて調査しました。
実際に対応しているか調べるのは中々時間がかかるので、今回はREADMEの記述を信じることにします。
| 名称 | Humble | Jazzy | Kilted | 備考 |
|---|---|---|---|---|
| ros2_rust | 明記なし、ただし各distroの.reposあり | |||
| r2r | - | ここに記述あり | ||
| ros2-client /RustDDS |
- | ここに記述あり | ||
| ros-z | - | - | ここにJazzyのみサポートとの記述 |
ros2_rustに関しては.reosファイルが各distro向けに用意されているので、おそらく対象のDistroに関してはビルドしてテストすることが可能だと考えられますが、READMEに明記が無いため、
としています。
今回の結論
ros2-rustは大幅な機能向上が行われた模様。
その他のプロジェクトについても、精力的に開発が行われている。実用段階になるのもすぐそこ。
終わりに
以上が、2025/12/7現在でのROS2 Rustクライアントの開発状況の紹介です。
今年はかなりros2-rustに大幅な機能追加がなされ、非常にアツい1年だったようです。今後も定期的に状況の調査を継続したいと考えます。
参考文献
各クライアントについての所感
前回と同じく、以下にざっとリポジトリを眺めたうえでの所管を記述していきます。(あまり正しくないかも、あくまで所感です。)
ros2-rust(rclrs)
WG Rustによって開発が進められているクライアントです。満を持してActionの実装が完了したようです。
バージョンも今年の内に->0.5->0.6とバージョンアップし、機能追加を順調に行っている印象です。
このWGの最終的な目標は、rclpyやrclcppのようなクライアントライブラリとしてrclrustをROSのリリースに取り込ませることですが、ひょっとしたら、来年あたりにはいい感じにリリースに取り込まれるのではないでしょうか。
Action等の使用感は把握できていないので、一度小規模な自分のプロジェクトに使ってみたいですね。
r2r
軽量にROS2 通信を実装していて、API が比較的シンプルで、学習コストが低いのが特徴です。
Rustのエコシステムとも親和性が高いPJです。
Tokio ベースの非同期プログラミングが自然に書けるため、ガッツリ使うよりも軽量なノードやツールを作る際に杖そうです。
Win,Macを含めた複数OSに対応しているので、WindowsでROS通信するツールを書く際には念頭に置いておきたいライブラリです。昨年は結構活発にコードコミットしていた印象ですが、今年に入りRelease 0.9.5をリリース後(5月頃)から開発に動きがありません。
出来れば続いて欲しいプロジェクトです。
ros2-client / RustDDS
rcl を使わず、DDS 自体を Rust で実装するというかなり面白いアプローチのクライアントです。
rmwを経由するような設計にはなっていないので他のrclからDDSだけを入れ替えするような使い方は難しいかもしれません。しかしながらRustDDSによってRustと非常に親和性の高いクライアントになっています。
プロジェクトの活動自体は活発で、ROS 2 Securityの実装を実験的に行う等、先進的なプロジェクトなので、このプロジェクトがどのようなかじ取りをしていくか注目していきたいです。
ros-z
DDSを使わずZenohを機能の中心に置いたROS 2クライアントです。ROS2ユーザに対してZenoh-nativeなrclの実装を提供することを目的にしており、RustからROS-Zを使ったアプリケーションを書くことや、他の言語はrcl経由でROS-Zを使うことも可能であるとのこと。(画像参考)
方向性としてはRustDDSと似た様なアプローチを取っていますが、こちらはDDSを実装するのではなくZenohを利用していることが大きな違いです。
