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

rtcの守るべきマナー(JointAngleController) #1161

Open
YoheiKakiuchi opened this issue Jun 20, 2017 · 3 comments
Open

rtcの守るべきマナー(JointAngleController) #1161

YoheiKakiuchi opened this issue Jun 20, 2017 · 3 comments

Comments

@YoheiKakiuchi
Copy link
Contributor

特に getJointAngleControllerList(self): で返ってくるrtcについては、
qRef(inport)とq(output)を持っていて順次qRefとqをつないでいくことを前提にしていると
思うのですが、守るべきマナーはあるでしょうか?

ぱっと見に思いつくところとしては、以下があります。

  1. 中身の機能が働いていない場合は q = qRef を出力する
  2. qRefが来ない場合 qを出力しない
  3. サービスからenable/disableできる(?)
@snozawa
Copy link
Contributor

snozawa commented Jun 20, 2017

ご指摘ありがとうございます。
実はあまり深く考えてなかった+議論されてなかった点です。

現状当てはまる+暗黙のうちに考えてたルールは、おっしゃるものも含めて

  • 中身の機能が働いていない場合は q = qRef を出力する
  • サービスからenable/disableできる(遷移もちゃんと不連続にならないようにする)
  • hcf.xx.stop()(つまりonDeactivate)でdisable処理を行う(servoOn時にdisableされてないと、StateHolderのgoActualの後工程でも常に関節角を上がいてしまい、サーボエラーでサーボがはいらないため)

くらいだと思ってます(3つめはRFUが対応してなかったので直します)

qRefが来ない場合 qを出力しない

これは、RTCによってまちまちですが、ホントはだしたほうが良い気がしてきました。

@YoheiKakiuchi
Copy link
Contributor Author

qRefが来ない場合 qを出力しない
これは、RTCによってまちまちですが、ホントはだしたほうが良い気がしてきました。

出すなら、
a. 一度出していたら、前回と同じものを出す、
b. 一度も出していない(初期状態)なら、モデルとjoint lengthが同じで、すべての要素が0のangle-vectorを出力
でしょうか。

a.はそれほど問題になりそうにないですね。
現状では通常運用で、一度値が来て後に来なくなるのは上流側に問題がある場合であって、
その時点で全体的に見ればエラーになっている

b.はactivate直後は必ずこの状態になって、上流から関節角度がこなくても下流に関節角度を流す。
一応、stateholderがactivateされた直後で、かつ、すべてのrtcの立ち上げ前にgoActualされれば
一度も関節角度0のベルトルを扱う必要はなくなるが、現状でも実質そうなっていないので、問題ないように思う。

ちなみに、qRefがこなくてもqを出す場合の利点は何でしょうか?

@snozawa
Copy link
Contributor

snozawa commented Jun 20, 2017

b.はactivate直後は必ずこの状態になって、上流から関節角度がこなくても下流に関節角度を流す。
一応、stateholderがactivateされた直後で、かつ、すべてのrtcの立ち上げ前にgoActualされれば
一度も関節角度0のベルトルを扱う必要はなくなるが、現状でも実質そうなっていないので、問題ないように思う。

これ何でしょうか。
activate直後であってもonExecute通常実行時でも、接続が正常にされてる場合は、
qRefには前のRTCがwrite()した結果がはいっていてqに出力されます

それから、超すいません、

これは、RTCによってまちまちですが、ホントはだしたほうが良い気がしてきました。

これは私の日本語が誤ってました。
RTCによってまちまちですが、qRefが出力されてないときはqを出力しないほうが良いです。
また、qRefが着ていない
https://github.com/fkanehiro/hrpsys-base/blob/master/rtc/SoftErrorLimiter/SoftErrorLimiter.cpp#L400-L405
というのは、あくまで設定・接続か何かに不備があり、そうでなければqRefがでてて
上記のようなワーニングがでないです。

ワーニングをだしたほうがよい、とかこうとして誤りました。

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

2 participants