Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HrpsysSeqStateROSBridge.cpp] センサのTFをtfではなくtf_staticで出したい #1117

Open
Naoki-Hiraoka opened this issue Jan 21, 2022 · 4 comments

Comments

@Naoki-Hiraoka
Copy link
Contributor

現在,センサはURDFに含まれていないためrobot_state_publisherがTFを出してくれないので,代わりに親リンク-センサ間のTFをHrpsysSeqStateROSBridgeがwrlを読んで出しています.

updateSensorTransform(sensor_tf_stamp); // transform depends on joint angles, not sensor values

このTFがstaticではなく普通のTFとしてpublishされているので,センサの数が200個近くあるロボットでは,tfをsubscribeする各種nodeの処理が遅くなってしまうという問題がありました.

普通のtfではなくtf_staticで出すように変更したいのですが,何か問題はありますでしょうか.

@k-okada
Copy link
Member

k-okada commented Jan 21, 2022 via email

@pazeshun
Copy link
Collaborator

tf_staticに変更した場合、rosbag recordしたデータをplayする時に問題があるかもしれません。
tf_staticはlatchedトピックといって、これをechoするsubscriberが生成されるたびに、そのsubscriberが一回だけメッセージを受け取ることができるものですが、この仕組みがrosbag play時には再現されない気がします。
少なくともindigo時代はそうでした。今は直っているかもしれません。
https://answers.ros.org/question/207551/how-to-save-static-transforms-in-bag-files/
tf_staticはplayした直後に一回だけpublishされることになるので、playした後に立ち上げたノードはtf_staticを受け取ることができません。
つまり、起動順番が大変重要になってしまうことになり、rosbag playとその他のノードを一つのlaunchファイルにまとめられないことになります。
で、一般的には、tf_staticを出すのはrobot_state_publisherで、URDFはあるので、rosbag playと一緒にrobot_state_publisherも動かせばいいや、となるのですが、今回はそうはいかないことになります。
デフォルトの挙動を変えるのではなく、どうしても必要な場合のみ指定して変更するなどの対応の方がいいかもわかりません。
急いで書いたので間違いがあるかもしれないので、色々試してみて、良さそうな方法を考えてみてください。

@Naoki-Hiraoka
Copy link
Contributor Author

ありがとうございます.
確かに,rosbag play時に親リンク-センサ間 のTFを出す手段が無いので,問題があります.

とりあえず今の実験では,wrlからセンサを削除して,代わりにwrlに同名のリンクをfixed jointで取り付けることで,URDFにセンサと同じ名前のリンクを含め,robot_state_publisherからstatic tfを出すという方法をとっています.この方法だとrosbag play時にrobot_state_publisherを立ち上げれば表示されます.しかし,今後wrlを使うレイヤでセンサを使いたい場合に問題になりそうです.

@Naoki-Hiraoka
Copy link
Contributor Author

jsk_topic_toolsのstatic_tf_republisherか、jsk_rosbag_toolsのtf_static_to_tf.pyを使えば、rosbagの問題は解決できます。

そのため、tf_staticで出して問題なさそうです。今度必要になったときにPRを出します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants