Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError: 'OpenHRP' with 315.1.7 #42

Closed
k-okada opened this issue Feb 12, 2015 · 20 comments
Closed

KeyError: 'OpenHRP' with 315.1.7 #42

k-okada opened this issue Feb 12, 2015 · 20 comments

Comments

@k-okada
Copy link
Contributor

k-okada commented Feb 12, 2015

start-jsk/openhrp3#57
で報告されている件ですが,

from OpenHRP3 import *
..
ImportError: No module named SDOPackage_idl

になるようですが,これは予め

from OpenRTM_aist.RTM_IDL import SDOPackage_idl

する必要が有るというのでいいでしょうか.
もうひとつは,

 import OpenHRP3
...
KeyError: 'OpenHRP'

があるようですが,これは生成されたinit.pyを無理やり直さないとダメだったでしょうか.
いずれにせよ,tag 315.1.7ですので,
#36
の前の話になります.

@k-okada
Copy link
Contributor Author

k-okada commented Feb 12, 2015

#43
SDOPackageの問題は最新の環境でもおこっているでしょうか?上のPRで無理やりなおしましたが,もっと良い方法は有りますでしょうか?

@fkanehiro
Copy link
Owner

かなり無理やり感がありますが、pythonの作法でいうとどうなんでしょうね?

2015-02-12 12:31 GMT+09:00 Kei Okada [email protected]:

#43 #43
SDOPackageの問題は最新の環境でもおこっているでしょうか?上のPRで無理やりなおしましたが,もっと良い方法は有りますでしょうか?


Reply to this email directly or view it on GitHub
#42 (comment).

@k-okada
Copy link
Contributor Author

k-okada commented Feb 12, 2015

うーん.

import OpenRTM_aist.RTM_IDL
import OpenHRP

としたらOKぽいですね.これがただしいということなんでしょうか????
python + corba ということで,イマイチなにが正解かわからないですが...

@k-okada
Copy link
Contributor Author

k-okada commented Feb 13, 2015

@yosuke さん,どうでしょうか?(あるいは,どうされていますでしょうか?)SDOの問題はそちらでも出ている気がしますが...

◉ Kei Okada

2015-02-12 13:27 GMT+09:00 Fumio KANEHIRO [email protected]:

かなり無理やり感がありますが、pythonの作法でいうとどうなんでしょうね?

2015-02-12 12:31 GMT+09:00 Kei Okada [email protected]:

#43 #43
SDOPackageの問題は最新の環境でもおこっているでしょうか?上のPRで無理やりなおしましたが,もっと良い方法は有りますでしょうか?


Reply to this email directly or view it on GitHub
#42 (comment).


Reply to this email directly or view it on GitHub
#42 (comment).

@yosuke
Copy link
Contributor

yosuke commented Feb 14, 2015

以前は
omniidl -bpython -Wb{package,modules,stubs}
でパッケージ名を指定してスタブを吐き出させるとimport OpenRTM.RTM_IDLの子供にスタブを配置&利用できていたのですが、最近のomniORBだとその挙動がおかしいのですよね、、、。
パッケージ名を指定しないでスタブを吐かせると全く問題ないのですが。

@k-okada
Copy link
Contributor Author

k-okada commented Feb 14, 2015

やっぱりよくわからないんですが,

lib/python2.7/dist-packages/OpenHRP/__init__.py
lib/python2.7/dist-packages/hrpsys/OpenHRP/__init__.py

となるときに,選択的に上と下とどうやってロードするんでしょうか?例えば,
https://github.com/fkanehiro/hrpsys-base/blob/master/python/hrpsys_config.py#L7
あたりで,ModelLoader_idl を読み込もうとしていますが,

In [1]: import hrpsys.hrpsys_config
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-8e83114414a0> in <module>()
----> 1 import hrpsys.hrpsys_config

/home/k-okada/ros/indigo_parent/devel/lib/python2.7/dist-packages/hrpsys/hrpsys_config.py in <module>()
      7 import OpenRTM_aist.RTM_IDL # to avoid https://github.com/fkanehiro/openhrp3/issues/42 issue
      8 from OpenHRP import *
----> 9 print ModelLoader_idl
     10 
     11 try:

以下のようにエラーに成る気がするんですが...

@yosuke
Copy link
Contributor

yosuke commented Feb 14, 2015

同じような議論を見つけたのですが参考になりますでしょうか?
http://osdir.com/ml/corba.omniorb.user/2003-02/msg00011.html

@yosuke
Copy link
Contributor

yosuke commented Feb 14, 2015

この人によると-Wbinlineオプションを使うとどうにかなるそうです。
http://osdir.com/ml/corba.omniorb.user/2003-02/msg00012.html

