jsk-ros-pkg / jsk_robot

jsk-ros-pkg/jsk_robot
https://github.com/jsk-ros-pkg/jsk_robot
73 stars 97 forks source link

mongo_record.pyの中でrospy.Rateで指定されたHzでサブスクライブされていない #1838

Closed tkmtnt7000 closed 1 year ago

tkmtnt7000 commented 1 year ago

edgetpuの認識結果が10Hzも入っているのはやっぱり何かおかしいと思って調べていくと

https://github.com/jsk-ros-pkg/jsk_robot/blob/5093a5acd7293f3bc96c5014ed6d60c7dc0d6d5b/jsk_robot_common/jsk_robot_startup/src/jsk_robot_startup/lifelog/mongo_record.py#L84-L88

でrate指定でspinonceされているように見せかけておいて実はされていない,ということに気づいた.(おそらく裏でスレッドか何かが走っている)

毎回サブスクライバをunregisterしてやると直りそう ~c.f. https://github.com/marketto89/open_ptrack/blob/f3790b6aa1139f6b72c48ec43e8ee890e2fa704d/opt_calibration/apps/status_plot.py#L56-L60~

sktometometo commented 1 year ago

rospy の サブスクライバは roscpp や euslisp と違って、サブスクライバやサーバーのハンドラごとにスレッドが立っていて、msgがくるとmainスレッドでスリープしているかどうかにかかわらず callback が呼ばれるので、mongo_record.py のこの書き方は subscribe のレートを指定する意味での書き方ではないけど、そもそも何が問題なのか聞いてもいい?

もし subscribe して insert する部分を一定のHzにしたいのであれば throttle するか record ノード側で throttle する機構を入れるかする必要があるはず。

tkmtnt7000 commented 1 year ago

self.update_rateで設定されている値がサブスクライブのレートを指定していると勘違いしました. よく読むとupdate_rateで管理しようとしているのはspinonceの前のcheck_topicのほうですね...