start-jsk / jsk_apc

Other
36 stars 35 forks source link

[jsk_2016_01_baxter_apc] message_filters callback problems #1396

Closed knorth55 closed 8 years ago

knorth55 commented 8 years ago

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 tf::MessageFilter, 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 @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

wkentaro commented 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

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/211815/approximate-time-synchronizer-problem/

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

— 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

knorth55 commented 8 years ago

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/

wkentaro commented 8 years ago

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.

wkentaro commented 8 years ago

And please open a issue on jsk-ros-pkg/jsk_recognition

knorth55 commented 8 years ago

okay @yuyu2172 can you make a PR for rbo node launch file?

knorth55 commented 8 years ago

@yuyu2172 一時的な解決策としてlistenerをcallbackで毎回宣言して、tfでwaitForTransformを行うことでできるか試してみます tf2にはwaitForTranformが内のが問題ですがtf2である必要性ってあるんですか??

http://interimadd.com/2016/03/03/ros%E3%81%AEtftransformlistener%E3%82%92callback%E3%81%AE%E4%B8%AD%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/

yuyu2172 commented 8 years ago

@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.

knorth55 commented 8 years ago

今日いろいろデバグをしてみたのですがTransformListenerを別ノードで呼んでも解決しませんでした。 callback内でrospy.spin()を呼ばないようにしましたがcallbackに途中から入らなくなってしまいました。

https://github.com/start-jsk/jsk_apc/blob/master/jsk_2016_01_baxter_apc/node_scripts/rbo_segmentation_in_bin_node.py#L68-L80

callbackの中に問題があるのではないかと思いコメントアウトしていくと軽い処理の場合はcallbackにいつも入っているのですが重い処理があると入らなくなってしまいました。 get_spatial_imgなどの重い処理(0.5秒くらいかかる)があるとmessage_filtersのcallbackに入らないようです。 原因はよくわかりませんが毎回同程度の時間がたつとcallbackに入らなくなります。 今は一つのノードが大きいので一つ一つの機能に分割してノードを立てること、ポイントクラウドの処理はC++に書き換えることを検討しています。

cc. @yuyu2172

wkentaro commented 8 years ago

スリープが入っているだけでバグを再発できる簡単なサンプルはありますか? (問題が時間だけなのかがわかるのと、デバッグしやすいかと思います)

knorth55 commented 8 years ago

Gistにサンプルをあげました これでこちらの環境では再現出来ました カメラにはsoftkineticを使っています。 https://gist.github.com/knorth55/186e8dc5aeb13019ba84bb243926066d

wkentaro commented 8 years ago

これは、画像じゃなくてもおこる?

wkentaro commented 8 years ago

RGBD画像処理のときだけ?

knorth55 commented 8 years ago

このgistはなんの処理もしていません 元のファイルはRGBDの処理をしています

wkentaro commented 8 years ago

じゃあ入力がstd_msgs/Stringとかでもいい?いまカメラ無いんだけど..

knorth55 commented 8 years ago

それはまだ試せてません、いまから試してみます

wkentaro commented 8 years ago

もしかしたら、PointCloud2メッセージをdeserializeするところでPythonだと時間がかかったりするのかもと思いました。

knorth55 commented 8 years ago

sensor_msgs/Imageでも再現出来ました https://gist.github.com/knorth55/616b10f0cb452624fdce516c1ee07352 https://gist.github.com/knorth55/279c2de0627d5c87fde163d9bc789536 https://gist.github.com/knorth55/35dce54c7aae3d1e3c9b344d07a6bb91

stop

wkentaro commented 8 years ago

tfやtransform listenerは関係ないということ? callbackで時間のかかる処理をしてしばらくするとfpsが極端に下がる?

knorth55 commented 8 years ago

結局そういうことになりました いろいろデバグして勘違いしていました fpsがおちていってとまってしまいます

knorth55 commented 8 years ago

Gistにあげた例でsensor_msgs/Imageでtopicがでなくなるのはqueue_sizeが無駄にでかいのを10くらいに下げると解決しました。 queue_sizeに関してはいろいろ変えて試してどれもRBOのnodeではダメだったのですがもう一度確認してみます

wkentaro commented 8 years ago

以下で再現、解決できたかと思います。(headerのついたstringメッセージをqueue_size 100で3トピックの同期処理) マージされるのは先だと思うので、しばらくC++を使ってやればいいと思います。

Reproducing code:

Issues

PRs:

wkentaro commented 8 years ago

Closed via https://github.com/start-jsk/jsk_apc/pull/1403