まず,ここにあるODEのFAQを読んでからコメントお願いします.
ODE質問・要望5!のコメントがちょうと100件になりましたので,新しい質問や要望はこちらにお願いします! ご質問の内容を詳しく説明して頂けると的確に回答できますので,時間を節約できると思います.
また、私のコメントやご自分の努力により問題が解決 された場合に、問題の原因がわかれば投稿して頂くと大変助かります。その情報はODEの初心者にとって重要なものです。ある程度たまりましたらFAQに掲 載したいと思いますのでご協力のほどよろしくお願いします。
コメント
zipさん,
ODE初級講座9回目のソースコードをご覧ください.ボディの位置を取得し,表示しています.
でむ
でむさん、返答ありがとうございます。
講座を読んでやってみたのですが、dBodyGetPositionで取り出した位置座標に変数を入れて描写させようとすると’pos’ :const である変数へは割り当てることはできません、と出て上手くいきません。どうすれば良いでしょうか。
goさん,
Bulletの衝突検出ライブラリは素晴らしいとネットで読んだことがあります。ODEで使われているOPCODEの新しいバージョンでも精度の面で問題ありますか? それとも試されたのはOPCODEの古いバージョンでしょうか。なお、新しいバージョンは、ode-0.10.1/ode/src/config.hの44行目で以下を定義してコンパイルする必要があります。
#define dTRIMESH_OPCODE_USE_NEW_TRIMESH_TRIMESH_COLLIDER 1
Bulletは日本語の資料が少ないので是非ウェブや書籍で公開してください。本が出版されたら購入します。
でむ
こんにちは、お久しぶりです
Irrlicht + ODEのプロジェクトですが、ODEの衝突判定がどうも使いにくい(ちょっと精度の問題もある)ので、Bulletを使うことにしました
ご存知かもしれませんが、BulletはODEに比べると相当レベルの高いライブラリなのですが、日本語の情報がとても少ないので、そこら辺の情報も提供していこうと思います
とりあえずGimpを使って相当数の多いメッシュでも衝突判定できることが確認できたので、サンプル用のモデルも大体できたので、これからはBulletでやっていこうと思います。
shinさん、
以下のエラーも表示されますか?
ODE Message 3: LCP internal error
この場合、エラーの原因は数値計算の誤差、モデルの間違い、その他に理由により、システムを記述する行列が特異行列になり計算できない状態です。
まず、shinさんのロボットモデルは正しいですか?ボディやジョイントの位置関係が現実ではありえない場合にこのエラーが発生する場合があります。
以下を試して、その結果を教えてもらえますか?
1. 単精度インストールなら倍精度に変更
2. dWorldStep()からdWorldQuickStep()に変更
3. ERP、CFMの値をいろいろ変更する。CFMは大きい値(1e-3以上)、ERPはモデルによりますが大きい場合(0.8以上)にエラーが消える場合があります。
でむ
kensei.cpp と leg.cpp を参考にして二足歩行をさせようとしています。
コンパイルは通るのですが、実行すると以下のようなエラー文がでます。
原因は何なんでしょうか?
また、解決法はどうなりますか?
(エラー文)
assertion “bNormalizationResult” failed in _dNormalize4() [../../include/ode/odemath.h]
渡辺さん、
お力になれずすみません。
刃物で剛体を真っ二つに切るなんで、ルパン三世の石川五右衛門みたいで面白いですね。
平面と直方体の交点を求め、平面により分割された直方体の2つの部分を三角メッシュで生成すれば、刃物で剛体を真っ二つにしたように見えると思います。実装は結構大変だと思いますが、頭の体操には良いかもしれませんね。
でむ
zipさん、
ODE初級講座の9回目をごらんください。
http://demura.net/wordpress/tutorials/ode9
それを読んでもわからない場合は、わからない箇所を具体的に教えてください。
でむ
でむさん、こんにちわ。
ODEで描写した物体の位置座標を関数で制御したいのですが、
どうすれば良いでしょうか?
demu 様
やはりそうですか。
かなりショックです。
物理学、動力学、数学、英語力、全てに置いて
私には力が足りません。
本家のメーリングリストに質問するなんて、無理です(泣)
所で、ODEは、面白いですねぇ!
本もあるし、メーリングリストもあるし・・・
後、私が考えるには、刃物の面を平面方程式において、部材との交点を求める位か?
でも、それは、酒のつまみには、ちょっと重たいし・・・
又、これからも聞く事があると思いますが、よろしくお願いします。
ありがとうございました。
鉄さん,
私の環境でも同じ結果になるか試してみたいので以下を教えてください.
1.完全なソースコード
2.コンパイラのオプション
3.gccのバージョン
4.CPU
でむ
でむさん
以前にVC++とLinuxの疑問について質問させていただきました鉄です。
VC++とmingwの違いを調べる前に,本当にmingwとlinuxが同じなのかを調べました。今回は円周率(M_PI)がprintf文でどこまでの値をとるのかを調べました.その結果,
mingwは小数点以下第16位
linuxは小数点以下第48位
までの値をとりました.
この場合,何を改良すれば,mingwとlinuxが同じ浮動小数点を取るようになるのでしょうか?
できるだけ詳しく宜しくお願いします.
渡辺豊樹様、
接触点と貫通点は物理的に違うので、そのような用途には使えないと考えます。ODEでは接触点が拘束条件として計算されますが、貫通点では物理的に違いますよね。ODEは剛体の動力学計算エンジンなので、剛体に別の剛体が貫通することは想定外なのではないでしょうか。
でも、衝突検出時に、接触点を計算するので、渡辺さんの方法でも接触点が計算されても良いとも考えます。非常に難しいご質問なので是非ご本家さまのODE Mailing List
http://groups.google.com/group/ode-users
でご質問してください。
でむ
Kumaさん、
空だけが灰色になる状態ですか?
ODE付属のデモプログラムも同様な表示でしょうか?
drawstuff/textures以下のディレクトリを、表示したいプログラムの直下においてパスを変更しても同じ症状ですか?
それでもだめな場合、ライブラリをDLL(動的)の場合、LIB(静的)にしてもだめでしょうか?
それでもだめなら、グラフィクスカードのドライバを変えたりするしか、お酒を飲んでいる今は思いつきません。
でむ@麦とポップ、私もビールと間違いました。レモンを入れるとコロナビールよりおいしいと感じます。
はじめまして。
テクスチャはしっかり指定できていると思うのですが、skyppmが生きていないのか雲が表示されません。
これは何が原因なのでしょうか?
一度コピー元のフォルダからもう一度コピーしたりもしています。
設定をどこかでいぢってしまったのでしょうか?
はじめまして。
ODE初心者のなべ、と申します。
早速ですが、接触点について質問させて頂きます。
オブジェクト直方体を2個用意し、(1個は、棒、もう一つは、刃物(面))
矢が的を打ち抜いた様な感じで空中に作ります。
その時の条件、棒と刃物の高さは、一定にし刃物だけを
回転、斜めに寝かす等して棒との交点を求めます。、
(棒と刃の交点、刃の面 4点 * 2面=8個存在するはずです。)
接触点と交点は同じものと考えています?
棒の高さが100mmであれば、交点のZは、100mm。
(材の高さのオフセットは、無視。)
初期状態で刃物が90度の時は、100mm が出ますが、
刃物を回転させると、100mmが出ません。
平面上のXY座標は、よさそうです?。
(テストプログラムが悪くて刃物を回転させる所で、バグがあるかもしれませんが?)
どのようにしたら、その交点を求める事が可能でしょうか。
現状は
nearCallback(void *data, dGeomID o1, dGeomID o2)
{
n = dCollide(o1,o2,N,&contact[0].geom,sizeof(dContact));
contact[i].geom.pos[0] // X座標
contact[i].geom.pos[1] // Y座標
contact[i].geom.pos[2] // Z座標
この変数を見ています。
(現バージョンでは、円柱は、交点nが0で、四角形でないと計算出来ない?)
その他
1.実際は、8点の交点が出ないので、上の刃と下の刃を用意し、各4点ずつの
交点を出すようにしています。
2.直方体を作り空中に浮かせ-9.8の重力で落下させ、地面の上で停止。
この時の交点数がn=3と出ますが、4が正しいのでは?
3.環境は、WindowsXP、Visual C++2008EE
最終的には、ロボットアームの先に刃物を持たせ材をカットし
その部材を作る為にロボットアームの角度等のシミュレーションをしたいと考えています。
(次期バージョンで一個のオブジェからカットされた複数のオブジェが出来れば理想ですが?)
以上、よろしくお願い致します。
demu さん
コメントありがとうございます.
一度,試してみます.
ラーメンマンさん,
heightfieldを使えば良いと思います.
ODE付属デモプログラムdemo_heightfield.cppがその例です.全体は平面ですが,原点付近が不整地と考えることのできるheightfieldになっています.
詳しくは,ODE Wikiの以下のページをご覧ください.
http://opende.sourceforge.net/mediawiki-1.6.10/index.php/DHeightfield
でむ
でむさん,こんにちは.
現在,ODEで作ったロボットを不整地面(デコボコ道)で動かしたいと考えているのですが,フラットな地面をある区画(部分)だけ不整地にするには,どのようにプログラムを変更すれば宜しいのでしょうか?
宜しくお願いします.
goさん、
Wikiを拝見しましたが、コメントが詳しく多くの方の参考になると思います。
左上のアニメがかわいいですね。
また、よろしくお願いします。
でむ
たろーさん、
ODE+drawstuffでは3Dオブジェクトファイル(3dsやXファイルなど)を読み込むAPIがないのでポリゴン(三角メッシュ)を簡単に扱うことができません。以下のページが参考になると思いますが、ODE講座22の手法は現在使っていません。ODE+Irrlichtでこの問題に対処しようとしています。
ODE講座22:ODEでポリゴンを簡単に表示する方法 07/11/01
RoboCup Simulator Dev 第5回 「Xファイルを読み込む」
でむ
こんにちは、とりあえずWinForm内部でIrrlichtとODEが使える感じでしたので報告など。(WinForm + Irrlicht 及び Irrlicht + ODEは確認済み まだ、3つを統合したサンプルは作ってませんが)
とりあえず、オープンできる内容については、wikiをつくって、公開しだましたので参考程度にはなるかと
http://柊つかさ.jp/wiki/index.php?title=ODE%E3%81%A8Irrlicht%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA%E6%89%8B%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6#.E5.AE.9F.E8.A1.8C.E7.94.BB.E9.9D.A2
http://柊つかさ.jp/wiki/index.php?title=Irrlicht%E4%BD%9C%E6%A5%AD%E4%B8%AD#IrrlichtManager.E3.81.9D.E3.81.AE2
demuさん
いつもお世話になっております.
一つ質問があります.
ODE上にTeapotのような複雑な物体を配置するには
どのようなアプローチを取ればいいでしょうか?
ロボットハンドでつかんで運ぶようなことをやりたいのですが...
了解しました。 何かしら作ったらwikiにでものせるつもりです
OpenScenGraphはこれで見る限りちょっと使いずらそうですね http://www.devmaster.net/engines/ http://www.devmaster.net/engines/engine_details.php?id=59
お久しぶりです。韓国のゼスンです。
Irrlicht+ODEで新しくdrawstuffを作りそうですね。この方法ならWINDOWS BASEのプログラム方法も見つられると思います。一様OSGはMFCを支援するし、OSD+ODEの応用を見たことがあります。今後もいろいろ質問しますからお願いします。
goさん、
はじめはOpenGLベースのOpenSceneGrapahにしようと考え、学生にインストールしてもらいましたが、どうしてもソースをコンパイルできないという泣きが入り初心者には向いてないと判断しました。
Irrlicht+ODEの問題点は座標系が左手系と右手系なので、いちいち変換しなければならない点ですね。
何か作品ができたら教えてください。
でむ
む、そうですね。 Ogreはちょっともっさりしてて、とっつきにくい感じでした。
ODE以外ではどうか知りませんが、Irrlicht + ODEの場合だと、互いに個別にインストールしたにもかかわらず、Irrlicht内部でODEを使えたのは依存性とかの問題を考慮しても、長所になると思います。
OpenSceneGraphはよく知りません。 まぁとりあえずはIrrlichtでやってみます。。
goさん、
Irrlicht以外にOgreやOpenSceneGraphなども検討しましたが、その中でIrrlichtは資料が多くわかりやすいですね。また、Irrlichtはその他のライブラリにあまり依存せず、インストールが簡単な点が良いと思います。
でむ
む、すばやい返答ありがとうございます><
そうですか、win のformに描画する方法は色々と調べてみますね。irrlicht + odeでやるというのは、irrrlichtのtutorialのサンプルで、winのapplicationの一部にodeの動作を描画できる方法についての説明があったので、できる事がわかっていたからです。。 irrlichtの便利な点はいろいろな拡張子のファイルを容易に読み込み処理できるという点にありますよね。。 odeとの対応も進んでるし(個別に扱えるのもいい)
まぁ、別にirrlichtにこだわる必要はないのですが、ogreとかcyber spaceだとやり方がわからないというのもあります。。
というわけで、ありがとうございます
goさん、
はじめまして。
私はWindowsプログラマーではないので、Windowsのプログラミングについてはほとんどわかりません。
ご質問の回答になっていないと思いますが、ODE付属のグラフィクスライブラリであるdrawstuffはデモを動かすための最低限の機能しかないので、私もIrrlichtとODEで開発を進めています。
でむ
質問です。 私は今windowsのform内部でODEを動かそうとしてるのですか、動かす方法はあるのでしょうか?
昔XNAでやったときはwindowsのpictureboxなりなんなりに関連付けることができたので、できるような気がするのですが。。
よろしければ返答お願いします>< できない場合はIrrlicht + ODE で実行するつもりです。。
としさん,
解決おめでとうございます。少し調べて見ましたが,このエラーは使用環境に大きく依存するようなのでお力になれませんでした。
コメント頂いてありがとうございました。同じようなエラーに遭遇した方に参考になると思われます。
また,何かあれば質問してくださいね。
でむ
でむさん
やっと解決できました!ありがとうございました!
このエラーが出た別のPCにリモートログインしてODEを使う予定でしたが
ローカルでも使えなければ意味がないと思い色々調べていました。
結局のところ、ライブラリを足せば解決しましたが
いくつか試してみた結果なのでそれが本質かどうかはわかりません。
とりあえずやったを載せておきます。
エラー:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 1 (X_CreateWindow)
Serial number of failed request: 9
Current serial number in output stream: 11
原因:
X_CreateWindowでエラーが出ていて、エラーの種類はBadMatchである。
このエラーは解像度やdepthなどの不一致によって起こる…らしい。
最終的な解決策:
・libglu1-mesa-dev、libglu1-xorg-devのインストール
以下、やったこと
・/etc/X11/xorg.confの設定
Section “Screen” に
Defaultdepth 24
SubSection “Display”
Depth 24
Modes “1280×800” “1152×864” “1024×768” “800×600”
EndSubSection
他にもいじると、何回かwindowがおかしくなりました。
ただ、解決後に元に戻してもうまくいったのでこれは関係ないと思います。
・自分のPCのグラフィックカードのconfigration toolとdriverのインストール
僕はnvidiaだったので、nvidia-xconfigとnvidia-glxをインストールしました。
インストールしてみたところいくつかライブラリが消えていました。
その結果、コンパイルができなくなるという別のエラーが出てきたので、上のライブラリをインストールすると問題解決に至りました。
以上になりますが、恥ずかしながら結局原因はわかっていません。
ライブラリが足りなかったのか、余分にインストールしてたのが悪さをしてうまく消えてくれたのか・・・
とりあえず、解決したので一安心です。
本当にお世話になりました。ありがとうございました。
ぽったーさん,
はい。nはODE本P15の31行目に書いてあるとおりに接触点数です。球と平面だと接触点数は1ですからね。
また,遊びにきてください。
でむ
でむさん
ありがとうございます.
接触点というのは,サンプルプログラムでいうと n のことですよね.
N が大きいほど正確なのかと勘違いしてかなり大きくしていましたが,想像以上に n が小さく拍子抜けでした...
お早い対応ありがとうございました.
ぽったーさん
接触点の数はシミュレーションによって違うので、ご自分のシミュレーションで接触点がどのくらいあるか表示して、そのうえでNの値を設定してください。Nは配列の上限を設定しているので、少し多めにとっておけば良いと思います。Nが接触点数より小さい場合は、その分だけ拘束条件を計算していないのでシミュレーションが不正確になります。
ODE本のサンプルプログラムなら10もあれば良いでしょうが、ポリゴン(三角メッシュ)などを使う場合は多く設定する必要があると思います。
でむ
でむさん
お元気ですか?
繰り返し計算のサンプルプログラム,ありがとうございました.
以前,描画の有無で結果が異なる...といった質問をしていたかと思いますが,サンプルプログラムのおかげで,そのようなトラブルもなくシミュレーションできています.
今回の質問は,接触の関数のパラメータについてです.
ODE本のp.15のサンプルプログラムの25,26行目で,N=10 としていると思います.
このNの値は大きいほうが接触点が増加し,正確にシミュレーションができるのでしょうか?それとも,だいたい10であれば十分なのでしょうか?
お忙しいかと思いますが,よろしくお願いします.
としさん、
Ubuntu8.04をお使いですか。UbuntuとODEを使っている人がまわりに多いですが、特にそのような問題に出会ったことはありません。
古いですが、以下のサイトは参考になります。Windowを作ろうとした時に、何らかの属性値が無効な値であるため生ずるエラーのようです。
http://myt.ag/URLWeb.aspx?email=steve@fooworks.com&url=http://www.rahul.net/kenton/perrors.html&sn=
問題が解決したら教えてください。
でむ
でむさん、
返答ありがとうございます。
ubuntu8.04を使っています。
色々検索してみたもののめぼしい情報は見つかりませんでした。
ダイレクトな解決策もないのでいくつかの情報を頼りにXのファイルもいじって
どこでエラーが出ているのかはわかりましたが
そこから根本的な原因を見つけるには至りませんでした。
原因がわからないので対処法を模索していますが、なにか方法があれば教えていただければうれしいです。
とりあえず、うまくいく保証はないですが近いうちにubuntuの再インストールか、あきらめてwindowsを使うかなどを考えています。
ろぼさん,
ご存知だと思いますが,ODEは動力学計算ライブラリで,3D描画ライブラリdrawstuffはデモ用の簡単なものです。
ですから,ODEではカメラビューのシミュレーションはできませんし,drawstuffにはそのような機能はありません。
ODEの弱いところではありませんが,グラフィクス表示に良いライブラリがあれば良いですね。
でむ
でむさん、こんにちは。
突然すいません。
シミュレータを始めようと思っているのですが、
カメラを作成した上で、そのカメラのビューをシミュレートすることなど
ODE上で可能なのでしょうか。
カメラビューからの見え方、焦点距離などをシミュレーションしたいと思っております。
としさん、
結論からいうと、drawstuffではなくLinuxの設定が問題だと思われます。Linuxはどのディストリビューションをお使いですか?
解像度やフォントの設定が悪い、あるいはリモートから起動して、ディスプレイの環境設定をうまくしていないなど、とにかく何らかの理由によりWindowを新しく作れないことが原因だという報告がありました。
googleで以下を検索してみてください。としさんの解決になるヒントが見つかるかもしれません。
Major opcode of failed request: 1 (X_CreateWindow)
お力になれずすみません。
でむ
でむさん,はじめまして
最近,linuxでODEをインストールしてみました.
デモを使ってみようとしたところ,以下のようなエラーが出ました.
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 1 (X_CreateWindow)
Serial number of failed request: 9
Current serial number in output stream: 11
ドロースタッフのところで出ているようです.
なにかご存知のことがあればおしえていただけないでしょうか.
でむさん、はじめまして
linux環境でODEをインストールしました.
デモを見ようとコンパイルして実行したところ、ドロースタッフのところで以下のようなエラーが出ました。
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 1 (X_CreateWindow)
Serial number of failed request: 9
Current serial number in output stream: 11
解決策が見つからずに困っています。
このようなエラーは過去にはないようですが、いかがでしょうか。
よろしくお願いします。
ゼスンさん,
はじめまして!
私の大学では昨年,ソウル産業大学と提携を結び,その関係で何度か韓国へ行きました。韓国の学生さんからコメントを頂けてうれしいです。
さて,ご質問の件ですが,私はMFCを使ったことがないので具体的にどうすれば良いかわかりません。ただ,ODEはライブラリなのでヘッダファイルをインクルードして,ライブラリをリンクすれば良いとは思うのですが…
でむ
こんにちは。
韓国の学生です。ODEのことを見つかってから、本も買ってこのサイトも見ていろいろ助かりました。ところでVS2008を利用してMFCの中でODEを使う方法はないでしょうか。できるようにも見えますけど自分でやるには限界ですね。
日本語が下駄でよく伝えたかわかりませんね。よろしくお願いします。
でむさん,お返事ありがとうございます。
さっそくトライしてみます。まだ勉強を始めたばっかりで至らない点が多々ありますが,わからないことがあったらまた質問させていただきます。よろしくお願いします。
takeさん,
表紙にのっているハンドなら簡単です.ロボットアーム先端のリンクに3つのカプセルをヒンジジョイントで付ければ良いだけです.具体的なコードはロボットアームとほとんど同じになります.
この説明でわからない場合は,具体的にどこがわからないか教えてください.恐らく,ODE本を読んだだけではわからない,ODEを初めて学ぶ人にとって共通の問題だと思います.
でむ
でむさんはじめまして.
私は現在ODEについて勉強しており,本に載っているようなものをつかめるロボットアームを作成しようとしています.しかし,どうやってハンドの部分を実装すればよいかがわかりません.具体的なプログラムの書き方を教えてください.
よろしくお願いします.
でむさん,
こちらこそ言葉足らずの説明ですみませんでした.
サンプルソース,ありがとうございます.さっそくコンパイルして,何回シミュレーションしても球が描写されることや,球の大きさが変更できることを確認しました.
ありがとうございました.