jsk-ros-pkg / jsk_common

common programs for jsk-ros-pkg
43 stars 81 forks source link

data_collection_serverで低Hzの画像トピックを保存するとブレてしまう #1668

Closed Kanazawanaoaki closed 3 years ago

Kanazawanaoaki commented 3 years ago

https://github.com/Kanazawanaoaki/jsk_demos/blob/ebc8fa648b795b90e06ab4366509387dc40445c2/jsk_2020_04_pr2_curry/launch/data_collection_prosilica.launch#L20-L35 でdata_collection_serverを使って低Hzの画像トピックを保存するとサービスを呼んだタイミングよりも大分前の画像が保存されて,ブレてしまいました.

https://gist.github.com/Kanazawanaoaki/f0ba8039274772a4d44877fa8e53c97b

(send *ri* :angle-vector (send *pr2* :angle-vector))
(send *ri* :wait-interpolation)  
(setq res (ros::service-call "after_stow_data_collection/save_request" req t))

のように動作をさせてwait-interpolationを入れた後に画像を保存しても,動作中のぶれている画像が保存されました. pr2_prosilica_image_raw_veg

原因としては,data_collection_serverではサービスコールが呼ばれた時点でサブスクライブしている最新のトピックを保存するようになっているので,そもそもrossetmasterをしている遠隔PCから実行しているために遅延が生じていて,さらに低Hzのトピックだとサービスコールを呼んだ時点よりもかなり前のトピックが保存されることが考えられます.

解決策としては,

が考えられます.

(send *ri* :angle-vector (send *pr2* :angle-vector))
(send *ri* :wait-interpolation)

(unix:sleep 1)

(setq res (ros::service-call "after_stow_data_collection/save_request" req t))

のようにしてぶれていない画像が保存できることは確認できました.
pr2_prosilica_image_raw_veg

knorth55 commented 3 years ago

https://github.com/jsk-ros-pkg/jsk_common/blob/master/jsk_data/node_scripts/data_collection_server.py#L291-L296

ここでself.msgstimestampservice calltimestampを比較して,self.msgstimestampが更新されるまで待つようにすると解決できそうですね.

knorth55 commented 3 years ago

@Kanazawanaoaki このPRを試してもらえますか? https://github.com/jsk-ros-pkg/jsk_common/pull/1669

Kanazawanaoaki commented 3 years ago

@knorth55 そのままでは動かなかったのでhttps://github.com/knorth55/jsk_common/pull/2 のようにとりあえずエラーを起きないようにしました.
実機で試してみても画像がブレずに上手くいっていそうです.

pr2_prosilica_image_raw_veg