@k-okada
Copy link
Contributor Author

k-okada commented Feb 14, 2015

皆さんはどのようなん環境でコンパイル&利用していますでしょうか?

2個めがみなさんどうなっているかわからないんですが,もし使うとすると,
https://github.com/fkanehiro/hrpsys-base/blob/master/python/hrpsys_config.py#L606
あたりで,ModelLoader_idl (OpenHRP3で定義されている?)を使う必要があって,
fkanehiro/hrpsys-base#483
みたいに何かしなければいけない気がしますがどうでしょうか?

@k-okada
Copy link
Contributor Author

k-okada commented Feb 14, 2015

あ,ところで,今ちょうど
https://github.com/fkanehiro/hrpsys-base/pull/482/files
で,いままでinstall()でidlのpythonコンパイルをしていたのを,
build時に行うようにしていたんですが,ここで昔はOpenHRP3のIdlもhrpsysの中に入れていたんだけど,それをやめてみたんですが,それが原因になっているでしょうか?
つまり,このOpenHRP3のidlをコンパイルしたもんをhrpsysでも持つ,というのはやめられない,ということになるでしょうか?

@snozawa
Copy link
Contributor

snozawa commented Feb 14, 2015

こちらの状況としましては、

最新のOpenHRP3を使う(これは皆さん一緒でしょうか?)

最新github OpenHRP3でなく、古いsvn OpenHRP3(マシンによって + start-jsk/openhrp3)で運用しております。
できるだけはやくさいしんgithub OpenHRP3に移行したいですが、
ロボット実機の確認も含めて、なんだかんだで3月はいって以降になると思います。

hrpsysではhttps://github.com/fkanehiro/hrpsys-base/blob/master/python/hrpsys_config.py を使う?

ですので、hrpsys-baseレベルではできれば両方動くとうれしいです。
もし難しい場合は、古い方はなにかパッチをあてて一ヶ月しのぐのでも大丈夫です。

@fkanehiro
Copy link
Owner

https://github.com/fkanehiro/hrpsys-base/pull/482/files
の中身をよく見てないのですが、IDLを何処かでコンパイルして、最後に
インストール先へコピーするようになってますでしょうか。
そうだとするとちょっと困ります。

IDLのモジュールがpythonのパッケージに変換されるわけですが、
パッケージ内にどのようなモジュールがあるかというのがinit.pyに
書いてあり、これはomniidlによって生成されます。
従ってhrpsysのIDLだけをコンパイルした場合にはOpenHRPの下にある
init.pyにはhrpsysのIDLに対応するモジュールしか列挙されていない
状態になり、OpenHRPのIDLのモジュールが初期化されなくなってしまいます。

別のソフトウェアパッケージで同じモジュールを使うなということなのかも
しれませんが、この問題を回避するためにインストール時にコンパイル
するようにしています。そうすると既存のinit.pyに対してコンパイルした
モジュールが追記されていくようですので。

OpenHRPのIDLをhrpsysでコンパイルするのをやめるには、hrpsysという
ディレクトリを作るのをやめれば、OpenHRPが生成したinit.pyに
hrpsysのモジュールが追記されるようになると思います。結構影響が大きそう
ですけれども。

2015-02-14 18:17 GMT+09:00 Kei Okada [email protected]:

あ,ところで,今ちょうど
https://github.com/fkanehiro/hrpsys-base/pull/482/files
で,いままでinstall()でidlのpythonコンパイルをしていたのを,

build時に行うようにしていたんですが,ここで昔はOpenHRP3のIdlもhrpsysの中に入れていたんだけど,それをやめてみたんですが,それが原因になっているでしょうか?
つまり,このOpenHRP3のidlをコンパイルしたもんをhrpsysでも持つ,というのはやめられない,ということになるでしょうか?


Reply to this email directly or view it on GitHub
#42 (comment).

@k-okada
Copy link
Contributor Author

k-okada commented Feb 14, 2015

2015-02-14 22:07 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/482/files
の中身をよく見てないのですが、IDLを何処かでコンパイルして、最後に
インストール先へコピーするようになってますでしょうか。
そうだとするとちょっと困ります。

