Skip to content
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

SampleRobot_inHouse.xmlを実行すると発散する #1

Open
fkanehiro opened this issue Aug 10, 2014 · 16 comments
Open

SampleRobot_inHouse.xmlを実行すると発散する #1

fkanehiro opened this issue Aug 10, 2014 · 16 comments

Comments

@fkanehiro
Copy link
Owner

サンプルプロジェクトのSampleRobot_inHouse.xmlを実行すると、開始後数ms程度で計算が発散し、ロボットが飛んでいってしまう。

@hattorishizuko
Copy link
Contributor

原因は、リビジョン2614で sample/model/sample1.wrlのmomentsOfInertiaやcenterOfMassの値が変更されたためです。変更前の値で動くようにPDサーボのゲインが調整されているので、これらの値を変更すると、飛んでしまいます。

@fkanehiro
Copy link
Owner Author

@k-okadaさん、リビジョン2614というのは@k-okadaさんの変更ですので、対応をお願いします。

@k-okada
Copy link
Contributor

k-okada commented Aug 11, 2014

https://openrtp.jp/redmine/issues/2164 をみると,@YoheiKakiuchi さんが変更しているようです.
@YoheiKakiuchi さん,対応をお願いします.
どちらを変更すべきでしょうか?PDサーボのゲインでしょうか?PDサーボ側ですかね?

samplerobotの質量中心、慣性行列、角度リミット
kakiuchi が11ヶ月前に追加. 9ヶ月前に更新.

Samplerobotの質量中心がモデルのジオメトリ(メッシュ)の内部に無いリンクがいくつかあります。
また、慣性行列が単位行列になっており、質量に比べて大きすぎます。
関節に角度リミットが設定されていません。

添付のパッチに、質量中心、質量の見直し、慣性行列の見直し、腕の角度リミットの追加を行いました。
質量中心はジオメトリの中心に近くなるようにしました。
慣性行列は、直方体または円柱近似した密度一定の物体とした慣性行列に近くなるようにしました。

確認よろしくおねがいします。

@fkanehiro
Copy link
Owner Author

PDゲインを下げるか、ロータイナーシャを設定して発散を防ぐかですね。

@k-okada
Copy link
Contributor

k-okada commented Aug 12, 2014

�$B$3$N%m%%C%H$N>l9g%m!<%?!<%$%J!<%7%c$O$I$&$$$&J}?K$GCM$r$-$a$?$i$$$$$+!"%"%I%P%$%9E*$J$b$N$O$"$j$^$9$G$7$g$&$+!)�(B


Kei Okada

2014/08/12 5:37�$B!"�(Bfkanehiro [email protected] �$B$N%a%C%;!<%8�(B:

PD�$B%2%$%s$r2<$2$k$+!"%m!<%?%$%J!<%7%c$r@_Dj$7$FH/;6$rKI$0$+$G$9$M!#�(B

