Closed k-okada closed 10 years ago
From noz...@jsk.imi.i.u-tokyo.ac.jp on May 02, 2013 00:21:05
これは、普通のhrpsys_ros_bridge_tutorialsのサンプル実行や実機での実行時にも、 たまにみうけられる症状で、昔からあったように記憶しています。
rtm-naming-restart, model-loaderの起動のタイミングが、 launchでいっきに立ち上がるときに問題になるのでは、と思っていますが、 ちゃんと調べられていません。
rosrun openrtm rtm-naming-restart stop roslaunch hrpsys_gazebo atlas.launch のようにするとうまくいったりするでしょうか。
From you...@jsk.imi.i.u-tokyo.ac.jp on May 12, 2013 19:31:48
rosrun openrtm rtm-naming-restart stop roslaunch hrpsys_gazebo atlas.launch のようにするとうまくいったりするでしょうか。
おまじないな気がしますね。これをやっても出る時があります。 delayed_execみたいなプログラム作ったほうがいいのだろうか?
From kei.ok...@gmail.com on May 12, 2013 19:46:44
launch fileの中でrtm-naming-restartするのは難しいと思いますので,これは,外すのでいいと思います.
rosrun openrtm rtm-naming-restart stop が必要なのは,nameserverがネットワークの変更に弱いことなので, jenkinsのようにネットワークの変更がない場合はやる必要は無いはずで, 必要になってくるのはノートパソコンで,あちらこちらに移動しながらマシンをリブート せずに使う,という状況です.
なので,launchファイルでrtm-naming ... は呼ばないようにして, 上手く行かないときに rosrun openrtm rtm-naming-restart restart するというのでいい気がします (以下の安藤さんの返事をみるとrtm-namingでも良さそうです確認できたら教えてください)
この部分で,NameServerが適切にうごいている,と,仮定すると,model loaderが たちがらない時は,やり直す,ぐらいのコードを,他のプログラムにいれておけば, 全部立ち上がってくれると思います. http://www.openrtm.org/openrtm/en/content/openrtm-users-01747-%E3%82%BE%E3%83%B3%E3%83%93%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%EF%BC%9F
From noz...@jsk.imi.i.u-tokyo.ac.jp on May 15, 2013 02:53:10
(以下の安藤さんの返事をみるとrtm-namingでも良さそうです確認できたら教えてください) laptopPCを起動する->roslaunch hrpsys_tutorials hrp4c.launch でうごかなくて、 laptopPCを起動する->yes | rosrun openrtm rtm-naming -> roslaunch hrpsys_tutorials hrp4c.launch で動くことを確認しました。
launchからrtm-naming-restartをけそうとしましたが、 消してみても動かないきがしてきたので変更していません。
launchからrtm-naming-restartをけして laptopPCを起動する->roslaunch hrpsys_tutorials hrp4c.launch をすると、corbaの通信と思しきところでとまります(だいたいhrpsys.pyのactivate Componentsあたり)
多分ですが、omniorbの起動が /etc/rc2.d/S20omniorb4-nameserver とはやめなため、無線でネットワークがつながろうとするのよりもはやくなり、 起動直後の時点ですでに「ネットワークがかわる」 という状況におちいります。
もちろん
From kei.ok...@gmail.com on May 15, 2013 03:00:24
- launchからrtm-naming-restartをけす
- 起動直後にrtm-namingしてlaunchを実行する
でいいんだと思います.roscoreしてからプログラムを動かす,みたいなものなので.
すくなくともlaunchファイルのnodeに書くのは,いまの仕様上,他のアプルケーションが 上がっている途中にnameserverをリスタートしてしまうので,やるなら, rtmlaunchみたいなプログラムをつくって,そこで,rtm-namingをしたあとに, roslaunchを呼び出す,みたいなことをするんだと思います.roscoreもそうなっていますね.
Labels: 1.launchからrtm-naming-restartをけす2.起動直後にrtm-namingしてlaunchを実行する
From you...@jsk.imi.i.u-tokyo.ac.jp on May 15, 2013 03:05:41
書いていて消えてしまいましたが、 atlas_hrpsys.launchでは,rtm-naming-restartをしないようにして、別terminalでrtm-naming-restartしていますが、 その状況でも、同じ問題が発生することがあります。
From kei.ok...@gmail.com on May 15, 2013 03:34:12
その場合は,どのノードがエラーをだしているか知りたいところです.ちゃんとエラーチェックがされていないんだと思います.
From you...@jsk.imi.i.u-tokyo.ac.jp on May 15, 2013 05:42:57
errorのログを添付します。
中身を見るとはじめに、以下のエラーが出るようです。 モデルローダーがうまく上がっていない可能性がある?? CORBA::SystemException raised by ModelLoader: IDL:omg.org/CORBA/COMM_FAILURE:1.0
そのあと、こういうふうに出るので、SeqStateROSBridge、TrajectoryBridgeのmodel loaderのエラーチェックを確認したいところです。 [HrpsysSeqStateROSBridge] failed to load model[[HrpsysJointTrajectoryBridge] failed to\ load model[]]
以下、抜粋。
process[HrpsysSeqStateROSBridge-4]: started with pid [7348]
hrpExecutionContext is registered
[hrpsys.py] waiting ModelLoader
[hrpsys.py] start hrpsys
[hrpsys.py] finding RTCManager and RobotHardware
[ INFO] [1368614424.427853146]: [HrpsysSeqStateROSBridge] @Initilize name : HrpsysSeqS\
tateROSBridge0
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thr\
eadblock'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[HrpsysJointTrajectoryBridge-5]: started with pid [7397]
hrpExecutionContext is registered
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thr\
eadblock'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[ImageSensorROSBridge-6]: started with pid [7426]
hrpExecutionContext is registered
SID 'mat0' that needs './' prefixed to it to resolve correctly
CORBA::SystemException raised by ModelLoader: IDL:omg.org/CORBA/COMM_FAILURE:1.0
failed to load model[file:///home/jskuser/ros/fuerte/rtm-ros-robotics/rtmros_common/hr\
psys_gazebo/models/atlas.dae]
CORBA::SystemException raised by ModelLoader: CORBA::SystemException raised by ModelLo\
ader: IDL:omg.org/CORBA/COMM_FAILURE:1.0IDL:omg.org/CORBA/COMM_FAILURE:1.0
[HrpsysSeqStateROSBridge] failed to load model[[HrpsysJointTrajectoryBridge] failed to\ load model[]]
Attachment: rtm-error.log
From kei.ok...@gmail.com on May 15, 2013 06:12:55
roslaunch-prefix で xterm -e をつけてmodelloaderを立ち上げると, CORBA::SystemException raised by ModelLoader: IDL:omg.org/CORBA/COMM_FAILURE:1.0 はmodel loaderから表示されているエラーなのかな.
だとすると,ModelLoaderのデバッグが必要という事になるんだろうけど. 何かの条件が整う前にmodelをloadしようとするとダメになるという事なのかな.
From you...@jsk.imi.i.u-tokyo.ac.jp on May 15, 2013 06:59:14
model-loaderにoutput=screenをつけました。
エラーになる時は、モデルローダーが Collada Warning: joint axis for target node24/node22/node23/node40/node25/node32/node3\ 4/node29/node28/node_r_arm_mwx_axis0 Collada Warning: could not find binding for axis: kmodel0/r_arm_mwx/axis0, axis0 Collada Warning: could not find binding for axis: kmodel0/r_arm_mwx/axis0, axis0 のようなメッセージを出します。結果、model-loaderが死ぬようです。 hrpsys.launchにcolladaの時は、model-loaderが死ぬことがあるのでrespawnするようにと書いてあるのでcolladaを使うときは既知の問題なのでしょうか。 ちなみに、respawn=trueの場合も、model-loaderが死んだ段階で同じ症状になって回復できません。
From you...@jsk.imi.i.u-tokyo.ac.jp on May 15, 2013 07:03:37
それで、 このエラーはmodel-loaderにモデルをロードさせている時に、model-loaderが死んだ場合にでるエラーのようです。出しているのは、model-loaderを呼んでいる方です。 CORBA::SystemException raised by ModelLoader: IDL:omg.org/CORBA/COMM_FAILURE:1.0
同時に複数のmodel-loadの呼び出しがかかった時は、model-loaderの側で同時にモデルロードが呼ばれているように見えます。 その時にマルチスレッドセーフでない部分があったりするんでしょうか?
From noz...@jsk.imi.i.u-tokyo.ac.jp on May 16, 2013 03:56:16
- launchからrtm-naming-restartをけす
- 起動直後にrtm-namingしてlaunchを実行する でいいんだと思います.roscoreしてからプログラムを動かす,みたいなものなので.
launchでrtm-maing-restartしないようにしました。
今後は、起動直後・ネットワークが切り替わった直後に一度だけ、roscoreと同じように rosrun openrtm rtm-naming を実行する必要があります。
wikiも修正しました。 code.google.com/p/rtm-ros-robotics/wiki/ROS_English?ts=1368701554&updated=ROS_English#Before_executing_Example
また、以下のように /etc/network/if-up.d/invoke-rtm-naming rtm-namingを実行するスクリプトをおいておけば、 ネットワークが切り替わるたびにomniNamesが起動します。 (非推奨設定です)
From kei.ok...@gmail.com on May 16, 2013 05:11:22
その時にマルチスレッドセーフでない部分があったりするんでしょうか?
なるほど.たしかそれは有りそうです. modelloader単体で立ち上げて, モデルをロードするpythonを複数同時にあげるとどうなるか,という感じでしょうか? 以下のようにして使えると思います.
import hrp
ml = hrp.findModelLoader() binfo = ml.getBodyInfo("/home/kanehiro/ladder.dae")
From you...@jsk.imi.i.u-tokyo.ac.jp on May 16, 2013 08:35:32
2回連続呼ぶとmodel-loaderがセグフォ。 同時にファイルをロードしようとしている。 ./load_colalda.py & ./load_collada.py &
1度呼んでモデルがロードが終了すると、2回目以降はキャッシュが使われる。 これは問題ない。 ./load_collada ./load_collada.py & ./load_collada.py & ./load_collada.py &
以下スクリプト。 load_collada.py
import roslib;
roslib.load_manifest("hrpsys")
import os
import rtm
from rtm import *
from OpenHRP import *
obj = rtm.rootnc.resolve([CosNaming.NameComponent('ModelLoader', '')])
mdlldr = obj._narrow(ModelLoader)
binfo = mdlldr.getBodyInfo('file:///home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_gazebo/models/at\
las.dae')
model-loaderのgdb結果、libcollada-domの中で落ちているよう。
(gdb) run
Starting program: /home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/openhrp3/bin/openhrp-model-loader
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff063f700 (LWP 31371)]
[New Thread 0x7fffefdee700 (LWP 31372)]
ready
[New Thread 0x7fffef367700 (LWP 31469)]
[New Thread 0x7fffeeb16700 (LWP 31470)]
loading file:///home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_gazebo/models/atlas.daeloading file:\
///home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_gazebo/models/atlas.dae
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffef367700 (LWP 31469)]
0x00007ffff6a608dc in daeMetaAttribute::setDefaultString(char const*) ()
from /usr/lib/libcollada-dom2.4-dp.so.0
(gdb) bt
#0 0x00007ffff6a608dc in daeMetaAttribute::setDefaultString(char const*) ()
from /usr/lib/libcollada-dom2.4-dp.so.0
#1 0x00007ffff6ae12c1 in ColladaDOM150::domAsset::domCoverage::domGeographic_location::domAltitude::registerEleme\
nt(DAE&) () from /usr/lib/libcollada-dom2.4-dp.so.0
rom /usr/lib/libcollada-dom2.4-dp.so.0
dom2.4-dp.so.0
from /usr/lib/libcollada-dom2.4-dp.so.0
#5 0x00007ffff6aa56b3 in ColladaDOM150::domCOLLADA::registerElement(DAE&) ()
from /usr/lib/libcollada-dom2.4-dp.so.0
#6 0x00007ffff6aa4789 in ColladaDOM150::registerDomElements(DAE&) ()
from /usr/lib/libcollada-dom2.4-dp.so.0
#7 0x00007ffff6a709db in DAE::init(daeDatabase_, daeIOPlugin_, char const_) ()
from /usr/lib/libcollada-dom2.4-dp.so.0
#8 0x000000000046a839 in ColladaReader::InitFromURL(std::string const&) ()
#9 0x000000000045a311 in BodyInfoCollada_impl::loadModelFile(std::string const&) ()
#10 0x0000000000448115 in ModelLoader_impl::loadBodyInfoFromModelFile(std::string, OpenHRP::ModelLoader::ModelLoad\
Option) [clone .constprop.1149]()
t&) ()
&) ()
#14 0x00007ffff79315d4 in _0RL_lcfn_474383644c7db81e_71000000(omniCallDescriptor_, omniServant_) ()
from /home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/openhrp3/bin/../lib/libhrpModel-3.1.so.0
#15 0x00007ffff73cf381 in omniCallHandle::upcall(omniServant_, omniCallDescriptor&) () from /usr/lib/libomniORB4.s\
o.1
from /home/lyouhei/ros/fuerte/rtm-ros-robotics/rtmros_common/openhrp3/bin/../lib/libhrpModel-3.1.so.0
#17 0x00007ffff73c12dd in omni::omniOrbPOA::dispatch(omniCallHandle&, omniLocalIdentity_) () from /usr/lib/libomni\
ORB4.so.1
from /usr/lib/libomniORB4.so.1
#19 0x00007ffff73e9b92 in omni::GIOP_S::handleRequest() ()
from /usr/lib/libomniORB4.so.1
#20 0x00007ffff73ea9d0 in omni::GIOP_S::dispatcher() ()
from /usr/lib/libomniORB4.so.1
#21 0x00007ffff73e73b3 in omni::giopWorker::real_execute() ()
from /usr/lib/libomniORB4.so.1
#22 0x00007ffff73e7a2f in omni::giopWorker::execute() ()
from /usr/lib/libomniORB4.so.1
#23 0x00007ffff7399425 in omniAsyncWorkerInfo::run() ()
from /usr/lib/libomniORB4.so.1
#24 0x00007ffff7399b4f in omniAsyncWorker::run(void*) ()
from /usr/lib/libomniORB4.so.1
#25 0x00007ffff70d44d3 in omni_thread_wrapper ()
from /usr/lib/libomnithread.so.3
#26 0x00007ffff768ae9a in start_thread ()
from /lib/x86_64-linux-gnu/libpthread.so.0
#27 0x00007ffff55d5ccd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#28 0x0000000000000000 in ?? ()
(gdb) quit
From kei.ok...@gmail.com on May 18, 2013 01:01:31
OpenHRP3 r2600 で直しました.これで大丈夫だとおもいます.確認したらcloseしてください.> Youhei https://openrtp.jp/redmine/issues/2159
From nakaokat on May 20, 2013 22:46:41
rtmros_commonでsvn upしてrosmake openhrp3すると以下のようにエラーになってしまいます。 boostのリンクの設定がおかしいということです。
[ 47%] Building CXX object server/ModelLoader/CMakeFiles/export-collada.dir/VrmlUtil.o Linking CXX executable ../../bin/export-collada /usr/bin/ld: CMakeFiles/export-collada.dir/exportCollada.o: undefined reference to symbol 'boost::system::system_category()' /usr/bin/ld: note: 'boost::system::system_category()' is defined in DSO /usr/lib/libboost_system.so.1.46.1 so try adding it to the linker command line /usr/lib/libboost_system.so.1.46.1: could not read symbols: Invalid operation collect2: ld はステータス 1 で終了しました make[3]: *\ [bin/export-collada] エラー 1
From you...@jsk.imi.i.u-tokyo.ac.jp on May 20, 2013 22:54:26
OpenHRP3 r2600 で直しました.これで大丈夫だとおもいます.確認したらcloseしてください.> Youhei
確認しました。同時ロードでもseg faultしなくなっています。ありがとうございます。
boostの方は、昨日の夜の r2600 のものは、ubuntu12.04/fuerte でmakeが通っています。
From nakaokat on May 20, 2013 23:19:06
確認したところ r2602 でした。 r2601 で入った10.04対応のコードが良くないのかもしれません。 r2600 にもどして確認してみます。
From nakaokat on May 20, 2013 23:27:34
2600だと通りますね。 2600と2602のdiffが以下なので、boost_thread-mtが良くないようです。
--- server/ModelLoader/CMakeLists.txt (リビジョン 2600) +++ server/ModelLoader/CMakeLists.txt (リビジョン 2602) @@ -36,6 +36,7 @@ ${Boost_SYSTEM_LIBRARY} ) else(WIN32) set(extralibraries ${COLLADA_DOM_LIBRARIES} boost_system-mt)
From nakaokat on May 20, 2013 23:32:55
r2602 でextralibrariesの箇所を set(extralibraries ${COLLADA_DOM_LIBRARIES} boost_system-mt boost_thread-mt) として、 cd build/OpenHRP-3 make clean cd ../.. touch patched make で通りました。 r2600 で10.04対応をしたとのコメントがあり、手元に10.04の環境がないのでわかりませんが、 thread-mtを追加したかっただけならば、この変更によりsystem-mtが上書きで消されていたのが原因だったようです。
From kei.ok...@gmail.com on May 20, 2013 23:44:47
そうですね. https://openrtp.jp/redmine/issues/2161 にチケットを出しておきました.find_packageでも,中岡くんの変更でもいいと思います. 機械があったら中岡くんの変更で10.04環境で動くか教えてもらえると嬉しいです.
ことは別にrtm-ros-roboticsの r3981 でMakefile.openhpr3を変更し r2600 に一時的に固定しました.
From noz...@jsk.imi.i.u-tokyo.ac.jp on May 21, 2013 00:33:37
hrpsys/launch/gen*.launch系でも同じくrtm-naming-restartがはいっていたので、 つかわないようにしました( r3984 , r3985 )。
これで、hrpsys_ros_bridge_tutorialsなどでmakeがとおるようになると思います。
From nakaokat on May 22, 2013 02:45:21
新しいロボットが10.04環境で、svn upしたら r2600 で動かなくなってしまったので、 上にあるとおり set(extralibraries ${COLLADA_DOM_LIBRARIES} boost_system-mt boost_thread-mt) としてコンパイルしたら通りました。
From kei.ok...@gmail.com on May 22, 2013 06:40:57
ありがとう.これで反映させました.
From you...@jsk.imi.i.u-tokyo.ac.jp on May 02, 2013 10:07:10
atlas.launchを立ち上げるときに、何回かに1回の割合で以下のエラーが たくさん出てきてhrpsysが使えないときがあります。
必ず発生するわけではないので、何かのタイミングなのかなと思っていますが どこらあたりに問題があり賞でしょうか?
CORBA::SystemException raised by ModelLoader: IDL:omg.org/CORBA/INV_OBJREF:1.0 omniORB: ERROR -- the application attempted to invoke an operation
Original issue: http://code.google.com/p/rtm-ros-robotics/issues/detail?id=79