Closed Naoki-Hiraoka closed 3 years ago
https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid_tutorials/models/JAXON_JVRC.PDgains.sav
と
https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid_tutorials/models/JAXON_JVRC.PDgains_sim.dat
が同じ値になっているのを見ると,
上に書いたpdgains_sim_file_name
とpdgains.file_name
の関係は,現在の運用とは異なっているようです.
現在,pdgains_sim_file_name
とpdgains.file_name
の関係はどうなっているのでしょうか.
@kindsenior
上に書いたpdgains_sim_file_nameとpdgains.file_nameの関係は,現在の運用とは異なっているようです. 現在,pdgains_sim_file_nameとpdgains.file_nameの関係はどうなっているのでしょうか.
このPRをマージするとトルク制御モードで起動後関節が暴れるので,運用が異なっているということだと思いますが,現状どうなっているか教えてくれると助かります.
現状を整理すると,
現在のmasterでは,関節ゲインは起動直後はpdgains_sim_file_name
の値.iob.hのwrite_pgain
等を呼ぶと引数の値で上書きされる.
このPullRequestでは,関節ゲインは起動直後はpdgains_sim_file_name
の値.iob.hのwrite_pgain
等を呼ぶと引数の値とpdgains_sim_file_name
の値を掛けた値になる.
となっていて,
hrpsysは,RobotHardwareService
のsetServoGainPercentage
やpower
がよばれると,pdgains.file_name
の値を引数としてiob.hのwrite_pgain
等を呼びます.
問題をややこしくしているのは,以下の3点です.
write_pgain
等は,https://github.com/fkanehiro/hrpsys-base/blob/e98cf26c12eeeda761cef5b836e9640d68bf7387/lib/io/iob.h#L336 によれば単位は[Nm/rad]となっているが,実機の某ロボットはそうなっていない.RobotHardwareService
のpower
を呼ぶので,write_pgain
が呼ばれる.しかし,hrpsys_choreonoidはシミュレーション開始時にRobotHardwareService
のpower
を呼ばないので,write_pgain
が呼ばれない.が,hrpsys_choreonoidでもRobotHardwareService
のsetServoGainPercentage
やpower
を呼ぶと,write_pgain
が呼ばれる.pdgains_sim_file_name
はシミュレーション時のゲイン」「pdgains.file_name
は実機のゲイン」というような区別をできていない.URATA系のロボットは、もともと関節のゲイン(Nm/rad)が分かっていないので、 pdgains.file_name(実機)は全関節のゲインに1.0が入っている。
pdgains_sim_file_nameはsimulationに使う関節の実ゲイン(Nm/rad)が入っている。
1.0 x sim_gain をゲインとして使っていて、RobotHardwareを使うことで、 setJointGainPercentage等を使えるようになっている。 (シミュレーションだとpowerを呼ばない前提)
と思っていたのだけど、そうなっていなかったのを平岡くんが今回正しく直してくれたんだと思っています。
あと、JAXON_JVRCは古い実装で、RobotHardwareを使わないので比較に入れないほうがいいです。 JAXON_JVRCもRobotHardwareで動くはずなので、全部そちらに移行するのはありだと思います。
USE_ROBOTHARDWARE:=trueしてるときでも呼ばれるのは https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid_tutorials/models/JAXON_JVRC.PDgains.sav だったんですね. 上のgainを全部1にするとこのPRありで正常に起動しました.
ということで,このPR方針が正しくて https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid_tutorials/models/JAXON_JVRC.PDgains.sav も併せて直すということでいいでしょうか?
@YutaKojio そうですね。その方針で、JAXONも常にUSE_ROBOTHARDWARE:=trueにしましょうか。
皆様ありがとうございます。 このPRの方針で進めます。
https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid_tutorials/models/JAXON_JVRC.PDgains.sav をすべて1にし、JAXONも常にUSE_ROBOTHARDWARE:=trueにしました
すみません.出遅れました
僕も全ては理解できていませんでしたが, @YoheiKakiuchi の通りだと思うので,このPRの方針で問題ないと思います
以下補足です
HRP-2はトルク制御ができないので関係ないかもしれませんが, トルク制御モードのとき(isPosTq[i]がtrue)のPDゲインの扱いとして現状の https://github.com/start-jsk/rtmros_choreonoid/blob/e1b66948ce8ac12c20e44c3f8016e1106cb69f15/hrpsys_choreonoid/iob/iob.cpp#L777-L781 は不都合だと思っていて ee548e1ca49afdb961e65fabc8f4f532603cd666 の https://github.com/kindsenior/rtmros_choreonoid/blob/84cdfaddaa3e82c2bf128f34e07098e026a1e463/hrpsys_choreonoid/iob/iob.cpp#L780-L783 のように単純にトルクとPD制御を足すべきだと思っています
このようにするとトルクのゲインに関しては,initial_tqPgainもtqPgainも0-1の値になるようになります (トルクのmaxゲインは常に0 or 1で,真のゲインも割合を示すゲインも0-1)
なのでPRを出せていなくて申し訳ないのですが, もしトルク制御を使う予定があるならトルクのPDゲインに関しては 7a2f376ba078bb439644587b952ded6b2743520c のようにするといいと思っています
mergeをお願いできますでしょうか.
PDゲインに関するバグを直すPull Requestです.
RobotHardwareService
のsetServoGainPercentage
を呼ぶと,もともと数万だったゲインの値が突然1になるというバグがありました.現在choreonoidの世界で実際に関節のトルクに適用されるPDゲインは, 始めは
.conf
のpdgains_sim_file_name
に書かれた値 ですが, 一度でもRobotHardwareService
のsetServoGainPercentage
やpower
が呼ばれると, 以後は.conf
(または.RobotHardware.conf
)のpdgains.file_name
に書かれた値 になってしまい,pdgains_sim_file_name
の値が参照されなくなります.https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/iob/iob.cpp と同様に, 始めは
.conf
のpdgains_sim_file_name
に書かれた値 ですが, 一度でもRobotHardwareService
のsetServoGainPercentage
やpower
が呼ばれると, 以後は.conf
のpdgains_sim_file_name
に書かれた値に.conf
(または.RobotHardware.conf
)のpdgains.file_name
に書かれた値をかけたものになるようにしました..conf
のpdgains_sim_file_name
= hrpsysが関知しないハードウェア側が持つゲイン.conf
(またはRobotHardware.conf
)のpdgains.file_name
= hrpsysが関知するゲイン