-
Notifications
You must be signed in to change notification settings - Fork 56
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
ros::spin-onceの処理時間が長い #396
Comments
/move_base/feedback だけ,あるいは, /move_base/status をsubscribeするノードを自前でつくって 同じ条件で計測するとどうなるかな.◉ Kei Okada |
の |
feedback, result は待機状態ではgoal無しで何も飛んでいないので、hz , bwともに得られません。
|
5hz で 120 or 550 B/s なものがそれぞれ2個づつある,という状況で正しい? |
全体では次のようになります。
|
どれがどれぐらいきいているだろう? ◉ Kei Okada On Wed, Nov 11, 2015 at 1:55 PM, h-kamada [email protected] wrote:
|
spin-onceが遅くなる現象は、キューに多くのトピックがたまってそれを処理する時間がかかるのだと思います。 actionlib系はデータ取りこぼしが嫌なのでキューを無限大にしてあります。 これと同じ問題とおもっていて、 |
無限大ができたのか.
とあるね.無限大はできないと@h-kamadaに説明していた気がする.嘘でした. http://docs.ros.org/api/roscpp/html/classros_1_1NodeHandle.html#a317fe4c05919e0bf3fb5162ccb2f7c28 max 100hz, どうせtfだって20秒しかバッファがないから,2000というサイズはどうだろう. |
actionlibだと、以下の数字の0を変更するとキューのサイズが変わります。 この数字を変えてみて、変化があるか見てみてくれるかな?
それでいいと思います。
もっと短くてもいいかもしれません。 |
statusのqueの個数について変化させながら、 spin-once して40s後に再びspin-onceした際にかかる時間を5回計測し、平均します。 |
300s後に再びspin-once する形では 1000以上のque で設定してしまうと、全体で1s以上かかってしまうことがあります |
すごくざっくりですが、キューは200くらいで良さそうな気がします。 result/goal はactionを使った場合にしかトピックがやりとりされないから、キューは大きくても小さくても |
ところでstatus読み飛ばすと具体的に問題あるんだっけ? ◉ Kei Okada 2015/11/12 22:41、Yohei Kakiuchi [email protected] のメッセージ:
|
サーバー側のstatusと同期をとるようになっているはずで、 |
念のためque サイズを200として、 1000s と 2000s wait してからspin-once する時間をはかったところ、0.25s で終了しました。 |
そもそも, |
jsk-ros-pkg/jsk_common#162 |
See #398 for The fix,choose buffet size defined in roscop |
ros::spin-once
の処理時間が時間の経過につれて長くなる時間が経過とともに溜め込んでいるデータが増えるため、徐々に
ros::spin-once
にかかる時間が長くなる。特に高負荷な処理を行っている際には、これが溜まると一度の
ros::spin-once
に2s ~ 4s程度の時間がかかるようになってしまうため、ros::spin-once
で読み込むデータを制限するなど、何らかの対処が必要。PR2体内
冷蔵庫デモで立ち上げるlaunch(
detect_cans_in_fridge_201202/launch/startup.launch
)と、jsk-ros-pkg/jsk_demos#1107 で用いる
fridge_demo.launch
を立ち上げた状態でc1 load average 7.16 8.67 9.37
c2 load average 23.96 22.34 21.25
この状態でpr2-interfaceのinstanceを作成、一度
ros::spin-once
した後10s後に再びros::spin-once
を行い(実際には(send *ri* :state)
を呼んだ)、2度目のros::spin-once
にかかる時間を計測。(8回くらい)以下に示すようにcontroller actionのデータが支配的。
何もsubscribeしないpr2-interface
0.000484 0.00066 0.000555 0.001829
0.00043 0.000524 0.000489 0.002214
--> 0.0008983s程度
通常のpr2-interface
計測時間
0.06082 0.061493 0.07795 0.117355 0.078446 0.103501 0.080939 0.121987
--> 0.087811s程度
rarm, larm, head, torsoのcontroller系のみsubscribeしたpr2-interface
0.115325 0.053393 0.047287 0.04078 0.038668 0.090261 0.045294 0.054744
--> 0.060719s程度
rgripper, lgripper, movebaseaction, movebasetrajactionのcontrollerのみsubscribeするpr2-interface
0.032307 0.020242 0.027439
--> 0.026663s程度
joint_states のみのpr2-interface
0.004268 0.005096 0.011949 0.005918
0.011486 0.004679 0.013978 0.005114
--> 0.007811s程度
rl-gripper-pressureのみのpr2-interface
0.004494 0.001197 0.00128
--> 0.002324s程度
/base_odometry/odomのみのpr2-interface
0.001578 0.001852 0.002352 --> 0.001927s程度
tf のみのpr2-interface
0.000964 0.00047 0.000912 0.000416
--> 0.00069s程度
手元PC(参考程度)
roseus/test/talker.l
からpub(rate 10)される情報をsubscribeし、同様に処理時間を計測0.000145 0.00011 3.109300e-05 5.467700e-05
--> 8.519250e-05s程度
The text was updated successfully, but these errors were encountered: