LoginSignup
11
4

More than 1 year has passed since last update.

ROS2 Rustクライアント実装状況 2022/12/09現在

Last updated at Posted at 2022-12-11

本記事の目的

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

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

ROS2 Rustクライアント

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

発表資料

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

名称 作者 URL 概要
ros2-rust Multiple contributors https://github.com/ros2-rust/ros2_rust Official Rust binding to rcl
ros2-client/RustDDS Atostek Oy / Juhana Helovuo and others https://github.com/jhelovuo/ros2-client Native Rust implementation of ROS2 client library - and DDS!
r2r Martin Dahl and others https://github.com/sequenceplanner/r2r Binding to rcl. Rust API uses async functions.
rclrust Yuma Hiramatsu https://github.com/rclrust/rclrust Uses 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/Sub Service Parameter Action
ros2-rust
ros2-client/RustDDS
r2r
rclrust

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

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

対応バージョン

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

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

名称 Foxy Humble
ros2-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でのロボット開発がもっと盛り上がって欲しいので出来る範囲で私も貢献していきたいところです。

11
4
2

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
11
4