はい (PR,少し変えてfkanehiro/hrpsys-base#486 が最新です)
よくわかっていないですが,hrpsys/openHRPの両方IDLを適当なディレクトリでコンパイルしてインストール時にコピーしています.
こで,hrpsys/OpenHRP/__init__.py が以下なんですが,大丈夫ってことでしょうか.
また,確認案ですが,そちらではかならずmake; make
installしているんでしょうか?とすると,make時にlib/python2.7/dist-packages/hrpsysに
書けばいいのか,あるいはどこか書いたらいいところがあったするんでしょうか?

# DO NOT EDIT THIS FILE!
#
# Python module OpenHRP generated by omniidl

import omniORB
omniORB.updateModule("OpenHRP")

# ** 1. Stub files contributing to this module
import DataLoggerService_idl
import StateHolderService_idl
import RobotHardwareService_idl
import WavPlayerService_idl
import SequencePlayerService_idl
import ForwardKinematicsService_idl
import ExecutionProfileService_idl
import OGMap3DService_idl
import NullService_idl
import TimeKeeperService_idl
import HRPDataTypes_idl
import ImpedanceControllerService_idl
import SoftErrorLimiterService_idl
import CollisionDetectorService_idl
import GraspControllerService_idl
import TorqueFilterService_idl
import KalmanFilterService_idl
import VirtualForceSensorService_idl
import StabilizerService_idl
import AutoBalancerService_idl
import RemoveForceSensorLinkOffsetService_idl
import ServoControllerService_idl
import TorqueControllerService_idl

# ** 2. Sub-modules

# ** 3. End
__init__.py (END)

◉ Kei Okada

@fkanehiro
Copy link
Owner

いや、これはhrpsysのモジュールしかないんじゃないですか。

それとOpenHRPとhrpsysだけであれば、hrpsysでOpenHRPのIDLもコンパイルすればいいんですが、
3つ目、4つ目のソフトウェアがある時に、ソフトウェア間の依存関係なんかもあってすべてのソフトウェアの
IDLをコンパイルする、というのはできなくなると思います。(こちらでは3つ目、4つ目があったりします)

更にmakeする時にコンパイルするとなると、コンパイル先が/usrとかルート権限が必要な場所だったり
するとmakeするときもルートでやらないといけなくなるので避けたいですね。インストール時だとなぜ
困るか(ROSではインストールをしていない?)わかってませんが、make時に何とかするとなると、一旦
既にあるinit.pyをコピーしてきて、コンパイルする、ということになるでしょうか?

2015-02-14 23:46 GMT+09:00 Kei Okada [email protected]:

2015-02-14 22:07 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/482/files
の中身をよく見てないのですが、IDLを何処かでコンパイルして、最後に
インストール先へコピーするようになってますでしょうか。
そうだとするとちょっと困ります。

はい (PR,少し変えてfkanehiro/hrpsys-base#486 が最新です)
よくわかっていないですが,hrpsys/openHRPの両方IDLを適当なディレクトリでコンパイルしてインストール時にコピーしています.
こで,hrpsys/OpenHRP/__init__.py が以下なんですが,大丈夫ってことでしょうか.
また,確認案ですが,そちらではかならずmake; make
installしているんでしょうか?とすると,make時にlib/python2.7/dist-packages/hrpsysに
書けばいいのか,あるいはどこか書いたらいいところがあったするんでしょうか?

# DO NOT EDIT THIS FILE!
#
# Python module OpenHRP generated by omniidl

import omniORB
omniORB.updateModule("OpenHRP")

# ** 1. Stub files contributing to this module
import DataLoggerService_idl
import StateHolderService_idl
import RobotHardwareService_idl
import WavPlayerService_idl
import SequencePlayerService_idl
import ForwardKinematicsService_idl
import ExecutionProfileService_idl
import OGMap3DService_idl
import NullService_idl
import TimeKeeperService_idl
import HRPDataTypes_idl
import ImpedanceControllerService_idl
import SoftErrorLimiterService_idl
import CollisionDetectorService_idl
import GraspControllerService_idl
import TorqueFilterService_idl
import KalmanFilterService_idl
import VirtualForceSensorService_idl
import StabilizerService_idl
import AutoBalancerService_idl
import RemoveForceSensorLinkOffsetService_idl
import ServoControllerService_idl
import TorqueControllerService_idl

# ** 2. Sub-modules

# ** 3. End
__init__.py (END)

◉ Kei Okada


Reply to this email directly or view it on GitHub
#42 (comment).

@k-okada
Copy link
Contributor Author

k-okada commented Feb 14, 2015

https://github.com/fkanehiro/hrpsys-base/pull/486/files#diff-2f0d7f8854d25496bb69e5f8548891ceR135
でOpenHRP3もコンパイルしているつもりですが.なにかたりないでしょうか.

更にmakeする時にコンパイルするとなると、コンパイル先が/usrとかルート権限が必要な場所だったり
するとmakeするときもルートでやらないといけなくなるので避けたいですね。
なるほど.それで,pyhon compileall みたいなことをしていたんですね.
make も make installもユーザ領域で/usr (実際は/opt)などルート権限が必要なところはaptから,というのが
こちらの運用形態です.

インストール時だとなぜ
困るか(ROSではインストールをしていない?)わかってませんが、
困ることはないですが,なぜ毎回make installする度にコンパイルするのか?という疑問が利用者からでています.
(openrtmもopenhrp3もmake installでコンパイラが走っている気がします)

make時に何とかするとなると、一旦
既にあるinit.pyをコピーしてきて、コンパイルする、ということになるでしょうか?
ごめんなさい.このへんが何のことやらわかっていないです.上のPRで動いているように見えるのはなにかまちがっているでしょうか.

◉ Kei Okada

2015-02-14 23:55 GMT+09:00 Fumio KANEHIRO [email protected]:

いや、これはhrpsysのモジュールしかないんじゃないですか。

それとOpenHRPとhrpsysだけであれば、hrpsysでOpenHRPのIDLもコンパイルすればいいんですが、
3つ目、4つ目のソフトウェアがある時に、ソフトウェア間の依存関係なんかもあってすべてのソフトウェアの
IDLをコンパイルする、というのはできなくなると思います。(こちらでは3つ目、4つ目があったりします)

更にmakeする時にコンパイルするとなると、コンパイル先が/usrとかルート権限が必要な場所だったり
するとmakeするときもルートでやらないといけなくなるので避けたいですね。インストール時だとなぜ
困るか(ROSではインストールをしていない?)わかってませんが、make時に何とかするとなると、一旦
既にあるinit.pyをコピーしてきて、コンパイルする、ということになるでしょうか?

2015-02-14 23:46 GMT+09:00 Kei Okada [email protected]:

2015-02-14 22:07 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/482/files
の中身をよく見てないのですが、IDLを何処かでコンパイルして、最後に
インストール先へコピーするようになってますでしょうか。
そうだとするとちょっと困ります。

はい (PR,少し変えてfkanehiro/hrpsys-base#486 が最新です)
よくわかっていないですが,hrpsys/openHRPの両方IDLを適当なディレクトリでコンパイルしてインストール時にコピーしています.
こで,hrpsys/OpenHRP/__init__.py が以下なんですが,大丈夫ってことでしょうか.
また,確認案ですが,そちらではかならずmake; make
installしているんでしょうか?とすると,make時にlib/python2.7/dist-packages/hrpsysに
書けばいいのか,あるいはどこか書いたらいいところがあったするんでしょうか?

# DO NOT EDIT THIS FILE!
#
# Python module OpenHRP generated by omniidl

import omniORB
omniORB.updateModule("OpenHRP")

# ** 1. Stub files contributing to this module
import DataLoggerService_idl
import StateHolderService_idl
import RobotHardwareService_idl
import WavPlayerService_idl
import SequencePlayerService_idl
import ForwardKinematicsService_idl
import ExecutionProfileService_idl
import OGMap3DService_idl
import NullService_idl
import TimeKeeperService_idl
import HRPDataTypes_idl
import ImpedanceControllerService_idl
import SoftErrorLimiterService_idl
import CollisionDetectorService_idl
import GraspControllerService_idl
import TorqueFilterService_idl
import KalmanFilterService_idl
import VirtualForceSensorService_idl
import StabilizerService_idl
import AutoBalancerService_idl
import RemoveForceSensorLinkOffsetService_idl
import ServoControllerService_idl
import TorqueControllerService_idl

# ** 2. Sub-modules

# ** 3. End
__init__.py (END)

◉ Kei Okada


Reply to this email directly or view it on GitHub
#42 (comment).


Reply to this email directly or view it on GitHub
#42 (comment).

@fkanehiro
Copy link
Owner

https://github.com/fkanehiro/hrpsys-base/pull/486/files#diff-2f0d7f8854d25496bb69e5f8548891ceR135
でOpenHRP3もコンパイルしているつもりですが.なにかたりないでしょうか.

パット見問題なさそうですがなぜでしょうね?

インストール時だとなぜ
困るか(ROSではインストールをしていない?)わかってませんが、
困ることはないですが,なぜ毎回make installする度にコンパイルするのか?という疑問が利用者からでています.
(openrtmもopenhrp3もmake installでコンパイラが走っている気がします)

なるほど。そういうことであればinstall時にコンパイルするのはそのままにして、依存関係を細かくチェックして
idlに変更がなければコンパイルしない、というのはいかがでしょうか。

make時に何とかするとなると、一旦

既にあるinit.pyをコピーしてきて、コンパイルする、ということになるでしょうか?
ごめんなさい.このへんが何のことやらわかっていないです.上のPRで動いているように見えるのはなにかまちがっているでしょうか.

えっと、同じOpenHRPというパッケージ名を使うソフトウェアが例えば2つあるとして、init.pyにはそれら
2つのソフトウェアのモジュールが列挙された状態を維持したいわけです。
しかし、一方のソフトウェアAのソースツリーでコンパイルするとAのモジュールだけが列挙されたinit.pyが
できてしまい、これをインストールするとソフトウェアBのモジュールがimportされなくなってしまう。であれば、
Aのソースツリーでコンパイルする時に、既存のinit.py(すでにBのモジュールが列挙されている)をコピー
してきてコンパイルすれば、init.pyにAのモジュールが追記されるのでは?、ということが言いたかったの
でした(推測ですが)。

で、Bのモジュールが列挙されていないと何が起きるのか、何か問題が起きた記憶はあるのですが、具体的には
思い出せません。

@k-okada
Copy link
Contributor Author

k-okada commented Feb 15, 2015

2015-02-15 23:09 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/486/files#diff-2f0d7f8854d25496bb69e5f8548891ceR135
でOpenHRP3もコンパイルしているつもりですが.なにかたりないでしょうか.

パット見問題なさそうですがなぜでしょうね?

ごめんなさい.この上のものはhrpsysでOpenHRP3のものもコンパイルしてhrpsys/OpenHRPディレクトリに
入れるようにしています.で,こちらではこれで動いています.かつ,makeじにidlをコンパイルして
make installしていますが,それでもOKのようにおもいます(つまりisntallじにpython idl コンパイルする
必要がない気がしています)

◉ Kei Okada

@fkanehiro
Copy link
Owner

OpenHRP3とhrpsysだけの関係であればそれでいいんですが、こちらには他のソフトウェアもあり、
他のソフトウェアをインストールした後にhrpsysに更新があってmake installするとそのソフトウェアの
モジュールがinit.pyから消えてしまうので困ってしまいます。

2015-02-16 1:20 GMT+09:00 Kei Okada [email protected]:

2015-02-15 23:09 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/486/files#diff-2f0d7f8854d25496bb69e5f8548891ceR135

でOpenHRP3もコンパイルしているつもりですが.なにかたりないでしょうか.

パット見問題なさそうですがなぜでしょうね?

ごめんなさい.この上のものはhrpsysでOpenHRP3のものもコンパイルしてhrpsys/OpenHRPディレクトリに
入れるようにしています.で,こちらではこれで動いています.かつ,makeじにidlをコンパイルして
make installしていますが,それでもOKのようにおもいます(つまりisntallじにpython idl コンパイルする
必要がない気がしています)

◉ Kei Okada


Reply to this email directly or view it on GitHub
#42 (comment).

@k-okada
Copy link
Contributor Author

k-okada commented Feb 17, 2015

なるほど.ようやく理解しました.他のソフトもdist-package/hrpsys/OpenHRPにコピーしているということでしょうか.
とりあえず,
fkanehiro/hrpsys-base#486
でなおしてみました.これでどうでしょうか(もう最初の状態でいい気もしますが...)

◉ Kei Okada

2015-02-16 10:16 GMT+09:00 Fumio KANEHIRO [email protected]:

OpenHRP3とhrpsysだけの関係であればそれでいいんですが、こちらには他のソフトウェアもあり、
他のソフトウェアをインストールした後にhrpsysに更新があってmake installするとそのソフトウェアの
モジュールがinit.pyから消えてしまうので困ってしまいます。

2015-02-16 1:20 GMT+09:00 Kei Okada [email protected]:

2015-02-15 23:09 GMT+09:00 Fumio KANEHIRO [email protected]:

https://github.com/fkanehiro/hrpsys-base/pull/486/files#diff-2f0d7f8854d25496bb69e5f8548891ceR135

でOpenHRP3もコンパイルしているつもりですが.なにかたりないでしょうか.

パット見問題なさそうですがなぜでしょうね?

ごめんなさい.この上のものはhrpsysでOpenHRP3のものもコンパイルしてhrpsys/OpenHRPディレクトリに
入れるようにしています.で,こちらではこれで動いています.かつ,makeじにidlをコンパイルして
make installしていますが,それでもOKのようにおもいます(つまりisntallじにpython idl コンパイルする
必要がない気がしています)

◉ Kei Okada


Reply to this email directly or view it on GitHub
#42 (comment).


Reply to this email directly or view it on GitHub
#42 (comment).

@k-okada
Copy link
Contributor Author

k-okada commented Feb 24, 2015

これはhrpsysの問題でしたのでclose

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants