Closed knorth55 closed 8 years ago
Did you get why TransformListener causes the problem?
2016年5月3日火曜日、Shingo Kitagawanotifications@github.comさんは書きました:
The problem is that message_filters get into callback for several time after starting launch file, but it doesn't get into callback any more. (actually it gets into callback, but really few frequency like once in 10 minutes) I debugged it and found out that TransformListener causes this problem.
In the case using both TransformListener and message_filters, TransformListener make its own Subscriber in inside process, which conflicts with message_filters A guy in the reference below modify message_filters, but this is the last idea i want to choose. C++ has tfMessageFilter, and jsk users use tf_listener_singleton but i could not find good substitute for python. Do you have any idea or suggestion for this problem?
@yuyu2172 https://github.com/yuyu2172 @wkentaro https://github.com/wkentaro
Reference
http://answers.ros.org/question/211815/approximate-time-synchronizer-problem/
http://answers.ros.org/question/49069/is-there-a-tfmessagefilter-in-the-tf-python-api/
— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/start-jsk/jsk_apc/issues/1396
和田 健太郎 / Kentaro Wada http://wkentaro.com
sorry, i got wrong url this website below describe the reason. TransformListener have spin() in inside process, and i thought that cause the problem. http://answers.ros.org/question/43088/time-synchronizer-hangs-after-few-messages/
Okay, could you please create a simple launch file with a node which consists of TransformListener and message_filters? It would be help to debug this problem.
And please open a issue on jsk-ros-pkg/jsk_recognition
okay @yuyu2172 can you make a PR for rbo node launch file?
@yuyu2172 一時的な解決策としてlistenerをcallbackで毎回宣言して、tfでwaitForTransformを行うことでできるか試してみます tf2にはwaitForTranformが内のが問題ですがtf2である必要性ってあるんですか??
@knorth55 Jsk_apc2016_common no longer depends on tf2. Initially, I needed tf2's methods for preprocessing, but the preprocessing currently uses patched ones declared inside of our project.
It would be ok to change from tf2 to tf.
I will send PR.
今日いろいろデバグをしてみたのですがTransformListenerを別ノードで呼んでも解決しませんでした。
callback内でrospy.spin()
を呼ばないようにしましたがcallbackに途中から入らなくなってしまいました。
callbackの中に問題があるのではないかと思いコメントアウトしていくと軽い処理の場合はcallbackにいつも入っているのですが重い処理があると入らなくなってしまいました。
get_spatial_img
などの重い処理(0.5秒くらいかかる)があるとmessage_filters
のcallbackに入らないようです。
原因はよくわかりませんが毎回同程度の時間がたつとcallbackに入らなくなります。
今は一つのノードが大きいので一つ一つの機能に分割してノードを立てること、ポイントクラウドの処理はC++に書き換えることを検討しています。
cc. @yuyu2172
スリープが入っているだけでバグを再発できる簡単なサンプルはありますか? (問題が時間だけなのかがわかるのと、デバッグしやすいかと思います)
Gistにサンプルをあげました これでこちらの環境では再現出来ました カメラにはsoftkineticを使っています。 https://gist.github.com/knorth55/186e8dc5aeb13019ba84bb243926066d
これは、画像じゃなくてもおこる?
RGBD画像処理のときだけ?
このgistはなんの処理もしていません 元のファイルはRGBDの処理をしています
じゃあ入力がstd_msgs/Stringとかでもいい?いまカメラ無いんだけど..
それはまだ試せてません、いまから試してみます
もしかしたら、PointCloud2メッセージをdeserializeするところでPythonだと時間がかかったりするのかもと思いました。
tfやtransform listenerは関係ないということ? callbackで時間のかかる処理をしてしばらくするとfpsが極端に下がる?
結局そういうことになりました いろいろデバグして勘違いしていました fpsがおちていってとまってしまいます
Gistにあげた例でsensor_msgs/Image
でtopicがでなくなるのはqueue_size
が無駄にでかいのを10くらいに下げると解決しました。
queue_size
に関してはいろいろ変えて試してどれもRBOのnodeではダメだったのですがもう一度確認してみます
以下で再現、解決できたかと思います。(headerのついたstringメッセージをqueue_size 100で3トピックの同期処理) マージされるのは先だと思うので、しばらくC++を使ってやればいいと思います。
Reproducing code:
Issues
PRs:
The problem is that
message_filters
get into callback for several time after starting launch file, but it doesn't get into callback any more. (actually it gets into callback, but really few frequency like once in 10 minutes) I debugged it and found out thatTransformListener
causes this problem.In the case using both
TransformListener
andmessage_filters
,TransformListener
make its ownSubscriber
in inside process, which conflicts withmessage_filters
A guy in the reference below modifymessage_filters
, but this is the last idea i want to choose. C++ hastf::MessageFilter
, and jsk users usetf_listener_singleton
but i could not find good substitute for python. Do you have any idea or suggestion for this problem?@yuyu2172 @wkentaro
https://github.com/start-jsk/jsk_apc/blob/master/jsk_2016_01_baxter_apc/node_scripts/rbo_segmentation_in_bin_node.py#L18-L43
Reference http://answers.ros.org/question/43088/time-synchronizer-hangs-after-few-messages/
http://answers.ros.org/question/49069/is-there-a-tfmessagefilter-in-the-tf-python-api/
https://github.com/jsk-ros-pkg/jsk_recognition/blob/master/jsk_recognition_utils/src/tf_listener_singleton.cpp