本記事の目的

ROS2のRustクライアントはいくつか存在する。

2022/12/09時点でのそれぞれのクライアントの実装状況について記述しておく。今後の発展に期待。

ROS2 Rustクライアント

@MrBearing さんに教えて貰いましたが、ROSCON2022@京都にて以下のような発表があったようです。

発表資料

勝手に引用させてもらうと以下のような感じです。

名称作者URL概要ros2-rustMultiple contributorshttps://github.com/ros2-rust/ros2_rustOfficial Rust binding to rclros2-client/RustDDSAtostek Oy / Juhana Helovuo and othershttps://github.com/jhelovuo/ros2-clientNative Rust implementation of ROS2 client library – and DDS!r2rMartin Dahl and othershttps://github.com/sequenceplanner/r2rBinding to rcl. Rust API uses async functions.rclrustYuma Hiramatsuhttps://github.com/rclrust/rclrustUses Rust macros(!) to translate IDL to Rust types.

資料だと一番下にrosrustが乗っていますが、rosrustはROS1なので関係ないです。
rus2は流石に作りかけすぎるので省かせてもらいました。

ということでいっぱいありそうですね。

ROS2クライアントに必要なもの

ところでみなさんROS2クライアントを実装したことありますでしょうか?私はありません。
しかしROS1だけは経験があります。

ROS1クライアントについて

ROS1では以下3つをサポートすれば大体OKでした。

    • Pub/Sub

 

    • Service

 

    Parameter

他に必要なのはactionlibとかtfとかなんですが、それらはこの仕組みを使って実装出来るので、そこはオプショナルというか、誰か他の人が作ってくれてもいいし、最悪Pub/Sub使えば無理やりactionを使うことは可能でした。

ROS2クライアントについて

一方でROS2では上記3つに加え、

    Action

もサポートする必要があります。それはROS1ではactionはPub/Subの仕組みを使ってactionlibという外部ライブラリで実現されていたのですが、ROS2ではROS2本体の機能として取り込まれたからです。

またROS2で新たに導入されたQoSの設定もROS2では必須と言っていいレベルです。それは設定によっては全く通信出来ない接続関係もある(うまく行かない、とかではなく、仕様として接続出来ない。))ためです。

ということで

ROS2クライントに求められるのは

    • Pub/Sub

 

    • Service

 

    • Parameter

 

    Action

上記4つになります。(多分他にもあると思いますので詳しい方、コメント等で教えて下さい!LifeTimeとか?QoSが必須なのは理解していますが、全ライブラリ実装しているので今回は省略。)

特にROS(2)の最大の売りであるnavigation2の指令値はaction形式になっており、actionを使えないクライントライブラリはnavigationを使えない事になってしまうため、actionの実装があるかどうかは本格的にROS2をその言語で使えるかどうかを分ける非常に重要な観点となります。

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

そこで各クライアントの上記4つの機能の実装状況を確認してみましょう。

名称Pub/SubServiceParameterActionros2-rust✔✔✔
ros2-client/RustDDS✔✔✔
r2r✔✔✔✔rclrust✔✔✔

実際のソースコードを見た結果、私の認識では上記の状態です。
これではちゃんとROS2クライントとして完成しているのはr2rだけ、ということになります。

ということで弊社で開発しているOpenRRでもr2rを採用しています。他にも理由はあるのですが。

対応バージョン

また、ROS(2)は頻繁にバージョンアップしますので、どのバージョンに対応しているかが重要です。これは人によって古いほうがいい、新しいほうがいいとかあると思いますが、個人的にはFoxy以前のROS2は実用レベルにないと思うので、Foxy, Humbleの2つをサポートしているかどうかが重要かと思います。それぞれLTSバージョンですし。

これは実際に対応しているか調べるのが難しいのでREADMEの記述を信じることにします。

名称FoxyHumbleros2-rust✔✔ros2-client/RustDDS(Galactic)
r2r✔✔rclrust✔(Rolling)

こちらも正式にFoxy, Humble対応しているのはr2rのみという結果になりました。(rclrustはRollingに対応しているのでHumbleも動きそうですが記述なし)
(編集2022/12/12 @wep21 さん情報ありがとうございます。:ros2-rustはリリースノートにHumbleの記述があるので多分動くかと。)

今回の結論

現時点ではr2rしか使えるものはない。

終わりに

ということで2022/12/09現在でのROS2 Rustクライアントの開発状況を紹介しました。
今後の開発に期待ですし、Rustでのロボット開発がもっと盛り上がって欲しいので出来る範囲で私も貢献していきたいところです。

广告
将在 10 秒后关闭
bannerAds