ROSで気にしてなかったけれどROS2にしたらぶつかったトラブルたち(on windows)
あらすじ
色々あってwindowsでしか動かない機材をシステムに組み込まないといけないことになったので,ROS2の導入を始めました.ubuntu...もとい,Linux上でROSを2年くらいは使っていたものだから大丈夫だろう!と思って同じ気持ちで使ってたところ,色々なトラブルに遭遇していくのでした...
みたいなやつ.
おなじ症状でも自分が遭遇したのとは違う可能性は十二分にありえるので,参考程度に...などといって,責任から逃れようとする.
内部技術について,使いながら理解していくような感じで進めているので,オイオイオイみたいなところもあるかもしれないけれど,何卒.(いわゆるマサカリは大歓迎でござい)
おや,ROS2ノードが2つ以上起動できない...?
タイトルの通り,複数のROS2ノード連携によりシステムを動かそうとしたものの,2つ目以降が動かない,起動できない...というもの.たとえROS2同梱サンプルであるところのdemo_node_cpp/demo_node_pyであっても,2つ目はダメ.
再起動,再インストールでは治らない.治っても不安だけど,まあ治らなかった
複数あるとダメってことは通信周りカナ~と思いながら調べると, https://answers.ros.org/question/402008/ros2-windows-node-always-hang/ にて,同様の問題についての議論が.
見てみると,今回のROS2で利用されているDDS通信(?)のあたりっぽい.
解決方法として挙がっていたのは以下の2つ
- デフォルトの通信ミドルウェア「FastRTPS」から「Cyclone DDS」へ変更
- 通信ミドルウェアはそのままに,
C:\ProgramData\eprosima\fastrtps_interprocess
フォルダの削除(ログっぽいものが中に入っていた.詳細の調査は...ひとまずTODOリストへ)
どちらの方法でも解決できることを確認.
もう少し調べると,
https://docs.ros.org/en/foxy/Releases/Release-Foxy-Fitzroy.html#known-issues に関係ありそうな文が.曰く,通信周りのパフォーマンスが怪しいらしい? ...マジ???? ちょっと前にあがっていたもののようなので,最新情報はわからないけれど.
ほかにもいろいろ通信ミドルウェアの選択ができるらしいが,特徴は調査中...
https://www.ros.org/reps/rep-2000.html ←DDS周りが色々載ってるのでメモ.
ros2 topic pub ...... のコマンドによるpublishが,たまにsubscriberに届かない
なにそれ,みたいなタイトルですが,あるsubscriberをもつノードを起動した状態で,操作のためにros2 topic pubコマンドを叩いても,ノードに無視されてしまう...コールバック関数が発動してくれない...ことが,「たまに」ある,というものです.連続送信モードのコマンドを叩くと,一個目のpublishは虚空に消えるけど,二回目は届く,みたいな.
以下,調査中(このサイトSEOがおもったより強いな...)
create_subscription
のqosをいくらかいじってみても治らない.
調べてると,ros2 topic pub のコマンドの方でもqosの設定があるようで.
ここが関連ありそうだが...
ros2 launch をしようとすると,有効な Win32 アプリケーションではありません と怒られる
(英語だと OSError: [WinError 193] %1 is not a valid Win32 application.
とかかな)
原因はパッケージ名とlaunchファイルの名前衝突らしい.
拡張子より前の部分がかぶるとおそらくダメ.名前を変えたら動くように..