start-jsk / rtmros_gazebo

gazebo simulation for rtmros robots
8 stars 24 forks source link

hrpsys is not compiled in hrpsys_gazebo_general when catkin_make #35

Closed mmurooka closed 10 years ago

mmurooka commented 10 years ago

https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/catkin.cmake#L24 is commented out and hrpsys is not compiled.

k-okada commented 10 years ago

Could you explain more detail on your problem? Hrpsys gazebo compile only iob instead of compiling whole hrpsys source tree.

mmurooka commented 10 years ago

何が原因かちゃんと分かっていないのですが, 以下のように試して動かないことから, 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.

k-okada commented 10 years ago

what it the result of ldd ....RObotHardware.so and roslaunch --args <nodes that seems important> hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch

mmurooka commented 10 years ago

以下のようになりました.

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

https://github.com/start-jsk/rtmros_gazebo/issues/23

ここの最後で.soがうまく読まれていない気がすると言っているのは同じ問題にみえますね。

k-okada commented 10 years ago

rtmlaunch というnodeはないようです.

すいません.記入間違い.直しました.重要そうなノードを引数にしてください,といういみでした. roslaunch --args hrpsys hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch とか, roslaunch --args hrpsys_py hrpsys_gazebo_tutorials samplerobot_hrpsys_bringup.launch とか関係しそうなものを調べてみて下さい.

garaemon commented 10 years ago

https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_tutorials/launch/robot_hrpsys_bringup.launch#L39 このhrpsys_load_pathの値ですが、src以下を見てしまっていたりしないでしょうか?

k-okada commented 10 years ago

多分ですが,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 みたいな感じになるとおもいます.,; かは ちょっとうる覚えです.

mmurooka commented 10 years ago
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対応していなさそうに見えます.

garaemon commented 10 years ago

$(find ...)ではなく、とりあえず直接devel以下のパスを書くとどうなるでしょうか? .../devel/share/hprsys_gazebo_general/lib

mmurooka commented 10 years ago

ここの最後で.soがうまく読まれていない気がすると言っているのは同じ問題にみえますね。

今はinstallはせずにdevelで試していますが,似ている問題かもしれません.

mmurooka commented 10 years ago

とりあえず直接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/)
mmurooka commented 10 years ago

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 に一致しました
garaemon commented 10 years ago

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

LD_LIBRARY_PATHの先頭にdevel/share/hrpsys...をつけてみるとどうでしょうか?

mmurooka commented 10 years ago

ダメです..

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

roslaunch --args hrpsys を調べていましたが, 実行中にはこのnodeがいないのは問題ないでしょうか.

$ rosnode list | grep hrpsys
/hrpsys_profile
/hrpsys_ros_diagnostics
mmurooka commented 10 years ago

一応,rtmlaunchのターミナルのログを添付してみようかと思いましたが, 画像しか添付できないみたいですね.

garaemon commented 10 years ago

devel/lib/libhrpIo.soをえいやっと削除してみると動きますか?

mmurooka commented 10 years ago

動いてしまいます.

rtprint localhost:15005/RobotHardware0.rtc:q で関節角が出ていてRobotHardwareも動いています. -o manager.modules.load_pathの一個目の引数(/home/murooka/ros_catkin_ws/hydro/devel/share/hrpsys_gazebo_general/lib)は空です.

garaemon commented 10 years ago

つまり libhrpIo.soをopenしようとしていて、devel/share/hrpsys_gazebo_generalのlibhrpIo.soを開いてほしいのにdevel/libのものを開いてしまっているのが問題 ということですか?

mmurooka commented 10 years ago

不思議ですがそういうことのように思います.

mmurooka commented 10 years ago

devel/lib/libhrpIo.soをえいやっと削除してみると動きますか?

さっき試したのは,これの逆でgazebo_generalの libhrpIo.soを消していました. これも試します.

garaemon commented 10 years ago

中身を何もみないで言いますが .soを開くためにdlopen(3)を使っていると思うのですが、これはLD_LIBRARY_PATHの先頭から指示された.soを開くという仕様だったとおもったのでLD_LIBRARY_PATHいじる作戦はうまく行きそうなものですが....

mmurooka commented 10 years ago

まだよく見ていませんが,可能性として, https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/iob/iob.cpp でpublishのadvertiseとsubscribeがif文の中にあってそこへ行っていないのかもしれないです.

garaemon commented 10 years ago

その場合はiob_commandがpublishされるっぽいように見えますね

garaemon commented 10 years ago

メモですが、lib/rtm/ModuleManager.cppによると、load_pathを先頭から順番に舐めて、指定された ライブラリのファイル名と一致するファイルを探して、そのパス全体を引数にdlopenしてるように見えます。

mmurooka commented 10 years ago

topic にも serviceにも iob_commandはいないです.

k-okada commented 10 years ago
 -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) だとのちほど.

mmurooka commented 10 years ago

確認しました.

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)
garaemon commented 10 years ago

うーん、デフォルトでhrpsys以下のlibhrpIo.soが読まれているのが謎ですね...

mmurooka commented 10 years ago

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

hrpsys_gazebo_generalのRobotHardware.soは使わない作戦ですか?

orikuma commented 10 years ago

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")がされているように見えます.

garaemon commented 10 years ago

その引数を与えないようにすべき、ということかな?

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

mmurooka commented 10 years ago

.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 などで使い分けることができそうです.

k-okada commented 10 years ago

話を全て理解しているわけではないので間違えているかもしれないですが

.soから.soへのリンクは,rpathが指定されていない場合,LD_LIBRARY_PATHの順に探すのでしょうか.

はい.そうなります.

は,RobotHardware.soを探す場所を指定しているだけで, RobotHardware.soがリンクするlibhrpIo.soの場所を指定しているわけではないということで合っている でしょうか.

はい.たぶん合っています.

確認ですが,hrpsys_gazebo_generalはRobotHardware.soを生成するんだっけ?しないんだっけ? rpathで専用のlibIob.so をリンクしたRobotHardware.soを生成するのが楽な気がします.

mmurooka commented 10 years ago

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を指すようにする、 という流れが良さそうです。

garaemon commented 10 years ago

その作戦で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 .

mmurooka commented 10 years ago

はい、やってみます。

rosパッケージのhrpsysをソースから入れた場合とaptで入れた場合で RobotHardware.soの場所が違う気がするので少し面倒そうです。 とりあえず、ソースから入れた場合を想定してみます。

k-okada commented 10 years ago

2014-04-11 12:02 GMT+09:00 mmurooka notifications@github.com:

rosパッケージのhrpsysをソースから入れた場合とaptで入れた場合で RobotHardware.soの場所が違う気がするので少し面倒そうです。 とりあえず、ソースから入れた場合を想定してみます。

いや,どちらも rospack find hrpsys/lib に入るようにしているつもりだけどな.

mmurooka commented 10 years ago

いや,どちらも 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})を変えてコンパイルし直すしかないでしょうか..

k-okada commented 10 years ago

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 .

mmurooka commented 10 years ago

@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 で聞いてみました.

mmurooka commented 10 years ago

ローカル環境で動作確認できました. PRを作りました.

k-okada commented 10 years ago

お疲れ様.

あまりい解決策ではないけど,,, 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 .

mmurooka commented 10 years ago
    <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を追加しておきましたが, デフォルトで有効にしておいたほうが良さそうでしょうか.

k-okada commented 10 years ago

デフォルトで有効にしておいたほうが良さそうでしょうか.

いやいや,デフォルトは無効で良いです.

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 .

mmurooka commented 10 years ago

以下のような感じで, (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
mmurooka commented 10 years ago

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',