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

SimpleFullbodyInverseKinematicsSolverのm_robotをpublicにしたりエンドエフェクタ位置を取得する関数を追加したい #1149

Closed
ishiguroJSK opened this issue Jun 4, 2017 · 6 comments

Comments

@ishiguroJSK
Copy link
Contributor

ishiguroJSK commented Jun 4, 2017

AutoBalancer.hの

class SimpleFullbodyInverseKinematicsSolver
{
private:
    // Robot model for IK
    hrp::BodyPtr m_robot;

のm_robotをpublicかpublic constメンバにして頂けると,
このクラスを生成以降,

fik->ikp["rleg"].target_p0
とか
fik->m_robot->calcForwardKinematics();

みたいに統一的にアクセスできるのですがダメでしょうか?
あと

hrp::Vector3 getEEPos(const std::string& limb_name){
  return ikp[limb_name].target_link->p + ikp[limb_name].target_link->R * ikp[limb_name].localPos;
}
hrp::Matrix33 getEERot(const std::string& limb_name){
  return ikp[limb_name].target_link->R * ikp[limb_name].localR;
}

みたいなエンドエフェクタの位置姿勢が取得できるメソッドを追加したいです
(毎度fik->ikp["rleg"].target_link->p+ fik->ikp["rleg"].target_link->R * fik->ikp["rleg"].localPosと書くのがしんどいので・・・)

@snozawa
Copy link
Contributor

snozawa commented Jun 6, 2017

みたいに統一的にアクセスできるのですがダメでしょうか?

これはAutoBalancer.cpp内部のSimpleFullbodyInverseKinematicsSolver以外の
箇所でつかうときに、面倒じゃないようにするということかな?

また、

みたいなエンドエフェクタの位置姿勢が取得できるメソッドを追加したいです

これもAutoBalancer.cpp内で使うために、AutoBalancerに追加するということかな?
これは追加するので良い気がします
(ただ、微妙にlocalPosの他に色々たしてる箇所もあるので、この関数がそのまま使えない箇所もありそう)

@ishiguroJSK
Copy link
Contributor Author

AutoBalancer.hのSimpleFullbodyInverseKinematicsSolverクラスを別のRTCでインクルードして使ったりしているのですが,現在だとSimpleFullbodyInverseKinematicsSolverのインスタンス(へのポインタ)fikとm_robotに対して,欲しい情報によってfik->としたりm_robot->としたりしているのですが,fikの中にm_robotを保持しているので,fik->とfik->m_robot->と統一できたら色々関数の引数に渡したいときにもfik一つで全情報渡せて嬉しいかなぁと思っていました.
getEEPosなどはAutoBalancer.hのSimpleFullbodyInverseKinematicsSolverのクラスメンバに追加すると便利だと思っています

@snozawa
Copy link
Contributor

snozawa commented Jun 6, 2017

AutoBalancer.hのSimpleFullbodyInverseKinematicsSolverクラスを別のRTCでインクルードして使ったりしているのですが,現在だとSimpleFullbodyInverseKinematicsSolverのインスタンス(へのポインタ)fikとm_robotに対して,欲しい情報によってfik->としたりm_robot->としたりしているのですが,fikの中にm_robotを保持しているので,fik->とfik->m_robot->と統一できたら色々関数の引数に渡したいときにもfik一つで全情報渡せて嬉しいかなぁと思っていました.

まず、他のから使うのであれば、SimpleFullbodyxxxはAutoBalancer.h以外の場所にあるのが良いですね。
もっとも単純にはrtc/AutoBlancer/以下にSimpleFulbodyxxxx.h,cppなどを追加するかんじでしょうか。

それで、fikをつかうプログラムはfikの初期化時に引数でm_robotを与えてると思うので、
そのプログラムではm_robot自体をもってるんだよね?

  • 今までは fik/m_robotと記述してた
  • 今後は fik/fik->m_robotと記述したい

ということなのかな?わざわざfik->m_robotとするのはかえって面倒ではないかな?
また、fikのメンバを外から積極的に使うのはあまりきれいではないような気がします。

色々関数の引数に渡したいときにもfik一つで全情報渡せて嬉しいかなぁと思っていました.

情報をわたすといった部分も、具体的に何がしたいかがわかるとよいのかも

getEEPosなどはAutoBalancer.hのSimpleFullbodyInverseKinematicsSolverのクラスメンバに追加すると便利だと思っています

このへんの必要そうなメンバは追加するので良い気がします。

@ishiguroJSK
Copy link
Contributor Author

fik生成後にfikだけにある情報とm_robotだけにある情報それぞれ初期化したりするときなどに別々の変数に初期化しにいくのが冗長かなぁと思っていましたが,ただの美学なのでやっぱりいいです.
ということは今回の変更はSimpleFulbodyxxxx.hに分離すること(.cppにするほどではないと思っていますが)とgetEEPos関数を追加することでよろしいでしょうか(命名規則なども)?

@snozawa
Copy link
Contributor

snozawa commented Jun 6, 2017

ということは今回の変更はSimpleFulbodyxxxx.hに分離すること(.cppにするほどではないと思っていますが)とgetEEPos関数を追加することでよろしいでしょうか(命名規則なども)?

そうですね。
前者は.hくらいでも良いかなとは思います。
後者は、(そもそもすでにEEとかいてるプログラムもあるのでアレですが)一応
getEndEffectorPosとかの中身のわかる名前でお願いします。

@ishiguroJSK
Copy link
Contributor Author

#1150 でマージされたのでcloseします

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