Skip to content
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

【SequencePlayer】setWrenches等にtm=0を与えた場合の挙動のバグについて #1330

Open
Naoki-Hiraoka opened this issue Jul 14, 2023 · 2 comments

Comments

@Naoki-Hiraoka
Copy link
Contributor

Naoki-Hiraoka commented Jul 14, 2023

SequencePlayerのsetZmp setBasePos setBaseRpy setWrenchesサービスにtm=0を与えると、出力が即座に変化することが期待されます。しかし実際には出力は変化せず、次にこれらのサービスにtm!=0を与えたときに出力が即座に変化してから次の補間が始まります。

(send *ri* :set-ref-force #F(100 0 0) 0) ;; 何も起こらない. 出力は#F(0 0 0)のまま.
(send *ri* :set-ref-force #F(200 0 0) 10000) ;; 出力が#F(100 0 0)にジャンプする. その後10000msかけて#F(200 0 0)に遷移する.
(send *ri* :set-ref-force #F(50 0 0) 10000) ;; 10000msかけて#F(50 0 0)に遷移.
(unix::sleep 5)
(send *ri* :set-ref-force #F(100 0 0) 0) ;; 何も起こらない. 残りの5000msで#F(50 0 0)に遷移.
(send *ri* :set-ref-force #F(200 0 0) 10000) ;; #F(50 0 0)から10000msかけて#F(200 0 0)に遷移する.

原因は、2つあります.

  1. ここでinterpolator::clear()が呼ばれないため
    interpolators[WRENCHES]->set(i_wrenches);
  2. 補間時間0だとここの分岐で補間完了とみなされてSequencePlayerが休眠するため
    if (m_seq->isEmpty()){
@Naoki-Hiraoka
Copy link
Contributor Author

2については、SequencePlayerとStateHolderが別々のRTCになっていることがそもそもの原因のため、直すことは困難です。

@Naoki-Hiraoka
Copy link
Contributor Author

似ているが原因に直接の関係は無いissue
start-jsk/rtmros_common#1037

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant