はい、タイトル通りです。
Contents
現象
Mac OS X CatalinaにROS2 FoxyをインストールしRoboCup SSLの開発を行っていたのですが、Eloquentで動いていたノードたちが殆どの場合動かなくなるバグに見舞われました。
Macで動かしてるからバグってるのかな、と思いVM上にUbuntu 20.04をインストールして実行してもNG…
いよいよ怪しいぞ、と思って真面目に調べてみました。
Mac OS XへのROS2 Foxyのインストール方法はこちらを参照ください。
原因
FoxyのRelease Noteを見たら、ありました。
[ros2/ros2#922] Services’ performance is flaky for
rclcpp
nodes using eProsima Fast-RTPS or ADLINK CycloneDDS as RMW implementation. Specifically, service clients sometimes do not receive the response from servers.
(訳:FastRTPSやCycloneDDSを使用した際、rclcppノードのサービスパフォーマンスがあてになりません。具体的には、クライアントがサーバから応答を受信しません。)
…
……
は?
なんてもんリリースしとんねんって話です。
せめて、インストール方法解説してるページの冒頭にデカデカと書くべきレベルの問題です。
それをRelease Noteのこんな下の方に小さく書くだけって…ええ………
対策
Patch Releaseが出るまではEloquentを使いましょう。
どうしてもFoxyを使いたい場合、その時はデフォルトのFastRTPSからCyclone DDSに変更しましょう。
CycloneDDSの方が動作はかなりマシです。
具体的な方法は.zprofileに下記内容を追記するだけです。
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
MacだとEloquentでの環境再構築が死ぬほど大変なので、私はコレで耐えています。
(FastRTPSを1.x系に戻してソースビルドすれば動くとは思うのですが、過去Macでソースビルドした際、setup.zshの読み込みがめちゃくちゃ遅くなったで諦めました…)
所感
ROS2ではROS1から通信方法を見直し、DDSをサードパーティ製のライブラリで構築できるように改良されました。
それ自体はとても良いことなのですが、今回はその弊害が出てしまいましたね。
ROS1もNoeticが最終リリースとなり、いよいよROS2への移行が本格化するのかと思ったらコレだったので、ちょっと残念な気持ちになりました。
ROS2もまだまだ発展途上なので、LTSだからといって新しいものに飛びつくのはまだやめておいたほうが良いですね。
次のLTSが出る頃には機能ももっと充実してたら良いなぁ。
ロボットと電子工作とプログラミング!
女の子は甘いもので出来てる?