start-jsk/rtmros_gazebo

atlasでインピーダンス制御を入れると手が振動する

Closed this issue · 11 comments

hrpsysを使ったgazebo上のatlasシミュレーションで、atlas-interface.lの関数から
(send *ri* :start-impedance)
としてインピーダンス制御を入れてみたところ、手が激しく振動してしまいました。
KMDパラメータを変更して試してみたのですがやはり振動が止まらず、振動の中心も目標位置とは大きく離れています。

(send *ri* :start-impedance :rarm :force-gain #f(1 1 1) :moment-gain #f(0 0 0) :m-p 100 :k-p 100 :d-p 0)とした場合と、(send *ri* :start-impedance :rarm :force-gain #f(1 1 1) :moment-gain #f(0 0 0) :m-p 0 :k-p 100 :d-p 0)とした場合のgazeboや手のセンサ値のスクリーンショットを添付します。
atlas_impedance
atlas_impedance_2

Please increase :d-p parameter, which corresponds to damping coefficient and restricts oscillation.

For more debug, please check the same codes on hrpsys-simulator.

hrpsysを経由せずに力センサの値って読めるんでしたっけ?

-- ryohei

2014-06-18 17:09 GMT+09:00 Satoshi Iwaishi notifications@github.com:

hrpsysを使ったgazebo上のatlasシミュレーションで、atlas-interface.lの関数から
(send ri :start-impedance)
としてインピーダンス制御を入れてみたところ、手が激しく振動してしまいました。
KMDパラメータを変更して試してみたのですがやはり振動が止まらず、振動の中心も目標位置とは大きく離れています。

(send ri :start-impedance :rarm :force-gain #f(1 1 1) :moment-gain #f(0
0 0) :m-p 100 :k-p 100 :d-p 0)とした場合と、(send ri :start-impedance :rarm
:force-gain #f(1 1 1) :moment-gain #f(0 0 0) :m-p 0 :k-p 100 :d-p 0)
とした場合のgazeboや手のセンサ値のスクリーンショットを添付します。
[image: atlas_impedance]
https://cloud.githubusercontent.com/assets/6835506/3311081/b152336e-f6bf-11e3-8f28-5ca1da100f58.png
[image: atlas_impedance_2]
https://cloud.githubusercontent.com/assets/6835506/3311082/b152db84-f6bf-11e3-9b2b-3ee3402d23e3.png


Reply to this email directly or view it on GitHub
#74.

hrpsysを経由せずに力センサの値って読めるんでしたっけ?

Yes, you can get sensor information by
rostopic echo /atlas/atlas_state

Please check following pages:
http://gazebosim.org/wiki/DRC/UserGuide
https://bitbucket.org/osrf/drcsim/src/060fccdc7a7219112b07d8d69957492359f96a9e/atlas_msgs/msg/AtlasState.msg?at=default

gazebo上のロボットは,自己干渉がないかのように振る舞い
手先が自身の胸にめり込むということが起きるのですが,
センサ情報はめり込んだ通りの値(激しく振れる値)が返ってくる
ということが分かりました.

結局,インピーダンスのパラメータを調整したら
正常にインピーダンスを使えるようになりました.

reset-manip-poseで以下のようにしてimpedanceを開始すると使えます.

(send *ri* :set-impedance-controller-param :rarm :m-p 200 :d-p 2000 :k-p 2000)
(send *ri* :start-impedance :rarm)

これまでは,
デフォルトのパラメータでインピーダンスをスタートして
手先が体にめり込んでからパラメータ調整していたのですが,
めり込んだ時点でセンサ情報が激しく振動しているので
パラメータ調整の意味がないという感じでした.

また,#86
(atlas-init)の時点で力センサのオフセット修正情報をロードするようにしたので,
手先自重も多少は解消されると思います.

(send *ri* :set-impedance-controller-param :rarm :m-p 200 :d-p 2000 :k-p 2000)
(send *ri* :start-impedance :rarm)

で振動しなくなりました。
ありがとうございます。

そのパラメータをatlas-interface.l の中にデフォルト値でセットしておくのがいいかな.

On Tue, Jul 1, 2014 at 12:35 PM, Satoshi Iwaishi notifications@github.com
wrote:

(send ri :set-impedance-controller-param :rarm :m-p 200 :d-p 2000 :k-p 2000)
(send ri :start-impedance :rarm)

で振動しなくなりました。
ありがとうございます。


Reply to this email directly or view it on GitHub
#74 (comment)
.

思いつく方法は2つあって

  1. (send *ri* :start-impedance)としたときに(send *ri* :start-impedance :m-p 200 :d-p 2000 :k-p 2000)となるように引数のデフォルト値を設定する
  2. (atlas-init-ex)などの初期化関数でimpedance-controller-param的なものを上記の値に設定する

といったところですが、
1の方法だとパラメータをセットしてからスタートするのと同じ挙動をするのかどうか心配です。(先日数回試した感じだと、スタート時にパラメータを指定する方法だとたまにうまくいかない印象がある。)
2の場合、どのようにすればパラメータ設定だけをできるのか分かりません。((send *ri* :set-impedance-controller-param)は、実行した時点でインピーダンス制御が始まってしまっている感じがする。)

どのようにするのがよいでしょうか?

1でいいんじゃない?
うごかなかったらhrpsys-ros-bridge共通の問題なので

1の方針で #90 のようにしてみました。

2の場合、どのようにすればパラメータ設定だけをできるのか分かりません。((send ri :set-impedance-controller-param)は、実行した時点でインピーダンス制御が始まってしまっている感じがする。)

startとsetをわけるのは
fkanehiro/hrpsys-base#232
で議論されており、すこしまっていただければ修正します。