-
Notifications
You must be signed in to change notification settings - Fork 81
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
inverse-kinematicsで手首が360度回転してしまう #87
Comments
この現象が生じるサンプルコードを添付するか,あるいはjsk_2013_04_pr2_610のどこかのコードの関数を実行すると,この現象になるとか,教えてください. |
|
以下のコードで発生しました。 (send pr2 :reset-pose) (send ri :stop-grasp :larm) |
(load "package://pr2eus/pr2-interface.l") (setq pr2 (pr2)) (send pr2 :angle-vector #f(.....)) みたいな10行以内のサンプルで再現するコードは作れたりするかな? |
添付したコードで再現されるようです。 |
これはかなり難しいですね.簡単な解決としては, 本格的な解決は少し考える時間が必要な気がします. |
[r4195]でpr2-interface.l直しました.pr2eusをsvn upして送ってくれたサンプルプログラム,並びに元のプログラムを動かしてください.治っていると思います.また副作用がある可能性もあるので,皆さん自分のプログラムを動かして書くにしてもらえると助かります.
今回の例題では
ということで,angle-vector-sequenceでは2つの指令値の差分をみて回転角度で180度を超えているところがあれば,その中間の指令値をangle-vector-sequenceの間に入れ込むという作業をしている. angle-vectorの場合は最後の指令値を:reference-vectorで持ってきてこれと指令値の差分をみて180度を超えているか調べているが,この部分はちょっと心配.:potentio-vectorで持ってくると180になったり-180になる関節があり,360度回転する関節が出てくるため. デバッグtips roslaunch pr2_gazebo pr2_empty_world.launch とすると,実機と全く同じインターフェースをもつシミュレータが立ち上がるので大変便利 |
返信が遅くなってしまいました。 また |
なるほど,robot-interface.lの:anlge-vectorでは:sub-angle-vectorをつかって,無限回転の場合は近い方に動く(実機と同じ動きをする)ようになっていまいした.ということで,pr2-interfaceの:angle-vectorで,180度を超える動きをするときに:angle-vector-sequenceを使う,というコードをpr-2interfaceでも動くようにしました.[r4220] |
添付のコードで腕が回ってしまうことを確認しました。 |
5/1日に報告してくれたtest.lは治っているはずです.また, |
添付のコードで手先がクルッとしてしまいます。 |
test2.lは関節の肘ロールがリミットの180付近にあるのが問題のようです. なお,この問題と,そもそもこのチケットで問題になった事柄は微妙に違う問題です. |
move-toなどで移動中にも(PR2のangle-vectorに送っていなくても)手首が回転してしまう時があります。 |
でダメな例があるようです。以下のようなメッセージはでているんだけど。。。
|
another test code to check
|
|
pr2-ri-test.l を追加しました.
手がひっくり返るので,そもそもの指令値がいけない,ということになります. そもそも,なぜひっくり返る指令が出るかという事ですが,
で,途中で関節がリミット(無限関節における270のリミット)を超えていますね. |
で,angle-vectorを送るときに,手先の座標系での補間する:angle-vector-with-constraintを作りました.[r4613], pr2-interface.lに定義していますが,robot-interface.lにいれるのでいいでしょうか?いまは:larm,:rarmになっていますが,:armsが必要か,とか,use-torsoはどうする?とか,unless joint-action-enableでいいのか?((send self :simulation-modep)を使う?使い分けは?)などの疑問が開発者向けにはあります. 利用者の人はどうしても手が回ってしまう時に, |
:angle-vector-with-constraint ですが,[r4634]で:armsにも対応しました. |
https://sourceforge.net/p/jskeus/tickets/29/ #29 無限回転関節でのIKで,関節リミットを超える 全て同じ問題ですが,復習すると, 実機の方の振る舞いとしては,実機の補間器は近い方の回転を選ぶ,つまり−180度の時に180度を 昔は,_ri_は直せつ実機の補間機に送っていたが, 昔の仕様を1),今の仕様を2)とすると, 1)昔の仕様だと180度を超えた指令をしないようにしないといけない.したがって, 2)今の仕様だと上の問題はなくなったが,今度はIkを説くときに180/−180の仮想リミットを とはいえ1に戻ると,今度はやはり180度を超える問題は解決できない.ということで, つまり以下のような変更を加えるということです.これでいいような気がしますが
|
IRTデモを行ったところ不自然な回転はしないようになりました。 |
|
[travis.sh] do not error when .rosinstall is not exists
This post was originally posted at http://sourceforge.net/p/jsk-ros-pkg/tickets/91
The text was updated successfully, but these errors were encountered: