start-jsk / rtmros_common

OpenRTM - ROS interoperability packages
http://wiki.ros.org/rtmros_common
12 stars 52 forks source link

atlas.launch を立ち上げたときに上手くいかないときがある #79

Closed k-okada closed 10 years ago

k-okada commented 10 years ago

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

k-okada commented 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 のようにするとうまくいったりするでしょうか。

k-okada commented 10 years ago

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みたいなプログラム作ったほうがいいのだろうか?

k-okada commented 10 years ago

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

k-okada commented 10 years ago

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 とはやめなため、無線でネットワークがつながろうとするのよりもはやくなり、 起動直後の時点ですでに「ネットワークがかわる」 という状況におちいります。

もちろん

  1. launchからrtm-naming-restartをけす
  2. 起動直後にrtm-namingしてlaunchを実行する とすると動きます。 ルールとして 起動直後かネットワーク変更後にかならずrtm-namingする (もしくはnetwork-managerのポストスクリプト実行で必ず実行するようにする) みたいなことをやればうまく運用できそうですが、 もっと普通にうごかないものか、とおもい、現状launchはかえていません。
k-okada commented 10 years ago

From kei.ok...@gmail.com on May 15, 2013 03:00:24

  1. launchからrtm-naming-restartをけす
  2. 起動直後にrtm-namingしてlaunchを実行する

でいいんだと思います.roscoreしてからプログラムを動かす,みたいなものなので.

すくなくともlaunchファイルのnodeに書くのは,いまの仕様上,他のアプルケーションが 上がっている途中にnameserverをリスタートしてしまうので,やるなら, rtmlaunchみたいなプログラムをつくって,そこで,rtm-namingをしたあとに, roslaunchを呼び出す,みたいなことをするんだと思います.roscoreもそうなっていますね.

Labels: 1.launchからrtm-naming-restartをけす2.起動直後にrtm-namingしてlaunchを実行する

k-okada commented 10 years ago

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していますが、 その状況でも、同じ問題が発生することがあります。

k-okada commented 10 years ago

From kei.ok...@gmail.com on May 15, 2013 03:34:12

その場合は,どのノードがエラーをだしているか知りたいところです.ちゃんとエラーチェックがされていないんだと思います.

k-okada commented 10 years ago

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\ ead
block'",) 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

k-okada commented 10 years ago

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しようとするとダメになるという事なのかな.

k-okada commented 10 years ago

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が死んだ段階で同じ症状になって回復できません。

k-okada commented 10 years ago

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の側で同時にモデルロードが呼ばれているように見えます。 その時にマルチスレッドセーフでない部分があったりするんでしょうか?

k-okada commented 10 years ago

From noz...@jsk.imi.i.u-tokyo.ac.jp on May 16, 2013 03:56:16

  1. launchからrtm-naming-restartをけす
  2. 起動直後に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が起動します。 (非推奨設定です)

k-okada commented 10 years ago

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")

k-okada commented 10 years ago

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

!/usr/bin/env python

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

2 0x00007ffff6ae1511 in ColladaDOM150::domAsset::domCoverage::domGeographic_location::registerElement(DAE&) () f\

rom /usr/lib/libcollada-dom2.4-dp.so.0

3 0x00007ffff6ae16a8 in ColladaDOM150::domAsset::domCoverage::registerElement(DAE&) () from /usr/lib/libcollada-\

dom2.4-dp.so.0

4 0x00007ffff6ae2353 in ColladaDOM150::domAsset::registerElement(DAE&) ()

   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]()

11 0x0000000000448e2e in ModelLoaderimpl::loadBodyInfoEx(char const, OpenHRP::ModelLoader::ModelLoadOption cons\

t&) ()

12 0x0000000000447c87 in ModelLoaderimpl::getBodyInfoEx(char const, OpenHRP::ModelLoader::ModelLoadOption const\

&) ()

13 0x0000000000448bdf in ModelLoaderimpl::getBodyInfo(char const) ()

#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

16 0x00007ffff7934490 in OpenHRP::_impl_ModelLoader::_dispatch(omniCallHandle&) ()

   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

18 0x00007ffff73a6248 in omniLocalIdentity::dispatch(omniCallHandle&) ()

   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
k-okada commented 10 years ago

From kei.ok...@gmail.com on May 18, 2013 01:01:31

OpenHRP3 r2600 で直しました.これで大丈夫だとおもいます.確認したらcloseしてください.> Youhei https://openrtp.jp/redmine/issues/2159

k-okada commented 10 years ago

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

k-okada commented 10 years ago

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が通っています。

k-okada commented 10 years ago

From nakaokat on May 20, 2013 23:19:06

確認したところ r2602 でした。 r2601 で入った10.04対応のコードが良くないのかもしれません。 r2600 にもどして確認してみます。

k-okada commented 10 years ago

From nakaokat on May 20, 2013 23:27:34

2600だと通りますね。 2600と2602のdiffが以下なので、boost_thread-mtが良くないようです。

Index: server/ModelLoader/CMakeLists.txt

--- 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)

k-okada commented 10 years ago

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が上書きで消されていたのが原因だったようです。

k-okada commented 10 years ago

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 に一時的に固定しました.

k-okada commented 10 years ago

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がとおるようになると思います。

k-okada commented 10 years ago

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) としてコンパイルしたら通りました。

k-okada commented 10 years ago

From kei.ok...@gmail.com on May 22, 2013 06:40:57

ありがとう.これで反映させました.

k-okada commented 10 years ago

From nakaokat on June 27, 2013 01:09:56

Status: Verified
Labels: -1.launchからrtm-naming-restartをけす2.起動直後にrtm-namingしてlaunchを実行する