Closed mmurooka closed 10 years ago
Could you explain more detail on your problem? Hrpsys gazebo compile only iob instead of compiling whole hrpsys source tree.
何が原因かちゃんと分かっていないのですが, 以下のように試して動かないことから, hrpsys_gazebo_generalでlibhrpIo.soは生成されているのですが, 起動時のRobotHardwareはこの.soとリンクされておらず従来のものが起動しているように思います.
The sample robot should move by following command, but it doesn't move.
roslaunch hrpsys_gazebo_tutorials gazebo_samplerobot_no_controllers.launch # gazebo
rtmlaunch hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch # hrpsys
roscd hrpsys_ros_bridge_tutorials/euslisp; roseus samplerobot-interface.l "(samplerobot-init) (send *ri* :angle-vector (send *sr* :reset-pose) 1000)"
I comfirmed that the joint angles which RobotHardware outputs agree with euslisp command by rtprint localhost:15005/RobotHardware0.rtc:q.
In the last of hrpsys node process, iob should publish /SampleRobot/joint_command, but there is no publisher of that topic.
The Iob library for hrpsys_gazebo_general is generated at devel/share/hrpsys_gazebo_general/lib/libhrpIo.so, but I think RobotHardware is not linked to this Iob library.
what it the result of
ldd ....RObotHardware.so
and
roslaunch --args <nodes that seems important> hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch
以下のようになりました.
murooka@murooka-ThinkPad-T430:~/jsk$ locate RobotHardware.so | grep hydro/
/home/murooka/ros_catkin_ws/hydro/build/rtm-ros-robotics/openrtm_common/hrpsys/build/hrpsys-base/lib/RobotHardware.so
/home/murooka/ros_catkin_ws/hydro/install/share/hrpsys/lib/RobotHardware.so
/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so
murooka@murooka-ThinkPad-T430:~/jsk$ ldd /home/murooka/ros_catkin_ws/hydro/build/rtm-ros-robotics/openrtm_common/hrpsys/build/hrpsys-base/lib/RobotHardware.so
linux-vdso.so.1 => (0x00007fff76fff000)
libhrpIo.so => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpIo.so (0x00007fb1ba0f1000)
libhrpModel-3.1.so.0 => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpModel-3.1.so.0 (0x00007fb1b9e37000)
libhrpsysBaseStub.so => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpsysBaseStub.so (0x00007fb1b9b2d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb1b98df000)
libomniORB4.so.1 => /usr/lib/libomniORB4.so.1 (0x00007fb1b9532000)
libomnithread.so.3 => /usr/lib/libomnithread.so.3 (0x00007fb1b932c000)
libomniDynamic4.so.1 => /usr/lib/libomniDynamic4.so.1 (0x00007fb1b8e3b000)
libRTC-1.1.0.so => /home/murooka/ros_catkin_ws/hydro/devel/lib/libRTC-1.1.0.so (0x00007fb1b87d0000)
libcoil-1.1.0.so => /home/murooka/ros_catkin_ws/hydro/devel/lib/libcoil-1.1.0.so (0x00007fb1b85a4000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb1b82a4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb1b808d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb1b7ccd000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb1b7ac4000)
libhrpUtil-3.1.so.0 => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpUtil-3.1.so.0 (0x00007fb1b7843000)
libhrpCollision-3.1.so.0 => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpCollision-3.1.so.0 (0x00007fb1b75ef000)
libboost_filesystem.so.1.46.1 => /usr/lib/libboost_filesystem.so.1.46.1 (0x00007fb1b73d1000)
libboost_regex.so.1.46.1 => /usr/lib/libboost_regex.so.1.46.1 (0x00007fb1b70cf000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb1b6ecb000)
libboost_signals.so.1.46.1 => /usr/lib/libboost_signals.so.1.46.1 (0x00007fb1b6cb6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb1b69ba000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb1ba553000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fb1b67b4000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007fb1b658c000)
libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007fb1b633b000)
liblapack.so.3gf => /usr/lib/atlas-base/atlas/liblapack.so.3gf (0x00007fb1b571e000)
libboost_system.so.1.46.1 => /usr/lib/libboost_system.so.1.46.1 (0x00007fb1b551a000)
libicuuc.so.48 => /usr/lib/libicuuc.so.48 (0x00007fb1b51af000)
libicui18n.so.48 => /usr/lib/libicui18n.so.48 (0x00007fb1b4de7000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb1b4bcf000)
libblas.so.3gf => /usr/lib/atlas-base/atlas/libblas.so.3gf (0x00007fb1b4666000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007fb1b434f000)
libicudata.so.48 => /usr/lib/libicudata.so.48 (0x00007fb1b2fde000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007fb1b2da8000)
rtmlaunch というnodeはないようです.
murooka@murooka-ThinkPad-T430:~$ roslaunch --args rtmlaunch hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch
ERROR: Cannot find node named [/rtmlaunch] in [/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/launch/samplerobot_hrpsys_bringup.launch].
Node names are:
* /sensor_transform_0
* /sensor_transform_1
* /sensor_transform_2
* /sensor_transform_3
* /sensor_transform_4
* /modelloader
* /hrpsys
* /hrpsys_py
* /HrpsysSeqStateROSBridge
* /HrpsysJointTrajectoryBridge
* /hrpsys_ros_diagnostics
* /diagnostic_aggregator
* /hrpsys_profile
* /sensor_ros_bridge_connect
* /rtmlaunch_hrpsys_ros_bridge
* /SequencePlayerServiceROSBridge
* /DataLoggerServiceROSBridge
* /ForwardKinematicsServiceROSBridge
* /StateHolderServiceROSBridge
* /RobotHardwareServiceROSBridge
* /AutoBalancerServiceROSBridge
* /StabilizerServiceROSBridge
* /CollisionDetectorServiceROSBridge
* /collision_state
* /ImpedanceControllerServiceROSBridge
* /AbsoluteForceSensorServiceROSBridge
* /SoftErrorLimiterServiceROSBridge
* /gazebo_robot_dashboard
https://github.com/start-jsk/rtmros_gazebo/issues/23
ここの最後で.soがうまく読まれていない気がすると言っているのは同じ問題にみえますね。
rtmlaunch というnodeはないようです.
すいません.記入間違い.直しました.重要そうなノードを引数にしてください,といういみでした.
roslaunch --args hrpsys hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch
とか,
roslaunch --args hrpsys_py hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch
とか関係しそうなものを調べてみて下さい.
https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_tutorials/launch/robot_hrpsys_bringup.launch#L39 このhrpsys_load_pathの値ですが、src以下を見てしまっていたりしないでしょうか?
多分ですが,https://github.com/start-jsk/rtmros_common/blob/master/hrpsys_tools/launch/hrpsys.launch#L48
の
<arg name="hrpsys_load_path" default="$(find hrpsys)/lib"/>
-o "manager.modules.load_path:$(arg hrpsys_load_path)"
の部分が生きていて,これを使いたいiobのある所に変える必要があります.
実際には,RobotHardware.soはhrpsys/libにあるともうので,
$(find hrpsys)/lib,$(find hrpsys_atals)/lib
みたいな感じになるとおもいます.,
か;
か
かは
ちょっとうる覚えです.
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/launch$ roslaunch --args hrpsys hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch
ORBgiopMaxMsgSize=2147483648 HRPSYS_GAZEBO_ROBOTNAME=SampleRobot LANG=C /home/murooka/ros_catkin_ws/hydro/devel/lib/openrtm_aist/bin/rtcd /home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot_nosim.xml -o manager.is_master:YES -o corba.nameservers:localhost:15005 -o naming.formats:%n.rtc -o logger.file_name:/tmp/rtc%p.log -o exec_cxt.periodic.rate:200 -o manager.shutdown_onrtcs:NO -o manager.modules.load_path:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib,/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib -o manager.modules.preload:RobotHardware.so,hrpEC.so -o manager.components.precreate:RobotHardware -o exec_cxt.periodic.type:hrpExecutionContext -o example.SequencePlayer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.ForwardKinematics.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.ImpedanceController.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.AutoBalancer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.StateHolder.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.TorqueFilter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.TorqueController.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.VirtualForceSensor.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.AbsoluteForceSensor.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.KalmanFilter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.Stabilizer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.CollisionDetector.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.SoftErrorLimiter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.RobotHardware.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.RobotHardware.conf __name:=hrpsys
となっていて,この中の
-o manager.modules.load_path:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib,/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib
の部分がcatkin対応していなさそうに見えます.
$(find ...)
ではなく、とりあえず直接devel以下のパスを書くとどうなるでしょうか?
.../devel/share/hprsys_gazebo_general/lib
ここの最後で.soがうまく読まれていない気がすると言っているのは同じ問題にみえますね。
今はinstallはせずにdevelで試していますが,似ている問題かもしれません.
とりあえず直接devel以下のパスを書くとどうなるでしょうか?
動いてよさそうに思うのですが動きませんでした.
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ roslaunch --args hrpsys hrpsys_gazebo_tutorials robot_hrpsys_bringup.launch
LANG=C ORBgiopMaxMsgSize=2147483648 /home/murooka/ros_catkin_ws/hydro/devel/lib/openrtm_aist/bin/rtcd /home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot_nosim.xml -o manager.is_master:YES -o corba.nameservers:localhost:15005 -o naming.formats:%n.rtc -o logger.file_name:/tmp/rtc%p.log -o exec_cxt.periodic.rate:200 -o manager.shutdown_onrtcs:NO -o manager.modules.load_path:/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/,/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib -o manager.modules.preload:RobotHardware.so,hrpEC.so -o manager.components.precreate:RobotHardware -o exec_cxt.periodic.type:hrpExecutionContext -o example.SequencePlayer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.ForwardKinematics.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.ImpedanceController.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.AutoBalancer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.StateHolder.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.TorqueFilter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.TorqueController.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.VirtualForceSensor.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.AbsoluteForceSensor.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.KalmanFilter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.Stabilizer.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.CollisionDetector.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.SoftErrorLimiter.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.conf -o example.RobotHardware.config_file:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_tutorials/robot_models/SampleRobot/hrpsys/SampleRobot.RobotHardware.conf __name:=hrpsys
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ ls /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/
libhrpIo.so
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ rostopic info /SampleRobot/joint_command
Type: hrpsys_gazebo_msgs/JointCommand
Publishers: None
Subscribers:
* /gazebo (http://murooka-ThinkPad-T430:58890/)
devel/share/hprsys_gazebo_general/lib の .soはちゃんとpublishするものです.
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ grep "joint_command" /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/libhrpIo.so
バイナリファイル /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/libhrpIo.so に一致しました
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ grep "publish" /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/libhrpIo.so
バイナリファイル /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/libhrpIo.so に一致しました
rosrunのコードを見ていますが、
catkinが複数のディレクトリに分散してしまう問題を解決するために
catkin_find --without-underlays --libexec --share $pkgname
というのをやっていますね。
$ catkin_find --without-underlays --libexec --share hrpsys_gazebo_general
/home/jsk/ueda/ros/hydro/devel/share/hrpsys_gazebo_general
/home/jsk/ueda/ros/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general
LD_LIBRARY_PATH
の先頭にdevel/share/hrpsys...
をつけてみるとどうでしょうか?
ダメです..
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ echo $LD_LIBRARY_PATH
/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib:/home/murooka/ros_catkin_ws/hydro/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/ros_catkin_ws/hydro/devel/lib:/opt/ros/hydro/lib:/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib:/home/murooka/ros_catkin_ws/hydro/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ rostopic info /SampleRobot/joint_command
Type: hrpsys_gazebo_msgs/JointCommand
Publishers: None
Subscribers:
* /gazebo (http://murooka-ThinkPad-T430:35991/)
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ rostopic list | grep joint_command
/SampleRobot/joint_command
roslaunch --args hrpsys を調べていましたが, 実行中にはこのnodeがいないのは問題ないでしょうか.
$ rosnode list | grep hrpsys
/hrpsys_profile
/hrpsys_ros_diagnostics
一応,rtmlaunchのターミナルのログを添付してみようかと思いましたが, 画像しか添付できないみたいですね.
devel/lib/libhrpIo.so
をえいやっと削除してみると動きますか?
動いてしまいます.
rtprint localhost:15005/RobotHardware0.rtc:q で関節角が出ていてRobotHardwareも動いています. -o manager.modules.load_pathの一個目の引数(/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib)は空です.
つまり libhrpIo.soをopenしようとしていて、devel/share/hrpsys_gazebo_generalのlibhrpIo.soを開いてほしいのにdevel/libのものを開いてしまっているのが問題 ということですか?
不思議ですがそういうことのように思います.
devel/lib/libhrpIo.soをえいやっと削除してみると動きますか?
さっき試したのは,これの逆でgazebo_generalの libhrpIo.soを消していました. これも試します.
中身を何もみないで言いますが
.soを開くためにdlopen(3)
を使っていると思うのですが、これはLD_LIBRARY_PATH
の先頭から指示された.soを開くという仕様だったとおもったのでLD_LIBRARY_PATH
いじる作戦はうまく行きそうなものですが....
まだよく見ていませんが,可能性として, https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/iob/iob.cpp でpublishのadvertiseとsubscribeがif文の中にあってそこへ行っていないのかもしれないです.
その場合はiob_commandがpublishされるっぽいように見えますね
メモですが、lib/rtm/ModuleManager.cppによると、load_pathを先頭から順番に舐めて、指定された ライブラリのファイル名と一致するファイルを探して、そのパス全体を引数にdlopenしてるように見えます。
topic にも serviceにも iob_commandはいないです.
-o manager.modules.load_path:/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/,/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib -o manager.modules.preload:RobotHardware.so,hrpEC.so -o manager.components.precreate:RobotHardware
確認ですが,
1) hrpsys/lib 以下のlibIob.so を消したらhrpsys_gazebo_general/lib/libIob.soを使って動いているか,? → A) manager.modules.load_path は有効に効いている → B) RobotHardware.so がlibIob.soをrpathなどでリンクしているわけではない → だったら動くはず.
動かない場合A)かB)が動いていない A)は,パスの区切りの文字列,あるは引数のあつかい,あるいはディレクトリの最後に/が必要か必要でないか. → -o logger.log_level:PARANOID などで見てみる
B) だとのちほど.
確認しました.
hrpsys/lib 以下のlibIob.so を消したらhrpsys_gazebo_general/lib/libIob.soを使って動いているか
Yesでした. gazebo上のSampleRobotが歩いて動きました.
$ echo $LD_LIBRARY_PATH
/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib:/home/murooka/ros_catkin_ws/hydro/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/ros_catkin_ws/hydro/devel/lib:/opt/ros/hydro/lib:/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins
$ ldd ./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep hrpIo
libhrpIo.so => /home/murooka/ros_catkin_ws/hydro/./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/../lib/libhrpIo.so (0x00007fd661d17000)
$ mv /home/murooka/ros_catkin_ws/hydro/./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/../lib/libhrpIo.so ~/Desktop/tmp/
$ ldd ./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep hrpIo
libhrpIo.so => /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpIo.so (0x00007ff8099d8000)
$ rm /home/murooka/ros_catkin_ws/hydro/devel/lib/libhrpIo.so
$ ldd ./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep hrpIo
libhrpIo.so => /home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/libhrpIo.so (0x00007fb1efffb000)
うーん、デフォルトでhrpsys以下のlibhrpIo.soが読まれているのが謎ですね...
rpathに入っているようです.
murooka@murooka-ThinkPad-T430:~/ros_catkin_ws/hydro$ objdump -p ./src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | egrep 'RPATH|RUNPATH'
RPATH $ORIGIN/../lib:$ORIGIN/../../../lib::/usr/lib/atlas-base/atlas:/home/murooka/ros_catkin_ws/hydro/devel/lib:/usr/lib/atlas-base/atlas:/home/murooka/ros_catkin_ws/hydro/devel/lib:/opt/ros/hydro/lib:io
hrpsys_gazebo_generalのRobotHardware.soは使わない作戦ですか?
hrpsys/Makefile.hrpsys-baseで-DLIBIO_DIRのオプションを与えると hrpsys-base-source/rtc/RobotHardware/CMakeLists.txtでlink_directories(${LIBIO_DIR})されて rpathが追加されるようです. デフォルト値はhrpsys-base-source/lib/CMakeLists.txtでset(LIBIO_DIR io CACHE PATH "directory of hrpIo")がされているように見えます.
その引数を与えないようにすべき、ということかな?
2014年4月10日木曜日、orikumanotifications@github.comさんは書きました:
hrpsys/Makefile.hrpsys-baseで-DLIBIO_DIRのオプションを与えると
hrpsys-base-source/rtc/RobotHardware/CMakeLists.txtでlink_directories(${LIBIO_DIR})されて rpathが追加されるようです. デフォルト値はhrpsys-base-source/lib/CMakeLists.txtでset(LIBIO_DIR io CACHE PATH "directory of hrpIo")がされているように見えます.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-40057464 .
from iPhone
.soから.soへのリンクは,rpathが指定されていない場合,LD_LIBRARY_PATHの順に探すのでしょうか.
-o manager.modules.load_path:/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib/,/home/murooka/ros_catkin_ws/hydro/src/rtm-ros-robotics/openrtm_common/hrpsys/lib -o manager.modules.preload:RobotHardware.so,hrpEC.so -o manager.components.precreate:RobotHardware
は,RobotHardware.soを探す場所を指定しているだけで, RobotHardware.soがリンクするlibhrpIo.soの場所を指定しているわけではないということで合っているでしょうか.
それなら,RobotHardware.so生成時にrpathを指定せず,実行時にLD_LIBRARY_PATHを, hrpsys-simulatorとgazeboで適切に指定し分けることで対処できそうです.
他にrpathを後から書き換えることもできるようなので, ( http://manpages.ubuntu.com/manpages/raring/man1/chrpath.1.html ) 異なるrpathをもつRobotHardware.soをhrpsys-simulator用とgazebo用に別々に作っておいて -o manager.modules.load_path などで使い分けることができそうです.
話を全て理解しているわけではないので間違えているかもしれないですが
.soから.soへのリンクは,rpathが指定されていない場合,LD_LIBRARY_PATHの順に探すのでしょうか.
はい.そうなります.
は,RobotHardware.soを探す場所を指定しているだけで, RobotHardware.soがリンクするlibhrpIo.soの場所を指定しているわけではないということで合っている でしょうか.
はい.たぶん合っています.
確認ですが,hrpsys_gazebo_generalはRobotHardware.soを生成するんだっけ?しないんだっけ? rpathで専用のlibIob.so をリンクしたRobotHardware.soを生成するのが楽な気がします.
https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/catkin.cmake#L24 が昔はコメントインされていてRobotHardware.soも生成されていたと思うのですが、 今はされておらず、libhrpIo.soが生成されるのみです。
rpathで専用のlibIob.so をリンクしたRobotHardware.soを生成するのが楽な気がします.
はい、hrpsys/lib以下のRobotHardware.soを devel/share/hrpsys_gazebo_general/lib以下にコピーして、 chrpathでrpathを書き換えて、 -o manager.modules.load_path でこのRobotHardware.soを指すようにする、 という流れが良さそうです。
その作戦でPRつくってみてくれますか? > @mmurooka
-- ryohei
2014-04-11 11:46 GMT+09:00 mmurooka notifications@github.com:
https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/catkin.cmake#L24 が昔はコメントインされていてRobotHardware.soも生成されていたと思うのですが、 今はされておらず、libhrpIo.soが生成されるのみです。
rpathで専用のlibIob.so をリンクしたRobotHardware.soを生成するのが楽な気がします.
はい、hrpsys/lib以下のRobotHardware.soを devel/share/hrpsys_gazebo_general/lib以下にコピーして、 chrpathでrpathを書き換えて、 -o manager.modules.load_path でこのRobotHardware.soを指すようにする、 という流れが良さそうです。
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-40166009 .
はい、やってみます。
rosパッケージのhrpsysをソースから入れた場合とaptで入れた場合で RobotHardware.soの場所が違う気がするので少し面倒そうです。 とりあえず、ソースから入れた場合を想定してみます。
2014-04-11 12:02 GMT+09:00 mmurooka notifications@github.com:
rosパッケージのhrpsysをソースから入れた場合とaptで入れた場合で RobotHardware.soの場所が違う気がするので少し面倒そうです。 とりあえず、ソースから入れた場合を想定してみます。
いや,どちらも
rospack find hrpsys
/lib
に入るようにしているつもりだけどな.
いや,どちらも
rospack find hrpsys
/lib に入るようにしているつもりだけどな.
はい,これは大丈夫そうでした.
hrpsys/lib以下のRobotHardware.soを devel/share/hrpsys_gazebo_general/lib以下にコピーして、 chrpathでrpathを書き換えて、
この作戦は rpathは元の長さより長いものには置き換えられないという制約でダメでした.
rpathを消してしまうことはできるので, rpathを空にしてしまって,LD_LIBRARY_PATHで所望のlibhrpIo.soを見に行くように設定する作戦も 試してみましたがうまくいきませんでした. LD_LIBRARY_PATHを変えてlddでhrpsys_gazebo_generalのlibhrpIo.soを見に行ってはくれるのっですが,rtmlaunchで実行すると従来のlibhrpIo.soが呼ばれてしまっているようです. 実行時にhrpsysのnodeに環境変数が渡っていない??
hrpsys-base-source/rtc/RobotHardware/CMakeLists.txt のlink_directories(${LIBIO_DIR})を変えてコンパイルし直すしかないでしょうか..
openrtmのlog levelを変えて実行して結果が欲しいんだけど,,,具体的には http://www.openrtm.org/openrtm/ja/content/%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-%E5%9F%BA%E7%A4%8E%E7%B7%A8#toc3
をみて,logger.log_level PARANOID としたくて,使っているlaunchファイルの何処かで,
-o "logger.file_name:/tmp/rtc%p.log"' というのがあると思うから, -o "logger.log_level:PARANOID" を追加して結果をみてください.
rpathでライブラリを固定するのはrosmakeの仕様で,大体ホントんどの場合はLD_LIBARY_PATHがちゃんとしていない というこおでトラブルので,それを回避する,なかなかの妙案だと思っているんだけど,逆にプログラムをコピーすると 動かないという弊害もあって,で,openrtmはそこまでやっていなくて,ちゃんとパスを設定してくださいね,みたいなポリシー なので,動くはずです.と,信じてよい状況かと思います.
2014-04-28 18:38 GMT+09:00 Masaki Murooka notifications@github.com:
いや,どちらも rospack find hrpsys/lib に入るようにしているつもりだけどな.
はい,これは大丈夫そうでした.
hrpsys/lib以下のRobotHardware.soを devel/share/hrpsys_gazebo_general/lib以下にコピーして、 chrpathでrpathを書き換えて、
この作戦は rpathは元の長さより長いものには置き換えられないという制約でダメでした.
rpathを消してしまうことはできるので, rpathを空にしてしまって,LD_LIBRARY_PATHで所望のlibhrpIo.soを見に行くように設定する作戦も 試してみましたがうまくいきませんでした.
LD_LIBRARY_PATHを変えてlddでhrpsys_gazebo_generalのlibhrpIo.soを見に行ってはくれるのっですが,rtmlaunchで実行すると従来のlibhrpIo.soが呼ばれてしまっているようです. 実行時にhrpsysのnodeに環境変数が渡っていない??
hrpsys-base-source/rtc/RobotHardware/CMakeLists.txt のlink_directories(${LIBIO_DIR})を変えてコンパイルし直すしかないでしょうか..
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-41539559 .
@k-okada に見ていただいて,
<arg name="hrpsys_preload_rtc" default="libhrpIo.so,RobotHardware.so,hrpEC.so"/>
<arg name="hrpsys_load_path" default="$(find hrpsys_gazebo_general)/lib,$(find hrpsys)/lib"/>
があれば,rtmlaunch時に$(find hrpsys_gazebo_general)/lib/libhrpIo.soにリンクしてくれることを確認しました.
僕が説明を正しく理解できていれば, hrpsys_preload_rtc で指定されたrtcは hrpsys_load_path 以下から優先的にロードされて, libhrpIo.soはrtcではない(RobotHardware.soからリンクされているだけ)なので, 本来意図された指定の仕方ではない. でも,これでlibhrpIoをdlopenはしてくれて, 一度dlopenされたら二回目以降は最初のdlopenのパスのものを使ってくれるので RobotHardware.soのロード時にリンクされるlibhrpIo.soも正しいものになる という流れだと思います.
rtcのリンク時にLD_LIBRARY_PATHを見てくれない件は, openrtm-users@openrtm.org で聞いてみました.
ローカル環境で動作確認できました. PRを作りました.
お疲れ様.
あまりい解決策ではないけど,,, launch-prefixにstraceとか,ltraceとかつけるとよいログになるかもしれないです.
On Thu, May 1, 2014 at 2:40 AM, Masaki Murooka notifications@github.comwrote:
ローカル環境で動作確認できました. PRを作りました.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-41825966 .
<arg name="RTCD_LAUNCH_PREFIX" value="strace" />
したら,rtmlaunchのログに
open("/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so", O_RDONLY) = 15
と出るようになってデバッグが捗りそうです.
PRにコメントアウトでRTCD_LAUNCH_PREFIXを追加しておきましたが, デフォルトで有効にしておいたほうが良さそうでしょうか.
デフォルトで有効にしておいたほうが良さそうでしょうか.
いやいや,デフォルトは無効で良いです.
preloadにlibhrpIo.soを足すのではなく,LD_LIBRARY_PATHだけをセットした状態でどうなっているか見れるかな?
2014-05-01 3:03 GMT+09:00 Masaki Murooka notifications@github.com:
<arg name="RTCD_LAUNCH_PREFIX" value="strace" />
したら,rtmlaunchのログに
open("/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so", O_RDONLY) = 15
と出るようになってデバッグが捗りそうです.
PRにコメントアウトでRTCD_LAUNCH_PREFIXを追加しておきましたが, デフォルトで有効にしておいたほうが良さそうでしょうか.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-41828671 .
以下のような感じで, (B)と(C)の間で,LD_LIBRARY_PATHの設定を変えていますが, lddの結果は変わっているのに, straceの結果は変わらないままなので, やっぱりrtcdの中でLD_LIBRARY_PATHがうわ書かれているような感じなのだと思います.
(A). preloadにlibhrpIoを設定する,LD_LIBRARY_PATHセットしない,RobotHardware.soのrpathを消さない (昨日見つけた解決策)
$ ldd /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep libhrpIo
libhrpIo.so => /home/murooka/catkin_ws/ws_rtmros_common/build/rtm-ros-robotics/openrtm_common/hrpsys/build/hrpsys-base/lib/libhrpIo.so (0x00007f96e0a20000)
open("/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so", O_RDONLY) = 14
close(14) = 0
open("/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so", O_RDONLY) = 14
close(14) = 0
futex(0x7fa4922d50b0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
open("/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so", O_RDONLY|O_CLOEXEC) = 14
(B). preloadにlibhrpIoを設定しない,LD_LIBRARY_PATHセットしない,RobotHardware.soのrpathを消す
$ ldd /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep libhrpIo
libhrpIo.so => /home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so (0x00007f1484e40000)
open("/home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so", O_RDONLY|O_CLOEXEC) = 14
(C). preloadにlibhrpIoを設定しない,LD_LIBRARY_PATHセットする,RobotHardware.soのrpathを消す
$ ldd /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so | grep libhrpIo
libhrpIo.so => /home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so (0x00007f734d0bc000)
open("/home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so", O_RDONLY|O_CLOEXEC) = 14
roslaunch実行時に生成されるログファイル(~/.ros/log以下のログ)に 実行時のLD_LIBRARY_PATHが書かれていますが, これを確認しても, (C)でLD_LIBRARY_PATHをセットしたのがログに反映されていました. 以下,ログファイルの一部抜粋.
'LD_LIBRARY_PATH': '/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/devel/lib:/home/murooka/catkin_ws/ws_rtmros_tutorials/devel/lib:/home/murooka/catkin_ws/ws_rtmros_common/devel/lib:/home/murooka/catkin_ws/ws_jsk_control/devel/lib:/home/murooka/catkin_ws/ws_jsk_pr2eus/devel/lib:/home/murooka/catkin_ws/ws_jsk_recognition/devel/lib:/home/murooka/catkin_ws/ws_jsk_model_tools/devel/lib:/home/murooka/catkin_ws/ws_jsk_roseus/devel/lib:/home/murooka/catkin_ws/ws_jsk_common/devel/lib:/opt/ros/hydro/lib:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins',
https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/catkin.cmake#L24 is commented out and hrpsys is not compiled.