euslisp / jskeus

This repository contains EusLisp software developed and used by JSK at The University of Tokyo
23 stars 55 forks source link

fullbody-inverse-kinematicsをinverse-kinematicsから呼ぶ #137

Open snozawa opened 9 years ago

snozawa commented 9 years ago

Moved from https://github.com/jsk-ros-pkg/jsk_common/issues/244

今は

 :fullbody-inverse-kinematics が :inverse-kinematics を中で呼び出す  ユーザはfullbodyを使いたければ、:invesr-kinematicsでなく:fullbody-inverse-kinematics をよぶ

となってますが、よくよく考えると、

 :fullbody-inverse-kinematics は :inverse-kinematics を中で呼び出すが、  robot-model?とかの :inverse-kinematics は :fullbody-inverse-kinematicsを呼ぶ  ユーザはfullbodyを使いたければ, :inverse-kinematics target-coords :use-fullbody t のようによぶ

とすると統一感もでるし、始めて使う人にも使い勝手がいいのでは、と思いました。

結局はpr2eus/pr2-utils.lの:inverse-kinematicsのスタイルが個人的にはいいとおもっており、 これに相当するものをirtrobot.lのrobot-modelの:inverse-kinematicsにして、

use-torso use-base use-fullbody ....

などをこの中でサポートしていく、というかんじです。

k-okada commented 9 years ago

話のコンテキストを理解していないかもしれないけど,irteusでbodyがひとつのtreeになったので, body :inverse-kinematics target link-list というのが基本形で,link-listによって,use-torso, use-body, use-fullbodyというのが切り替えられる というのが教科書的ですよね. 本当は(inverse-kinematics target link-list)でいいのかもしれない. で, :use-torso t, :use-base t, :use-fullbody( use-leg?) t は便利オプションで本当は(send body :use-torso)(use-torso body)とかするとlink-listがでてきて 上の式に入るような感じですかね.(そうする必要はないとおもいますが) また,これ以外にbackward compatibilityとしてsend body :larm :inverse-kinematicsも何故か使えるという感じでしょうか.

2014-10-23 6:02 GMT+09:00 Shunichi Nozawa notifications@github.com:

Moved from jsk-ros-pkg/jsk_common#244 https://github.com/jsk-ros-pkg/jsk_common/issues/244

今は

:fullbody-inverse-kinematics が :inverse-kinematics を中で呼び出す ユーザはfullbodyを使いたければ、:invesr-kinematicsでなく:fullbody-inverse-kinematics をよぶ

となってますが、よくよく考えると、

:fullbody-inverse-kinematics は :inverse-kinematics を中で呼び出すが、 robot-model?とかの :inverse-kinematics は :fullbody-inverse-kinematicsを呼ぶ ユーザはfullbodyを使いたければ, :inverse-kinematics target-coords :use-fullbody t のようによぶ

とすると統一感もでるし、始めて使う人にも使い勝手がいいのでは、と思いました。

結局はpr2eus/pr2-utils.lの:inverse-kinematicsのスタイルが個人的にはいいとおもっており、 これに相当するものをirtrobot.lのrobot-modelの:inverse-kinematicsにして、

use-torso use-base use-fullbody ....

などをこの中でサポートしていく、というかんじです。

— Reply to this email directly or view it on GitHub https://github.com/euslisp/jskeus/issues/137.

snozawa commented 9 years ago

rteusでbodyがひとつのtreeになったので, body :inverse-kinematics target link-list というのが基本形で,link-listによって

はい、おっしゃるとおりで、基本は:inverse-kinematics+link-listですべてができて、

(send *robot* :larm :inverse-kinematics xxx)
(send *robot* :inverse-kinematics xxx :use-torso t)
(send *robot* :inverse-kinematics xxx :use-base t)
(send *robot* :fullbody-inverse-kinematics xxx ) ;; もしくは:use-fullbody t

はあくまで便利インターフェース、という立ち位置です。 https://github.com/euslisp/jskeus/pull/126

:use-torso t, :use-base t, :use-fullbody( use-leg?) t は便利オプションで本当は(send body :use-torso)(use-torso body)とかするとlink-listがでてきて 上の式に入るような感じですかね.(そうする必要はないとおもいますが)

こちらも確かにそうですね。

ただし、use-base, fullbody-inverse-kinematics(use-fullbody)などはちょっと特殊でテクいことをやっていて、

  1. :fullbody-inverse-kinematicsがよばれる
  2. virtual joint + virtual linkをルートリンクの先にasssocしたりする
  3. virtual joint + virtual linkをつかってinverse-kinematicsをとく
  4. virtual joint + virtual linkをdissocしたりして、何もない状態にもどす

としています。 ここで、2と4を処理するために、マクロwith-append-root-jointをつかっています https://github.com/euslisp/jskeus/blob/master/irteus/irtmodel.l#L2582

それ自体をまとめて呼び出すために、:fullbody-inverse-kinematicsを別メソッドとして定義したり、 use-baseはpr2-utils.lの中で直接かいたりされてる、という状況です。