3
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?

ROS 2Advent Calendar 2024

Day 14

ROS 2 Rustクライアント実装状況 2024/12/09 現在

Last updated at Posted at 2024-12-13

本記事の目的

2022年に@OTLさんがこの記事でROS 2におけるRustのクライアントの実装状況について報告していました。

流石に2年もたつと状況変わっています。今年はJazzyもリリースされたので、(@OTLさんに断りなくですが)再調査するのは意義があると思い筆を執った次第です。

この文書は2024年12月時点で複数開発されているRustクライアントの実装状況を記録するためのものです。
ちゃんと探したつもりではありますが、すべて探しきれてなかったら申し訳ありません。

ROS2 Rustクライアント一覧

RustクライアントはAtostek ROSCon 2022: Native Rustから引用・翻案・追記する形で一覧を作成しました。

名称 作者 Github 概要
ros2-rust Multiple contributors link Rust-WGの公式repo 
a
ros2-client / RustDDS Atostek Oy /
Juhana Helovuo
link
link2
DDSとそのROSクライアントをRustで作成
r2r Martin Dahl and others link rclへのバインド. async functions使ってるのが特徴
safe_drive :new: ytakano and others link 形式手法で仕様定義して実装された Rust バインディング

※1 rus2は4年前から開発止まってるので今回も除外
※2 roslibrustはrosbridgeで動作が前提なので除外
※3 Yuma Hiramatsuさんのrclrustがリストにありましたが、すでにPublic archiveになっていたので除外

ROS2クライアントでサポートして欲しい機能

@OTLさんの記事では、基本的な機能としてPub/Sub , Service , Action, Parameterの四つのサポートを確認していました。

今回は個人的に対応して欲しい機能として、Message generatinが実装されている事も確認します。
機能としてマストでありませんが、実装されていると、定義済みのmsgファイルとRustのコードを突合し続けるような作業から解放されます。

  • Pub/Sub
  • Service
  • Action
  • Parameter
  • Messege generation

以上5点を調査してして聞きます。

QoSに関しては程度の差はあれ、すべて実装していました。

ROS2 Rustクライントの実装状況

実装状況を以下の表にまとめます。

名称 Pub
/ Sub
Srv Param Action Msg Gen
ros2-rust :white_check_mark: :white_check_mark: :white_check_mark:
ros2-client
/ RustDDS
:white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :question:
r2r :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
safe_drive :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:

Rust-WGが開発しているros2-rustがいまだにActionに対応していないですね。
ほかのクライアントに関しては基本機能が実装できているので、実用することはできそうです。

Messege generation : .msgなどを読み込んで,Rustの型を生成する機能があるかを確認しました。名称やアプローチは各プロジェクトごとに少しずつ違います。

対応バージョン

今回はEOLを迎えていないLTSに限って(Ironは11月でEOL)調査しました。
実際に対応しているか調べるのは時間がかかるので、今はREADMEの記述を信じることにします。

名称 Humble Jazzy
ros2-rust :white_check_mark: :white_check_mark:
ros2-client
/ RustDDS
:white_check_mark: :white_check_mark:
r2r   :white_check_mark: :white_check_mark:
safe_drive :white_check_mark: :white_check_mark:

基本的にすべてのプロジェクトでHumble、Jazzyの対応はできているようです。

今回の結論

ros2-client, r2r, safe_drive 共に最低限使えるレベルに達してる。

ros2-rustに関しては、慎重な開発が行われてる模様。

終わりに

以上が、2024/12/14現在でのROS2 Rustクライアントの開発状況の紹介です。
調査したプロジェクトで基本的な機能の開発はほとんどできている様です。

今後、コンポーネントノードなどもRustで記述できると個人的には万々歳ですが、今後も折を見て状況追っていこうと思います。

今回の件も、もう少し時間が許せば、実装方式などの比較など、もう少し突っ込んだ調査してみてもいいかと思っています。

参考文献


各クライアントについての所感

流石に、このままだと内容薄い気がしたので、以下にざっとリポジトリを眺めたうえでの所管を記述していきます。(あまり正しくないかも、あくまで所感です。)

ros2-rust

WG Rustによって開発が進められているクライアントです。基礎的な機能は実装されていますが、未だにActionが実装されていません。
このPR(#410)でWIPですが、過去のPRでいくつかActionの実装を試みているようです。

このWGの最終的な目標は、rclpyやrclcppのようなクライアントライブラリとしてrclrustをROSのリリースに取り込ませることなので、現在はより良い実装を模索中ということなのだと思います。

しかしながら、cargo-ament-buildなど、ROSのビルドとシームレスに接続できるビルド環境がサポートされているので、自分のプロジェクトで使ってみる場合の親和性は高そうです。

ros2-client / RustDDS

ROSCon2022で発表されていた、DDS自体をRustで独自に実装する試みです。
DDSの仕様を完全にはフォローしていないため、専用のクライアントライブラリでのみ動作確認されています。
2022年の時にはActionが実装されていませんでしたが、既に実装されており,実用で使えそうなレベルです。
ロギングやROS time等もサポートされています。

開発元の Atostek Oyこれを実プロジェクトで使っているらしいです(2022年の発表時点)

r2r

2022年時点でActionまでの機能をほぼ実装していたのがこのプロジェクトでした。

お手軽にRustでROS 2と通信させたい場合には適用しやすいかもしれません。
基本的にcargoでのビルドを想定されていますが、リポジトリ下にあるこのスクリプトでcargoをCMakeと連携させてビルドすることができます。

safe_drive

個人的には一番興味深いプロジェクトです。
「形式手法で設計され、モデルチェッカにより仕様がテスト済み」という点が特徴。エグゼキューターのデッドロックやスタベーションが発生しないとのこと。
基本機能は十分サポートされていますし、ロギングなども実装済みです。

詳しい使い方などは公式ドキュメントへ

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