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.

mmurooka commented 10 years ago

openrtm-users@openrtm.org の返信で rtmlaunchではexecveでrtcdを起動しているため, 環境変数が引き継がれないことを指摘されました.

ということで,仕切り直すと (1) RobotHardware.soのrpathを消して,rtmlaunchでLD_LIBRARY_PATHが反映されるようにして頑張る. (2) hrpsys_preload_rtcとhrpsys_load_pathで指定する( https://github.com/start-jsk/rtmros_gazebo/pull/45 ) (3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する という選択肢があるようですが,どうしましょうか.

k-okada commented 10 years ago

いずれにせよ,

rtmlaunchではexecveでrtcdを起動しているため,

を直しましょう.まずはticket切っておいて下さい.

(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する

がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.

2014-05-03 2:30 GMT+09:00 Masaki Murooka notifications@github.com:

openrtm-users@openrtm.org の返信で rtmlaunchではexecveでrtcdを起動しているため, 環境変数が引き継がれないことを指摘されました.

ということで,仕切り直すと (1) RobotHardware.soのrpathを消して,rtmlaunchでLD_LIBRARY_PATHが反映されるようにして頑張る. (2) hrpsys_preload_rtcとhrpsys_load_pathで指定する( #45https://github.com/start-jsk/rtmros_gazebo/pull/45) (3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する という選択肢があるようですが,どうしましょうか.

— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-42056875 .

mmurooka commented 10 years ago

rtmlaunchではexecveでrtcdを起動しているため,

を直しましょう.まずはticket切っておいて下さい.

を切りました.遅くなりました.

(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する

がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.

hrpsysをソースから入れているときは,そこにあるソースを使いまわすのでいいでしょうか. その場合,aptから入れている環境にはどう対応しましょう. aptから入れている時のみ新しくソースを落としてくるとかでしょうか.

k-okada commented 10 years ago

難しいですね. .so を分解して .o を取り出すツールがあったきがしたけど,思い出せない.それで再リンクというのもあるのかな.

2014-05-08 11:36 GMT+09:00 Masaki Murooka notifications@github.com:

rtmlaunchではexecveでrtcdを起動しているため,

を直しましょう.まずはticket切っておいて下さい.

を切りました.遅くなりました.

(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する

がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.

hrpsysをソースから入れているときは,そこにあるソースを使いまわすのでいいでしょうか. その場合,aptから入れている環境にはどう対応しましょう. aptから入れている時のみ新しくソースを落としてくるとかでしょうか.

— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-42507801 .

mmurooka commented 10 years ago

.so を分解して .o を取り出すツールがあったきがしたけど,思い出せない.それで再リンクというのもあるのかな.

分からないので調べてみた限りでは, 静的ライブラリなら,ar コマンドでメンバファイルを置き換えたりできるようですが, 動的ライブラリでは,難しそうです.

そもそも実行時にリンク先ファイルが決まるものなので, やっぱりrpathを置き換えるのが.oを置き換えることに相当するような気がします. rpathの上書きに長さ制限さえなければいいのですが..

garaemon commented 10 years ago

結局この問題はどうなりましたか?

mmurooka commented 10 years ago

止まっています.

とりあえず https://github.com/start-jsk/rtmros_common/issues/456 をマージしてもらえたら他の人もそのまま使えるようになるのですが ベストではなさそうですがマージしてしまうというのは, あまり良くないでしょうか.

それで,この解決策はちょっと微妙な方法なので, もっと良い方法を探していくというようにしたいです.

k-okada commented 10 years ago

何とかします.

ポイントは以下の2点.

1) RobotHardwareからlibiobにrpathでリンクがつながっている件 無理やりchrpathで外す,切り替える,はちょっとやり過ぎか. gcc -sahred -o RobotHardware.so libiob.o RobotHardware.so みたいにしたら何が起こるだろうか? これがだめなら,RobotHardwareのsrcを落としてコンパイルするか.

2) rtmlaunchがLD_LIBRARY_PATHを見えるように変えたい.

2014-05-28 10:20 GMT+09:00 Masaki Murooka notifications@github.com:

止まっています.

とりあえず start-jsk/rtmros_common#456https://github.com/start-jsk/rtmros_common/issues/456 をマージしてもらえたら他の人もそのまま使えるようになるのですが ベストではなさそうですがマージしてしまうというのは, あまり良くないでしょうか.

それで,この解決策はちょっと微妙な方法なので, もっと良い方法を探していくというようにしたいです.

— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-44355261 .

k-okada commented 10 years ago

@mmurooka 幾つか質問です.

とりあえず start-jsk/rtmros_common#456 をマージしてもらえたら他の人もそのまま使えるようになるのですが

ですが,上のリンクはPRではなくてIssueにみえますが,まちがいでしょか?

マージしたらいいのは,いかでしょうか?これはcaktinだけでしょうか?rosbuildは未対応でしょうか.

https://github.com/start-jsk/rtmros_gazebo/pull/45/files

chrpathでrpathを消すというのが必要になっているとおもうけど,これはどのPRでしょうか?

k-okada commented 10 years ago

chpathでrpahを消す以外に,hrpsys_gazebo_general用にRobotHardwareを作るというのがあるとおもうけど,本当はhrpsysのソースをどこからか持ってくる,という方法がただしそうですが,以下はかなり強引に,https://github.com/k-okada/rtmros_gazebo/blob/RobotHardware_dummy/hrpsys_gazebo_general/iob/RobotHardware_dummy.cpp というフィアルからRobotHardwareを作って見ました.やっぱ強引かな.hrpsysをinstallするときにRobotHardwareのソースをコピーしておいて,hrpsys_gazebo_generalがそれを使うようにする,というのが正統で正しそうだろうか...

https://github.com/start-jsk/rtmros_gazebo/pull/57/files

YoheiKakiuchi commented 10 years ago

rtmlaunchでLD_LIBRARY_PATHをみるようにするのは難しいのでしょうか?

gazebo_generalだけでなく、staroや今後つかう他のロボットも同じやり方になるので、シンプルな方が分かりやすいかと思います。 hrpsys_sourceパッケージを作るというのもあるかもしれないですね。問題となっているのは、sourceの場所が参照できないという問題ですので。 groovyはsourceの場所が参照できるので、RobotHardwareをhrpsys-baseのソースから作っていて問題なく動いているはずです。

mmurooka commented 10 years ago

ですが,上のリンクはPRではなくてIssueにみえますが,まちがいでしょか? マージしたらいいのは,いかでしょうか?これはcaktinだけでしょうか?rosbuildは未対応でしょうか. https://github.com/start-jsk/rtmros_gazebo/pull/45/files

はい,間違えました.そのPRです. rosbuildは未対応です.

chrpathでrpathを消すというのが必要になっているとおもうけど,これはどのPRでしょうか?

このPRだけで動くようになります. rpathは消さなくても大丈夫です. https://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-41825641 で十分に説明できているかわかりませんが,

hrpsys_preload_rtcで読み込んでほしいlibhrpioのパスを書いておくことで, RobotHardwareがlibhrpioを探す前に, 正しいlibhrpioを無理やりdlopenするので, RobotHardwareのrpathに応じたdlopenはしなくなっているはずです.

garaemon commented 10 years ago

rtmlaunchでLD_LIBRARY_PATHをみるようにするのは難しいのでしょうか?

gazebo_generalだけでなく、staroや今後つかう他のロボットも同じやり方になるので、シンプルな方が分かりやすいかと思います。

+1

k-okada commented 10 years ago

むつかしくはないけどかなり強く意識ないと簡単にトラブルになりますね。

また前提条件としてhrpsysでRobotHardwareをコンパイルするときにrpathしないというのが出てきます。 このrtcのlibHrpIo.soだけ別扱いにしますか?hrpsys全体でrpathしないというのは危険ですよね。 RobotHardwareCompはどうしますか?こちらもrpathははずしましでしょうか?

k-okada commented 10 years ago

hrpsys_sourceではなくhrpsys/src/rtc/RobotHardware にインストールしてロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?

garaemon commented 10 years ago

また前提条件としてhrpsysでRobotHardwareをコンパイルするときにrpathしないというのが出てきます。

ああ、なるほど。

ロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?

それが良いと思います。 このRobotHardware_dummy.cppではなく、おおもとのソースコードを使うことは難しいのでしょうか?

YoheiKakiuchi commented 10 years ago

hrpsys_sourceではなくhrpsys/src/rtc/RobotHardware にインストールしてロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?

+1

mmurooka commented 10 years ago

https://github.com/start-jsk/rtmros_gazebo/pull/79 で解決しました.