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

編集できないプロパティが色々ある #12

Open
fkanehiro opened this issue Nov 29, 2015 · 8 comments
Open

編集できないプロパティが色々ある #12

fkanehiro opened this issue Nov 29, 2015 · 8 comments

Comments

@fkanehiro
Copy link
Owner

Jointノードのlvlimit, uvlimit, gearRatio, rotorInertia等。

yosuke added a commit to yosuke/choreonoid-editor that referenced this issue Nov 30, 2015
@yosuke
Copy link
Contributor

yosuke commented Jan 6, 2016

encoderPulseとrotorResistorについては使われていない、gearRatioとrotorInertiaについては掛けあわせたものしか保存されていない問題あり。getOriginalNodeで取ってくる実装が適切か?

https://github.com/s-nakaoka/choreonoid/blob/c351a03f19fcf19647eb1651238e6364aeb04d3f/src/Body/VRMLBodyLoader.cpp#L844-L856

@fkanehiro
Copy link
Owner Author

JointItemのJointID、LinkItemのMassがまだ編集できません。
また、GearRatioなどでデフォルト値がすべて0となっているようで、VRMLのプロトのデフォルト値が反映されていないようです。

@yosuke
Copy link
Contributor

yosuke commented Jan 7, 2016

デフォルト値を反映させるようにしたのですが、VRMLファイルから読み込んだ値ではないので、まだあまりよろしくない状態です。

ChoreonoidのLinkクラスに読み込まれた状態でGearRatioなどが失われてしまっているのが痛いのですが、これらを保存しておく実装にするのは影響が大きいでしょうか? > @s-nakaoka さん

yosuke added a commit to yosuke/choreonoid-editor that referenced this issue Jan 7, 2016
fkanehiro added a commit that referenced this issue Jan 7, 2016
make mass to be editable (ref #12)
@fkanehiro
Copy link
Owner Author

jointId、massが編集できることを確認しました。
@s-nakaoka さん、gearRatio等についてコメントをお待ちしております。

@fkanehiro
Copy link
Owner Author

@s-nakaoka さん、いかがですか?

@s-nakaoka
Copy link

すみません、本件見逃しておりました。

まずGearRatioなどのパラメータをLinkクラスのメンバとして格納していなかった理由について。Linkクラスでは、メンバとして持たせる情報はなるべく基本的な最低限のものに限定したいと思っています。そうでないと、物理エンジンごとにそれぞれ異なる必要な情報がいろいろあったりして、それらに対応しようとするとどんどんメンバが増えてしまいそうですし、それでも今後対応する物理エンジンで必要な情報を全てカバーできるとも限りません。これは物理エンジンに限らず、他の機能でも同様です。

なので、基本的な情報以外は動的に定義・格納できる仕組みが必要だと思っていたのですが、Linkクラスについてはまだ手付かずでした。それでgearRatio等も放置されていた次第です。

これについて今回考えてみたのですが、Bodyクラスには既に動的な情報格納のため、YAMLの型でinfoというメンバを持たせていて、いくつかの機能で使っていました。これでいちおう使えていて問題無さそうだったので、Linkクラスでも同様のinfoを追加することにしてみます。

というわけで試験的に実装したのが s-nakaoka/choreonoid@0ab5b38 です。

Mapping型のポインタを返すinfo()関数をLinkクラスに追加しています。そしてVRMLBodyLoaderで、gearRatio等のパラメータをここに格納するようにしました。

アクセス方法はMapping型で使える方法はなんでも使えますが、手軽に使えるようにするために、Linkクラスに

template T info(const std::string& key) const;
template void setInfo(const std::string& key, const T& value);

というテンプレートも追加しました。
今のところ実装してるのはdoubleのみですが、例えばLinkクラスのオブジェクトlinkについて、

double gearRatio = link->info<double>("gearRatio");

とか、

link->setInfo("gearRatio", 1.0);

とかして値の読み込み・設定ができます。(読み込み時にキーがないと例外が発生します。)

以上、とりあえず暫定版ということで作ってみました。今後変更にならないとも限りませんが、これで問題なさそうでしたらこのままいければと思います。

@s-nakaoka
Copy link

補足です。infoでアクセスする情報はモデルファイルのフォーマットや、実際に値が書いてあるかどうか等によって、指定のキーの値が存在しない場合もあり得ます。ですので、読み込み側ではそこのところを配慮する必要があるかと思います。
これを面倒なく行えるようにするため、info関数にデフォルト値つきのものを追加しました。
s-nakaoka/choreonoid@d23d7d2

例えば、

double gearRatio = link->info("gearRatio", 1.0);

とすると、double値を有する"gearRatio"が存在すればその値が返り、無ければデフォルト値として渡した1.0が返るようになります。

@yosuke
Copy link
Contributor

yosuke commented Feb 3, 2016

情報ありがとうございます。何か理由もありそうだなとも思っていたので、説明を読んで納得しました。

setInfo, infoを使う形で実装してみます。

前にやや無理やり入れてしまったgetOriginalNodeなどもこのinfoのところに入れたほうが綺麗になりそうな気もしているのですが、それについてはのちほど。

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

3 participants