�$B!=�(B
Reply to this email directly or view it on GitHub.

@fkanehiro
Copy link
Owner Author

化けてます。

@k-okada
Copy link
Contributor

k-okada commented Aug 12, 2014

失礼しました

このロボットの場合ローターイナーシャはどういう方針で値をきめたらいいか、アドバイス的なものはありますでしょうか?

@fkanehiro
Copy link
Owner Author

実在のロボットがある場合は、実際の値を入れればいいわけですが、今回のような架空のロボットに関しては、ロボットの重量やサイズ等から実在したらこういうモータ、ギヤ比だろうというという想定の元に値を設定するぐらいでしょうか。

@snozawa
Copy link
Contributor

snozawa commented Aug 12, 2014

hrpsys-baseで
fkanehiro/hrpsys-base#293
を作成したときに、sample1.wrlにギア比とロータイナーシャを適当にいれて、
適当なゲインにしたところ直立・歩行などできたので、
https://github.com/fkanehiro/hrpsys-base/blob/master/sample/SampleRobot/SampleRobot.PDgain.dat
手元にはあります。

結局sample1.wrlとゲインの2つ修正することになりますが、
この修正でPRでよろしいでしょうか。

ついでで、2点質問があります。

  1. hrpsys-simulatorからのサンプル起動方法
    Add PD controller and examples hrpsys-base#293
    で教えていただいた方法で起動してみましたが、
[http://hrp2007v:10007] nozawa@W540-nozawa:~/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/controller/SamplePD$ /home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/hrpsys/bin/hrpsys-simulator ../../project/SamplePD.xml 
sh: 1: rtcprof: not found
sh: 1: rtcprof: not found
createBody(floor,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/floor.wrl)
Loading body customizer "/home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/customizer/libSampleCustomizer.so" for springJoint
createBody(sample,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/sample.wrl)
factory name for SamplePD0 is not defined
sample:0.002
making a connection between sample.angle and SamplePD0.angle
terminate called after throwing an instance of 'CORBA::TRANSIENT'
中止 (コアダンプ)

とエラーになりました(hrpsys-simulatorのGUIが上がり、ロボットが表示され、ただしSamplePDがよみこまれないのでグシャっとなる)。
SamplePD/rtc.confのpreload指定が

manager.modules.preload: SamplePD

となっていたので

manager.modules.preload: SamplePD.so

とするとloadされて、ロボットの歩行サンプルも動きましたが、他の環境では動いているのでしょうか。
それとも何か設定されてますでしょうか(BIN_SFX的なもので)
2. SampleRobot_inHouse.xmlについて
SampleRobot_inHouse.xmlがsample1.wrlの唯一のサンプルになってると思いますが、起動時にエラーがでました。

[http://hrp2007v:10007] nozawa@W540-nozawa:~/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/controller/SampleController$ /home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/hrpsys/bin/hrpsys-simulator ../../project/SampleRobot_inHouse.xml
createBody(Robot,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/sample1.wrl)
Loading body customizer "/home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/customizer/libSampleCustomizer.so" for springJoint
createBody(box,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/house/box.wrl)
createBody(floor,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/house/floor.main.wrl)
createBody(house,file:///home/nozawa/ros/groovy/rtm-ros-robotics/openrtm_common/openhrp3/share/OpenHRP-3.1/sample/project/../model/house/house.main.wrl)
omniORB: From endpoint: giop:tcp:133.11.216.163:50063. Detected GIOP 1.2 protocol error in input message. giopImpl12.cc:300. Connection is closed.
terminate called after throwing an instance of 'CORBA::COMM_FAILURE'
中止 (コアダンプ)

のようにCORBAのエラーのようなのですが、何かわかりますでしょうか。

よろしくお願いいたします。

@fkanehiro
Copy link
Owner Author

こちらでログレベルをPARANOIDにしてSamplePDを走らせた時のログの一部は次のようになっています。

Aug 12 05:33:44.850 TRACE: ModuleManager: load(fname = SamplePD, init_func = SamplePDInit)
Aug 12 05:33:44.850 TRACE: ModuleManager: load(fname = SamplePD)
Aug 12 05:33:44.860 ERROR: manager: Module load error: Invalid file name.
Aug 12 05:33:44.860 TRACE: manager: Manager::createComponent(SamplePD)
Aug 12 05:33:44.860 TRACE: manager: RTC basic propfile vendor: 
Aug 12 05:33:44.860 TRACE: manager: RTC basic propfile category: 
Aug 12 05:33:44.860 TRACE: manager: RTC basic propfile implementation_id: SamplePD
Aug 12 05:33:44.860 TRACE: manager: RTC basic propfile version: 
Aug 12 05:33:44.861 ERROR: manager: Factory not found: SamplePD
Aug 12 05:33:44.861 TRACE: ModuleManager: getLoadableModules()
Aug 12 05:33:44.861 DEBUG: ModuleManager: langs: C++, Python, Java
Aug 12 05:33:44.861 DEBUG: ModuleManager: suffixes: so
Aug 12 05:33:44.861 DEBUG: ModuleManager: Module load path: ./
Aug 12 05:33:44.861 DEBUG: ModuleManager: File list (path:./, ext:so): SamplePD.so
Aug 12 05:33:44.861 DEBUG: ModuleManager: New module: ./SamplePD.so
Aug 12 05:33:44.861 DEBUG: ModuleManager: Module load path: .
Aug 12 05:33:44.861 DEBUG: ModuleManager: File list (path:., ext:so): SamplePD.so
Aug 12 05:33:44.861 DEBUG: ModuleManager: New module: ./SamplePD.so
Aug 12 05:33:44.861 DEBUG: ModuleManager: C++: ./SamplePD.so, ./SamplePD.so
Aug 12 05:33:44.886 DEBUG: ModuleManager: rtcprof cmd sub process done.
Aug 12 05:33:44.911 DEBUG: ModuleManager: rtcprof cmd sub process done.
Aug 12 05:33:44.911 DEBUG: ModuleManager: Modile profile size: 2 (newly founded modules)
Aug 12 05:33:44.911 DEBUG: ModuleManager: suffixes: py
Aug 12 05:33:44.911 DEBUG: ModuleManager: Module load path: ./
Aug 12 05:33:44.911 DEBUG: ModuleManager: File list (path:./, ext:py): 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Module load path: .
Aug 12 05:33:44.911 DEBUG: ModuleManager: File list (path:., ext:py): 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Python: 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Modile profile size: 0 (newly founded modules)
Aug 12 05:33:44.911 DEBUG: ModuleManager: suffixes: class
Aug 12 05:33:44.911 DEBUG: ModuleManager: Module load path: ./
Aug 12 05:33:44.911 DEBUG: ModuleManager: File list (path:./, ext:class): 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Module load path: .
Aug 12 05:33:44.911 DEBUG: ModuleManager: File list (path:., ext:class): 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Java: 
Aug 12 05:33:44.911 DEBUG: ModuleManager: Modile profile size: 0 (newly founded modules)
Aug 12 05:33:44.911 DEBUG: ModuleManager: Modile profile size: 2
Aug 12 05:33:44.911 DEBUG: ModuleManager: Modile profile size: 2 (invalid mod-profiles deleted)
Aug 12 05:33:44.911 INFO: manager: 2 loadable modules found
Aug 12 05:33:44.911 INFO: manager: Loading module: SamplePD.so
Aug 12 05:33:44.911 TRACE: manager: Manager::load(fname = SamplePD.so, initfunc = )
Aug 12 05:33:44.911 TRACE: ModuleManager: load(fname = SamplePD.so, init_func = SamplePDInit)
Aug 12 05:33:44.911 TRACE: ModuleManager: load(fname = SamplePD.so)
Aug 12 05:33:44.912 TRACE: manager: Manager::registerFactory(SamplePD)
Aug 12 05:33:44.912 DEBUG: manager: module path: ./SamplePD.so

最初にSamplePDで見に行って失敗し、その後ロードパスを手がかりにSamplePD.soを見つけたようです。
なぜうまくいかないのでしょうね?

SampleRobot_inHouseのエラーはCORBAのメッセージのサイズが小さすぎるために起きる問題です。
/etc/omniORB.cfgの

############################################################################
# giopMaxMsgSize
#
#    This value defines the ORB-wide limit on the size of GIOP message 
#    (excluding the header). If this limit is exceeded, the ORB will
#    refuse to send or receive the message and raise a MARSHAL exception.
#
#    Valid values = (n >= 8192)
#
giopMaxMsgSize = 2097152    # 2 MBytes.

という部分を適当に大きくする、コマンドラインオプションで大きな値を指定する等の対処をしてください。

SampleRobot_inHouseでの動作確認がとれましたらsample1.wrlへの変更のPRを出して頂けると助かります。

@snozawa
Copy link
Contributor

snozawa commented Aug 12, 2014

前者は、rtcprofがnot foundとでてましたので、openrtmのbinにPATHを通したら
rtc.confにSamplePD.soとかかずともうまくいきました。

後者もgiopMaxMsgSizeを20971520と10倍くらに変更すると、うまくいきました。

ありがとうございます。

SampleRobot_inHouseでの動作確認がとれましたらsample1.wrlへの変更のPRを出して頂けると助かります。

こちらも出しておきます。

@k-okada
Copy link
Contributor

k-okada commented Aug 27, 2014

そもそもモデルを変更したのはなぜでしたけ?気持ち悪いから? なにか動かないものがあったから? @YoheiKakiuchi

@YoheiKakiuchi
Copy link
Contributor

なにか動かないものがあったから?

gazeboで変換したモデルを使った時に発散してしまったためです。

@k-okada
Copy link
Contributor

k-okada commented Aug 27, 2014

なぜopenhrp3でシミュレーションしたら発散せずにgazeboで発散したんだろうか?

@YoheiKakiuchi
Copy link
Contributor

関節角度指令をPID制御してトルクを関節に与えるようにする(drcsimはこの仕様)と
モデルの重量、慣性によっては発散、振動してしまいます。
関節速度を与えるようにすると発散は少なくなっているように見えます。

openhrp3のトルクコントロールにすると問題ないでしょうか?

@YoheiKakiuchi
Copy link
Contributor

あと、gazeboにはローターイナーシャの設定がない(していないだけ?)ので慣性の小さいリンクは
発散しやすいのだろうと思います。

k-okada pushed a commit to k-okada/openhrp3 that referenced this issue Feb 6, 2015
k-okada pushed a commit to k-okada/openhrp3 that referenced this issue Feb 6, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants