Open Naoki-Hiraoka opened 2 years ago
情報共有のためのissueです.
min-max-tableのある関節を:inverse-kinematicsすると、:inverse-kinematicsの各イテレーションごとに:angle-vectorがわずかに振動します. そのため、操縦などで、数十~数百Hzで:inverse-kinematicsを解き直して短い補間時間で:angle-vectorを実機に逐次的に指令するような用途で使う場合には、注意が必要です.
min-max-table
:inverse-kinematics
:angle-vector
関節角度上下限は不等式制約ですが、sr-inverseに基づく逆運動学は不等式制約が扱えないので、:inverse-kinematicsでは前回のイテレーションで関節角度がlimitに近づいたならば、その関節のweightを大きくして動かしにくくする、というアプローチがとられています. https://github.com/euslisp/jskeus/blob/3040a1aa1cce1326c2e79890111d099b07207479/irteus/irtmodel.l#L1577-L1603
しかし、min-max-tableのある関節ではlimitの側も動くためか、関節角度がlimitに近づくのと遠ざかるのを交互にくり返す現象が発生することがあり、関節のweightが各イテレーションで急激に変動することで解の:angle-vectorが振動してしまうようです。
「前回のイテレーションで関節角度がlimitに近づいたならば、その関節のweightを大きくして動かしにくくする」機能を削除すると、振動しなくなりました。
自分はirteusでこの現象に遭遇したのではなく、同じアルゴリズムが採用されている別の逆運動学ソルバでこの現象に遭遇したのですが、同じアルゴリズムを使っているのでirteusでもこの現象が発生するだろうと思いこちらに共有させていただきました。
情報共有のためのissueです.
min-max-table
のある関節を:inverse-kinematics
すると、:inverse-kinematics
の各イテレーションごとに:angle-vector
がわずかに振動します. そのため、操縦などで、数十~数百Hzで:inverse-kinematics
を解き直して短い補間時間で:angle-vector
を実機に逐次的に指令するような用途で使う場合には、注意が必要です.関節角度上下限は不等式制約ですが、sr-inverseに基づく逆運動学は不等式制約が扱えないので、
:inverse-kinematics
では前回のイテレーションで関節角度がlimitに近づいたならば、その関節のweightを大きくして動かしにくくする、というアプローチがとられています. https://github.com/euslisp/jskeus/blob/3040a1aa1cce1326c2e79890111d099b07207479/irteus/irtmodel.l#L1577-L1603しかし、
min-max-table
のある関節ではlimitの側も動くためか、関節角度がlimitに近づくのと遠ざかるのを交互にくり返す現象が発生することがあり、関節のweightが各イテレーションで急激に変動することで解の:angle-vector
が振動してしまうようです。「前回のイテレーションで関節角度がlimitに近づいたならば、その関節のweightを大きくして動かしにくくする」機能を削除すると、振動しなくなりました。
自分はirteusでこの現象に遭遇したのではなく、同じアルゴリズムが採用されている別の逆運動学ソルバでこの現象に遭遇したのですが、同じアルゴリズムを使っているのでirteusでもこの現象が発生するだろうと思いこちらに共有させていただきました。