Open fkanehiro opened 10 years ago
From kei.ok...@gmail.com on October 17, 2013 19:53:55
Please check if you have latest hrpsys-bsae, This problem was reported on Issue 138 and should be resolved. This also check in jenkins and passed, http://jenkins.jsk.imi.i.u-tokyo.ac.jp:8080/job/hironx-rosbuild/ . please check if roslaunch hironx_ros_bridge hironx_startup.launch works on your computer. https://code.google.com/p/hrpsys-base/issues/detail?id=138
Owner: kei.ok...@gmail.com
Cc: m117...@gmail.com
From ik0...@gmail.com on October 17, 2013 22:36:41
rtmlaunch hironx_ros_bridge hironx_startup.launch では確かにエラーは出ませんが, rtmlaunch hrpsys_ros_bridge_tutorials hrp2jsk.launch や rtmlaunch jsk_hrpsys_ros_bridge hrp4r.launch では以下のようにOpenHRPのnamespaceに関するエラーが出ます. hironxでエラーが出ないのはhironx_ros_bridge/launch/hironx_startup.launch でHRPSYS_PY_NAMEとして利用しているhironx.py内15行目で import OpenHRP をしているためだと思います. なおhrpsysは r5728 , hrpsys-base-sorceは r879 です. 確認よろしくお願いいたします.
-- 以下エラー --
Traceback (most recent call last):
File "/home/iori/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_tools/scripts/hrpsys_config.py", line 12, in
From kei.ok...@gmail.com on October 17, 2013 22:46:29
なるほど,ありがとう r880 で直しました. ただ,元々は mdlldr = obj._narrow(ModelLoader_idl._0_OpenHRP__POA.ModelLoader) ではなく mdlldr = obj._narrow(ModelLoader) で動いていたんだけど,どうしたらこうなるか分かるかな.
From ik0...@gmail.com on October 18, 2013 02:44:02
ModelLoader_idl.pyを見てみたところ, ModelLoader(= OpenHRP.ModelLoader)とModelLoader_idl._0_OpenHRPPOA.ModelLoaderは実質同一のものであるように思います(ModelLoader_idl.py 733行目). ただpythonモジュールのインストール先が issue138 でdist-packagesからdist-packages/hrpsysに変わった結果, OpenHRPへのアクセス方法がhrpsys.OpenHRPに変わったため, 最上層で from hrpsys.hrpsys_config import HrpsysConfigurator すると(この時点でhrpsys/init__.pyによりsys.pathの末尾にdist-packages/hrpsysが追加されるが名前空間は変わっていない)OpenHRP.ModelLoaderがModelLoaderとして呼べなくなることが原因だと思います. ModelLoader_idl._0_OpenHRP__POA.ModelLoaderはModelLoader_idl.pyがhrpsys直下にあるためその次の from hrpsys import * でパスが通り呼べるようになります.
また最上層(hironx.py, hrpsys_tools/scripts/hrpsys_config.py等)で from hrpsys.hrpsys_config import HrpsysConfigurator した場合, 以下のようなエラーが出ます. これはsys.modulesにおけるOpenHRPのkeyがhrpsys.OpenHRPになることが原因であり, from hrpsys import * (ここでhrpsys.OpenHRP->OpenHRPになる) from hrpsys_config import とすれば回避可能です. 以上の変更を加えるとdist-packages/hrpsys/hrpsys_config.pyで from hrpsys import を消して mdlldr = obj._narrow(ModelLoader) としてもhironx_startup.launch, samplerobot_startup.launchが上がることを確認しました.
最後に, dist-packages/hrpsys/init.pyでappendではなく sys.path.insert(0, os.path.dirname(file)) としないとhrpsys_config.pyがhrpsys_toolsの方を見に行ってエラーを起こしていました. ただこれはhrpsys_toolsのhrpsys_configを消すのであれば問題にならないような気はします.
-- 以下ログ --
Traceback (most recent call last):
File "/home/iori/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_tools/scripts/hrpsys_config.py", line 13, in
From you...@jsk.imi.i.u-tokyo.ac.jp on October 18, 2013 06:33:39
どうやら、これがうまく行っていない。
した場合, 以下のようなエラーが出ます. これはsys.modulesにおけるOpenHRPのkeyがhrpsys.OpenHRPになることが原因であり, from hrpsys import * (ここでhrpsys.OpenHRP->OpenHRPになる) from hrpsys_config import * とすれば回避可能です.
以下のように回避しています。最後のimport OpenHRP で hrpsys.OpenHRP->OpenHRPになる import hrpsys from hrpsys.hrpsys_config import * import OpenHRP
以下がうまく行っていないようだ。pathの順番とかの問題かな? from hrpsys import * (ここでhrpsys.OpenHRP->OpenHRPになる)
From kei.ok...@gmail.com on October 18, 2013 19:59:05
ようやく話に追いつきました. hrpsys_tools_config.py (やその他のプログラム)では, from hrpsys import * hcf = HrpsysConfigurator() あるいは import hrpsys hcf = hrpsys.HrpsysConfigurator() として使いたい(というのでいいですか?),とすると,
--- python/init.py (リビジョン 875) +++ python/init.py (作業コピー) @@ -1,2 +1,6 @@ import sys, os sys.path.append(os.path.dirname(file)) + +import hrpsys +from hrpsys import +from hrpsys_config import
とするとよい.というのはOKでしょうか?
ただこうすると上の熊谷くんの「以下ログ」というエラーが出て,垣内くんがいっているように, import OpenHRP を追加する必要がある.上のinit.pyをしたときの,hrpsys_tools_config.pyは以下のようになっていますが,ここからimport OpenHRPを外すにはどうしたらいいでしょうか?
import roslib; roslib.load_manifest("hrpsys")
from hrpsys import * import OpenHRP
if name == 'main': hcf = HrpsysConfigurator() if len(sys.argv) > 2 : hcf.init(sys.argv[1], sys.argv[2]) elif len(sys.argv) > 1 : hcf.init(sys.argv[1]) else : hcf.init()
Cc: ik0...@gmail.com
From ik0...@gmail.com on October 19, 2013 03:03:20
from hrpsys import するとhrpsys内のモジュールがローカルの名前空間からアクセスできるようになりますが,sys.modules.keys()に入るモジュール名にはhrpsys.hogehogeのようにhrpsysが付くようです. 従ってfrom hrpsys import としてhrpsysのモジュール内でOpenHRPをimportしている限りOpenHRPのKeyErrorは解決できない気がしています.
一方hrpsys_tools_config.pyでimport OpenHRPすると通るのは同一モジュールが別の名前空間内でimportされたことによりhrpsys.OpenHRP(from hrpsys import *でimportされたもの)とは別に OpenHRP(import OpenHRPでトップレベルからimportされたもの)がmodulesに入るためのようです.
しかし, rtm.pyのnarrowにおけるpackageのデフォルトを"hrpsys.OpenHRP"にしても 以下のようなエラーでうまく動きません. どうやらOpenHRP/init.pyでimportしている自動生成ファイルhogehoge_idl.py郡の中でnameを"OpenHRP"に変更して各種class等のnamespaceをOpenHRPとして定義していることが原因のようです. namespaceがhrpsys.OpenHRPしかない場合これらのクラスにアクセスできなくなり, エラーが発生します. どうやらhrpsys_config.pyでmdlldr = obj._narrow(ModelLoader)が動かなくなったのもこれによるもの(ModelLodaerはOpenHRP.ModelLoderになっている)な気がしています. これらは自動生成ファイルらしく, 定義されている関数群もよくわからなったのでこれ以上の変更・検証は困難でした.
結論として解決策ですが, どうにかしてOpenHRPのimport時にOpenHRPを存在させる(今のように再上層でimport OpenHRPする等)か, いっそmanifest.xmlのpathをdist-packages/hrpsysまで通してしまうかくらいしか思いつきません. 自動生成ファイル郡を書き換える方法もあるのかもしれませんが僕にはよくわかりませんでした.
何か良い方法をご存知であれば教えていただけますと幸いです.
-- 以下ログ --
Traceback (most recent call last):
File "/home/iori/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_tools/scripts/hrpsys_tools_config.py", line 15, in
From ik0...@gmail.com on October 20, 2013 21:14:34
omniidlのpythonについてのpackageを-Wbpackageで設定できるらしいので, idl/CMakeLists.txtを以下のように変更しましたが, これだとhogehoge_idl.py内でimportしているOpenRTM関連のidlまでhrpsysのnamespaceに入るらしくエラーが出ます.
hrpsys関連以外のmoduleのnamespaceに手を出さないようにするにはhogehoge_idl.pyを生成する規則を変更する必要がありそうですが, どこを変更すれば良いのでしょうか. いっそdist-packages/hrpsysではなくdist-packages直下にOpenHRPを入れるのも有りな気はしますが, この場合どのような問題がありそうでしょうか.
-- 以下ログ -- svn diff hrpsys-base-source/idl/CMakeLists.txt
--- CMakeLists.txt (リビジョン 881) +++ CMakeLists.txt (作業コピー) @@ -119,8 +119,8 @@ endif() endforeach()
-install(CODE "execute_process(COMMAND omniidl -bpython -C${python_dist_pkg_dir}/hrpsys -I${OPENRTM_IDL_DIR} ${idl_files} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})") -install(CODE "execute_process(COMMAND omniidl -bpython -C${python_dist_pkg_dir}/hrpsys -I${OPENRTM_IDL_DIR} ${openhrp_idl_files} WORKING_DIRECTORY ${OPENHRP_DIR}/share/OpenHRP-3.1/idl/OpenHRP)") +install(CODE "execute_process(COMMAND omniidl -bpython -C${python_dist_pkg_dir} -Wbpackage=hrpsys -I${OPENRTM_IDL_DIR} ${idl_files} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})") +install(CODE "execute_process(COMMAND omniidl -bpython -C${python_dist_pkg_dir} -Wbpackage=hrpsys -I${OPENRTM_IDL_DIR} ${openhrp_idl_files} WORKING_DIRECTORY ${OPENHRP_DIR}/share/OpenHRP-3.1/idl/OpenHRP)")
rtmlaunch hrpsys_ros_bridge_tutorials samplerobot_startup.launch
Traceback (most recent call last):
File "/home/iori/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys_tools/scripts/hrpsys_tools_config.py", line 6, in
From gm130s on December 31, 2013 02:37:59
この件ハマっています.色々試しても,上でレポートされているいづれかの状態になります.解決できた方が居たら方法を教えて頂きたいです.
参考まで,私がやろうとしているのは:
hironx_ros_robotics/file_a.py: try: # Since Groovy does not requires load_manifest import roslib import hironx_ros_bridge except: import roslib; roslib.load_manifest('hironx_ros_bridge')
from hrpsys_ros_bridge.file_b import ClassB
hrpsys_ros_robotics/file_b.py:
import roslib; roslib.load_manifest("hrpsys") # These 2 lines need ordered this way.
#import roslib; roslib.load_manifest('hrpsys_ros_bridge')
from hrpsys.hrpsys_config import *
import OpenHRP
import OpenRTM_aist
import OpenRTM_aist.RTM_IDL
import rospy
import rtm
from waitInput import waitInputConfirm, waitInputSelect
SWITCH_ON = hrpsys.OpenHRP.RobotHardwareService.SWITCH_ON
SWITCH_OFF = hrpsys.OpenHRP.RobotHardwareService.SWITCH_OFF
class ClassB(HrpsysConfigurator):
:
Error: /home/roo/groovy_precise/catkinws/install/lib/python2.7/dist-packages/hrpsys_ros_bridge/file_b.py 44 from hrpsys.hrpsys_config import * ---> 45 import OpenHRP 46 import OpenRTM_aist 47 import OpenRTM_aist.RTM_IDL
/home/roo/groovy_precise/catkinws/install/lib/python2.7/dist-packages/hrpsys_ros_bridge/OpenHRP/__init__.py in <module>()
4
5 import omniORB
----> 6 omniORB.updateModule("OpenHRP") 7 8 # \ 1. Stub files contributing to this module
/usr/lib/python2.7/dist-packages/omniORB/__init__.pyc in updateModule(mname)
618 if _partialModules.has_key(mname):
619 pmod = _partialModules[mname]
--> 620 mod = sys.modules[mname]
621 mod.__dict__.update(pmod.__dict__)
622 del _partialModules[mname]
KeyError: 'OpenHRP'
From gm130s on January 27, 2014 10:58:51
上の二点のエラーがどうにも回避できないので,再現性のあるコードを付けて次のリンクで報告しなおしています.どなたか見て頂けると幸いです. https://code.google.com/p/rtm-ros-robotics/issues/detail?id=305
From kei.ok...@gmail.com on January 27, 2014 19:00:08
groovy/12.04で以下のようにしてエラーが出ていないのですが,これでは確認にならないでしょうか?これ以外の状況で利用されているという事になるでしょうか?
$ rtmlaunch hrpsys_ros_bridge_tutorials samplerobot_startup.launch $ roslaunch hrpsys_ros_bridge_tutorials samplerobot_ros_bridge.launch
From gm130s on January 28, 2014 23:36:55
groovy/12.04で以下のようにしてエラーが出ていないのですが,これでは確認にならないでしょうか?これ以外の状況で利用されているという事になるでしょうか?
はい,下記リンクで書いているように,クラス構造変更を試している最中で起きています. http://code.google.com/p/rtm-ros-robotics/issues/detail?id=305
From kei.ok...@gmail.com on January 28, 2014 23:56:40
クラスの構造変更は何故必要でしょうか?hrpsysで提供されているサービスは全てOpenRTMレイヤで動いているものなので,ROSとしてサービスコールする必要があるレイヤは無い,あるいは,冗長になると思っているのですが...
もし,hrpsys_ros_bridgeレベルで,なにかコードが必要だとすると,hrpsysが提供せずに,hrpsys_ros_bridgeが提供するコード,例えばJointTrajectoryActionに対する操作を行う関数/クラスになると思っていて,例えば,それには, http://ehc.ac/p/jsk-ros-pkg/code/HEAD/tree/trunk/pr2eus/robot-interface.l のようにロボットのモデルを読み込んだら必要な関節の名前を取ってきて,:angle-vector #f(0 0 0 0 0 0) で,jointtrajectionに投げる,というものが有りそうです.がこれは,hrpsys_ros_bridgeレベルではなくて,jointTrajectryActionレベルなので,ros_controlあたりのパッケージに入れるべきコードになると思います.
From gm130s on January 29, 2014 06:11:05
混乱を招いてすみません.クラス構造の変更は hrpsys に対してではありません.{ hrpsys, hironx }_ros_bridge の間で試みています.次のチケットの課題への対応です http://code.google.com/p/rtm-ros-robotics/issues/detail?id=291
From muro...@jsk.imi.i.u-tokyo.ac.jp on October 18, 2013 11:48:41
hrpsys-base-source/python/hrpsys_config.py の352行目で, mdlldr = obj._narrow(OpenHRP.ModelLoader_idl._0_OpenHRP__POA.ModelLoader) とありますが, OpenHRPという名前が見つからないエラーが出ます.
7行目で from OpenHRP import * をしているため,"OpenHRP."が不要ではないかと思います.
Original issue: http://code.google.com/p/hrpsys-base/issues/detail?id=145