7 月 03
まず,ここにあるODEのFAQを読んでからコメントお願いします.
ODE質問・要望5!のコメントがちょうと100件になりましたので,新しい質問や要望はこちらにお願いします! ご質問の内容を詳しく説明して頂けると的確に回答できますので,時間を節約できると思います.
また、私のコメントやご自分の努力により問題が解決 された場合に、問題の原因がわかれば投稿して頂くと大変助かります。その情報はODEの初心者にとって重要なものです。ある程度たまりましたらFAQに掲 載したいと思いますのでご協力のほどよろしくお願いします。
投稿:08年07月03日


鉄さん,
コメントありがとうございます.
興味深い御指摘なので調べてみたいのですが,9月9日からロボット学会がありその準備のため調べる時間がありません. 開発中のdrawstuff互換ライブラリについてお話する予定ですがあまり進んでいません...
さて,ウェブでは以下のサイトが少し関係ありそうですが試していないのでわかりません.
http://homepage1.nifty.com/herumi/prog/prog90.html
上のページにあるWindowsの演算精度をLinuxと同じ64ビットに変更したらどうなりますか?
また,Windows上ではVC++とgccの値は異なるでしょうか?
お時間があれば試して結果を教えて頂けるとありがたいです.
でむ
でむさん。度々申し訳ありません。
先ほど,ode-src-0.8.zipをインストールし直してtest_basketの例で
バスケットボールの各ステップごとの位置を取得したところ,
やはりVC++とLinuxとでセンサの取得結果の違いがでました。
これは,OSの違いから来るものなのでしょうか?
でむさん.はじめまして.
さっそく質問なのですが,VC++とLinuxとで同じプログラムをコンパイルしたところ,微妙に違う計算結果が現れました.
違う計算結果と言っても,似た値は出力されているのですが,これはどのようなことが原因で起こっているのでしょうか?
ちなみに,このサイトに乗っているセンサの取得実験で確かめました.
toshiさん,
すみませんが,VC#は使ったことがないのでわかりません.
でむ
demuさん初めまして.
これからODEを使って研究を行うのですが,VC++ではなく,VC#を使おうと考えています。
VC#でODEを使えるようにする方法を教えてください.
でむさん、
さっそく返事をいただき、ありがとうございました。
教えて頂いたODE Wikiのページも読んでみました。
OPCODEとGIMPACTをライブラリにしているので、直接使っているのかと思っていました。
Trimeshを使った場合以外は使用していないようですね。
また質問させて頂きます。
Yamaさん,
はじめまして!
ODEでは,AABBしかサポートしていません.つまり,ご自分で実装するしかありません.
なお,衝突検出空間としては,dSimpleSpace, dQuadTreeSpace, dHashSpace, dSAPSpaceを選択可能です.衝突検出に関してはODE Wikiの次のページを是非1読願います.
http://opende.sourceforge.net/mediawiki-1.6.10/index.php/How_Collision_Detection_Works
でむ
じろうさん,
Windows Vista Business, Visual C++ 2008 EEでは問題なくビルドできました.ご使用の環境を教えてください.
でむ
でむさん,こんにちは.
初めて質問します。
OBBによる衝突検出を試したいのですが、どのようにしたらよいでしょうか。
よろしくお願いします。
でむさん,ご指摘ありがとうございます.
ですが,問題の箇所を修正しても同じエラーが出てきてしまいました(><;)
重ねての質問になってしまうのですが,
ポリゴンの描画に使用しているdsDrawTriangleで描画される三角形に
表や裏といった概念はあるのでしょうか?
dsDrawTriangleで描画した図形で
思い通りに面が描かれている部分とそうでない部分があったので・・・
じろうさん,
ソースコードを拝見しましたが,ODEの問題ではなく配列の宣言に問題があるようです.
でむ
tetuさん,
良い本をご紹介頂きありがとうございます.ODEは剛体の動力学計算エンジンなので,人体を剛体近似できない場合の運動解析に利用するのは難しいかもしれません.
また,初音ミクの挙動がおかしいという現象は見ていないのでわかりませんが,恐らく衝突検出の部分だと思われます.ODEは衝突ライブラリとしてOPCODEを標準として使っていますが,GimpactやOPCODEを改善したものもビルドのオプションで利用できるので試してみてはいかがでしょうか?
それでも,だめな場合は,ODEの本家メーリングリストに投稿すると次のバージョンでは改善するかもしれません.ODEはオープンソースなので,利用者がフィードバックすると益々良くなります.
でむ
申し訳ありません、以前に質問したのですが解決しました。
dInitODE();
dCloseODE();
をmain関数に入れることでERRORはなくなり解決しました。
demuさん
ソースプログラムを送付しました.
よろしくお願いします.
ODE0.9で動いていた、自分で作成したcppファイル(segwey.cpp)をode0.10.1で動かそうとしたのですが、
ODE INTEANAL ERROR 2
colliders array not initialized in dcollide()
と表示され動きません。
これを回避するにはどうしたらいいでしょうか?
よろしくお願いします。
じろうさん,
連絡先のメールアドレスにお願いします.
でむ
demuさん,返事が遅れてすみません.
趣味で作ったプログラムなのでソースの公開は問題ありません.
送付先は”連絡先のメールアドレス”でよろしいですか?
ODEで、人体の力学計算が、まったく手つかずというのはあまりに惜しい。
人体の運動学の教科書とかも手に取ってみて、
http://www.ishiyaku.co.jp/search/details.cfm?bookcode=215320
3DCGの動作がどうしておかしいのか考えてほしいです。
初音ミクとかね。
じろうさん,
私も原因を知りたいので,差支えがなければソースコードを送って頂けますか?
差支えがある場合は,その部分を取り除いて送ってください.
基本的にはこのページで公開します.
でむ
キャストの件ですが,
(const dReal *)で引数をキャストしても同様のエラーが出てきました.
floatでpos[3]とR[12]を定義して,dBodyGetPositionとdBodyGetRotationを代入するといった無理やりな方法で一応は実行できるようになりました.
サンプルプログラムは問題なく実行できました.
今後も原因を究明していこうとは思います.
たくさん、
私が試したときはデータ実行防止が働かなかったので原因がよくわかりません。
データ実行防止(DEP)を無効にする方法はネットを探すといろいろありますが、原因がわからないのでお勧めはできません。自己責任でお願いします。
コントロールパネル→システムとメンテナンス→システム→システムの詳細設定→パフォーマンス→設定→データの実行防止→重要なWindowsのプログラム及びサービスついてのみ有効にする(T)にチェックを入れる
でむ
でむさん,はじめまして
インストールについて教えていただきたいことがあります。
講義 Visual C++ 2008 Expression Editionに沿ってインストールしましたが、
データ実行防止が働いて、demo_basket.exeの起動に失敗してしまいました。
使用環境は以下のとおりです。
OS:vista
CPU:intel core2 duo
起動させる良い方法はないものでしょうか。
よろしくお願いします。
でむさん,早速のお返事ありがとうございます.
お盆期間は大学の電源が落とされているため,現在は試せる環境がありません.
来週の月曜日には,経過報告できると思います.
じろうさん,
初めまして
(const dReal *)で引数をキャストしてください。
エラーがでるということは、ODE本のサンプルプログラムもエラーがでますか? 私が、Visual C++ 2008 EEで試したときは問題はなかったと記憶していますが…
でむ
でむさん,はじめまして.
今年度から研究にODEを導入して現在勉強中の者です.
描画についての質問なのですが,
dsDrawSphere,dsDrawCylinderを使用したときに
”1 番目の引数を ‘const dReal *’ から ‘const float []‘ に変換できません.(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です.”
といったエラーメッセージが出てきてしまい実行できなくなってしまいます.
引数としてはdBodyGetPosition(torso.body)などを使用しています.
monoBot.cppなどのdsDrawSphereを使用している他のプログラムはちゃんと実行できます.
開発環境はVisual Stadio 2005 Professional です.
お忙しいと思いますが,どうぞよろしくお願いいたします.
tadaさん,
つくば市へ出張していて返事が遅くなりました.
さて,問題は全部解決したのでしょうか?
でむ
先ほどの質問は解決しました。
dInitODE(); と dCloseODE();
をメイン関数にいれてあげればいいだけでした。
プログラム2.5(ホッピングロボットを作ろう)においてビルドは成功するのですが、
”colliders array not initialized (c:\ode-0.10.0\ode\src\colision_kernel.cpp:256)”
というエラーが出てしまいます。
どのようにすれば解決するのでしょうか?
ご指導ください。
先ほどの問題は単にソースコードの間違いでした。
矢継ぎ早で申し訳ありませんがジョイントをHingeからその他(Ballなど)に変更する時、 ”識別子が見つかりませんでした”
となりコンパイルエラーとなってしまいます。どうすればよいのでしょうか?教えてください。
画像を表示する際
”Bad argument(s)(c:\ode-0.10.0\src\collision_kernel.cpp:462)”
なる表示が出てしまいます。ビルドは成功してるのにどうしてこのようになってしまうのでしょうか?
でむさん、ご返答ありがとうございます。
返事が遅くなってすいません。
わかりました。ありがとうございます。
また質問させてもらうかもしれませんが、そのときはまたお願いします。
かつさん,
おはようございます.
dWorldStep(dWorldID World, dReal stepsize)のstepsizeはシミュレーションを進める時間なので実時間とは直接関係ありません.
シミュレーションの時間と実時間を同一精度で終わらせるためには,シミュレーションの1ステップに要する実時間とstepsizeの時間を同じにする必要があります.
つまり,1ステップ(衝突検出,動力学計算,制御,描画等を全て含む)の時間を毎回計測し,それとstepsizeとの時間差分だけSleep()などを使って時間を調整すれば良いでしょう.
以上です.
でむ
demuさん,こんにちは.
ODE講座12のトルクセンサのプログラムで,x軸周りのトルクの表示をfeedback->t1[0]からfeedback->t2[0]に変更するとTx=4.9となるのはなぜでしょうか?軸周りに力がつりあうのならば,Tx=9.8となるのではないかと思うのですが.ただ単に私に物理のセンスがないだけでしょうか(^ ^;)
おでさん,
ODEは動力学計算エンジンなので,そのようなAPIはありません.回答したキーボードの入力はODEではなく,drawstuffというODE付属の3Dグラフィクスライブラリの機能です.
なお,PCから加速度センサの値を読めれば,その情報をODEで作成したワールドに反映することは可能だとは思います.
こんな回答でよろしいですか.
でむ
>ご回答ありがとうございます。
>言葉が足りなくてすいません。キーボードからの操作はできているのですが、
>加速度センサーなどを使ってPCの外部からも操作出来るんですか?
でむさん,こんにちは.
計算周期(ステップ)について質問があります.
P11にありますが,ODEで設定している0.01秒(10ms)というのは,あくまで計算上のステップであり,実時間とはリンクしない,
つまり,計算負荷が軽く・PCのスペックが高ければ計算それだけ計算スピードは早くなるわけですよね.
そこで質問なんですが,計算周期(タイミング)をWindowsタイマか何かを参照して,実時間のタイミングで計算させることはできるのでしょうか?
もちろん高い精度は無理でしょうが,10秒のシミュレーションを約10秒で終わらせることができたら良いなと思い質問しました.
よろしくお願いします.