fkanehiro / openhrp3

Open Architecture Human-centered Robotics Platform
http://www.openrtp.jp/openhrp3
Other
26 stars 34 forks source link

VRMLに値が定義されていないときの初期値について #39

Closed snozawa closed 9 years ago

snozawa commented 9 years ago

VRMLに値が定義されていないときのfieldの値が初期値化されないようなのですが、 どうしたらよいでしょうか。

具体的にはllimitやlvlimitを使ったプログラムで、VRMLに値が定義されている場合はModelLoaderから得られるロボットモデルインスタンスから適切に値が取得できます。 一方、VRMLに値が定義されていない場合には初期化されてない値がでてきます。

ロボットによってはllimit, vlimitが定義されてないものがありますが(手元にあるクローズなロボットや、openhrp3のsample1.wrl)、 このような場合どうされてますでしょうか。

実は、個々のロボットモデルのVRMLのデフォルト値をちゃんと与える必要がありますでしょうか。 https://github.com/fkanehiro/openhrp3/blob/master/sample/model/sample1.wrl#L17

よろしくお願いいたします。

fkanehiro commented 9 years ago

可動範囲を考慮したプログラムを適用するようなロボットのモデルではちゃんと可動範囲を 明記している、というのがこちらの実状です。

「デフォルト値をちゃんと与える」とはJointノードのプロトタイプのulimitのデフォルト値を例えば [3.14159]とかにするということでしょうか?そうだとすると、Jointの自由度は1自由度とは限らないので気持ちが悪いというのと、Jointノードは基本的にはh-animという規格できまっているので 弄りたくないという気分があります。 なのでもしやるとすれば、ModelLoaderからの読み込み部分とかLinkのコンストラクタで適当な 値をセットするぐらいでしょうか。

2015-01-28 22:46 GMT+09:00 Shunichi Nozawa notifications@github.com:

VRMLに値が定義されていないときのfieldの値が初期値化されないようなのですが、 どうしたらよいでしょうか。

具体的にはllimitやlvlimitを使ったプログラムで、VRMLに値が定義されている場合はModelLoaderから得られるロボットモデルインスタンスから適切に値が取得できます。 一方、VRMLに値が定義されていない場合には初期化されてない値がでてきます。

ロボットによってはllimit, vlimitが定義されてないものがありますが(手元にあるクローズなロボットや、openhrp3のsample1.wrl)、 このような場合どうされてますでしょうか。

実は、個々のロボットモデルのVRMLのデフォルト値をちゃんと与える必要がありますでしょうか。

https://github.com/fkanehiro/openhrp3/blob/master/sample/model/sample1.wrl#L17

よろしくお願いいたします。

— Reply to this email directly or view it on GitHub https://github.com/fkanehiro/openhrp3/issues/39.

snozawa commented 9 years ago

ありがとうございます。

「デフォルト値をちゃんと与える」とはJointノードのプロトタイプのulimitのデフォルト値を例えば [3.14159]とかにするということでしょうか?

はい、ちょっと微妙な案かなと思いましたが、おっしゃるとおりのことを考えておりました。

そうだとすると、Jointの自由度は1自由度とは限らないので気持ちが悪いというのと、Jointノードは基本的にはh-animという規格できまっているので 弄りたくないという気分があります。

確かにh-animでありますね。lvlimit、uvlimitはそこには含まれてないですが、これもlimit, ulimitと同じような形にしとくほうがいいですね。 こちらの方で「微妙な案かな」と思って降りましたのは、デフォルトの値の決め方が難しい、と思ったからでした。 例えば、台車ロボットのように無限回転があることを考えると、3.14159がlimitでいいか、といったことを考えておりました。

一方で、Jointの自由度については懸案事項ですが、実用上問題ないきがしおりました。 なぜかというと、VRMLレベルでは配列ですが、実質的にLink.hにかいてあるvlimitなどはdouble型になってるためです。 ちなみに、今は球関節などがないですが、多自由度関節をopenhrp3でこれから使おうとする場合、この部分も配列にしなければいけないと思いますが、あってますでしょうか。

なのでもしやるとすれば、ModelLoaderからの読み込み部分とかLinkのコンストラクタで適当な 値をセットするぐらいでしょうか。

可動域は無限回転関節などむずかしそうですが、速度リミットはLinkのコンストラクタで1e10など大きめの値で初期化するのはいかがでしょうか。

snozawa commented 9 years ago

すいません、よくよくコードをよみますと、 https://github.com/fkanehiro/openhrp3/blob/master/hrplib/hrpModel/ModelLoaderUtil.cpp#L281 のようにloadBodyFromModelLoaderなど使いますと、初期化はされておりました。 速度リミット・可動域リミットの値いずれも、不定な値でなくてnumeric_limitsの値になっておりました。

値が大きく初期化されていれば速度や可動域をリミットするプログラムは動作しそうです(リミットがほぼかからない)。

一旦closeいたします。 お騒がせしました。