ODE質問・要望募集3!

コメント数が70を超えたので、新しいご質問等はODE質問・要望4に願いします!

Comments

Posted by でむ

初心者さん、

エラー解決おめでとうございます。

さて、dsDrawbox(const float p[3], const float R[12], const float sides[3]);の3番目の引数について説明します。

float sides[3]はfloat型の要素数3個の配列ですが、C言語では配列を引数として受け渡すことはできないのでポインタとして受け渡します。つまり、float *sidesと同じことになります。これにconstがついているので、このポインタを介して値を変更することを禁止しています。

なお、このように仮引数を宣言すると、受け渡すポインタは要素数3個の配列を指していることが良くわかります。実際の使用例はP94 プログラム3.5を参考にしてください。

また、この質問コーナーのコメントが70を超えたので、新しい質問はODE質問・要望募集4!にお願いします。

Posted by 初心者

一度ソースコード新しく書き直したところ、先ほどのエラーはなんとかなくなり、うまくmakeすることができました。
おそらくソースコードになんらかのミスがあったと思われます。
お騒がせすみませんでした。


ところで、P21、EX1.8の直方体の落下の課題ですが、
dsDrawBox()の使い方がよくわかりません。

索引で調べるととP103にあるのですが、
dsDrawbox(const float p[3], const float R[12], const float sides[3]);

位置p、姿勢Rはよいのですが"sides[3]"(配列?)のところをどう書き直せばよいのかがわかりません。

Posted by Anonymous

でむさん、

追加し忘れていました。

ODE Message 2: inertia must be positive definite in dMassCheck() File mass.cpp Line 48

初心者

Posted by 初心者

でむさん、

>>OS,開発環境(mingw ? VISUAL C++ ?)を教えて頂けませんか?

開発環境はこちらのサイト(Windows XPでのインストール)を参考に行いました。
つまり、minGWです。

Microsoft Visual C++は一切使っていません。

Posted by でむ

mif805さん、

返事が遅くなりすみません。

さて、cylinderと接触していないはずのboxも一という意味がよくわかりません。
判定部分のソースコードを見せて頂けますか?

また、「接触していないはず」とは2つのジオメトリの位置から接触していないといいうことでしょうか? なお、stepsizeを小さくすると衝突判定も正確になります。

Posted by でむ

初心者さん、

OS,開発環境(mingw ? VISUAL C++ ?)を教えて頂けませんか?

でむ

Posted by 初心者

こんばんは、何度もすみません。

参考書のex1.9をmekeしたら以下のような2つのエラーがでました。

ODE INTERNAL ERROR 1
assrtion"dMassCheck(mass)"failed in dBodySetMass()[ode.cpp]

Microsoft Visual C++ Runtime Library
Runtime Error!
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

.exeファイルはできたのですが、このエラーが出て結果(シミュレーション)を見ることができない状況です。
エラーの原因はわかりますでしょうか?
よろしくお願いいたします。

Posted by でむ

dcsyhisさん、

ODEはオープンソースなので、ソースコードを改変すればご自分の摩擦モデルを実装することは可能です。初歩的な質問ではないので、ODEご本家様のメーリングリストに聞かれるとよいと思います。

Posted by dcsyhi

Demura さん

初歩的な質問ですいません。
ODEではクーロン摩擦モデルが採用されているとODEのサイトで知りましたが、これを
違うモデル(自分で考えたもの等)に変えることはできるんでしょうか?

Posted by でむ

チャンさん、

EX1.1 開発環境とODEのインストール (Windows XP編)http://demura.net/archives/9ode/installwindowsxp.html

「2. MSYSのインストール
MSYSはMinimal Systemの略でMinGWを使いやすくするために必要な最小限のシステムです。MinGWと同様にここをクリックしてMSYS-1.0.10.exeをデスクトップへダウンロードしてください。」
のここをクリックしてをクリックするとMSYS-1.0.10.exeをダウンロード可能です。

チャンさんはどの記事を読まれたか教えてください。問題のある記事があるかもしれません。

Posted by チャン

はじめまして

WindowsのMinGWのインストールはできたのですが
Msysのインストールに手間取っています。
MSYS-1.0.10.exeをインストールするとのことですが

http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82724&release_id=158862

exeファイルが見当たりません。
拡張子がbz2なるものはたくさんあるのですが。。。

これらをすべてダウンロードして結合かなにかさせるのでしょうか?
初心者なもので教えて頂けないでしょうか?

Posted by 初心者

Name入力忘れていました。失礼しました。

なるほど、そういうことでしたか。

お答えありがとうございました!!

Posted by でむ

anonymousさん(Nameを入力しないとこうなります)

おめでとうございます。

ODEでは初期姿勢時の関節角が0となっています。
ですから、厳密には-0.25π~0.25πにはできません。
0→-0.25π→0→0.25πとなります。

関節可動域の下限が-0.25π、上限が0.25πで、その間を動かしてくださいという意味で、この問題を作りました。説明が曖昧ですみませんでした。

また、関節の初期位置を変更するためには、ロボットの初期姿勢を変更しなければなりません。

Posted by Anonymous

でむさん、説明ありがとうございます!!
動きました!!感動です。やっと土俵の上に立てました。

そこでEX2.1なのですが、ヒンジジョイントを0~0.25π(脚が真下の状態から0.25π)までは動きました。
しかし、-0.25π~0.25πまで動かすということは・・・

プログラム2.1のcontrolHinge関数は目標値と現在の角度の差分を0にしていくので、現在の角度、つまり初期状態を-0.25πとする必要があると考えました。
しかし、P84ジョイントの種類と関係するAPIなど参考にしましたが、ヒンジの初期角度を設定するものがなく、どうすればヒンジの初期位置を変更することができるでしょうか?

Posted by でむ

初心者さん、

ODE本は初心者のために書いたので、このようなご質問は大歓迎です。

さて、P33 EX2.1ですが、「controlHinge関数はsimLoop関数の中に入れる」とはsimLoop関数の一番外側の中括弧{ }の間で、controlHinge関数を呼び出すということです。P37のプログラム2.5のsimLoop関数を参考にしてください。この場合は、controlHinge関数の代わりにcontrolSlider関数を呼び出しています。

また、関節を動かすためにはcontrolHinge関数の引数つまり、targetを変化させます。答えそのものズバリは教えない方針ですが、わかりづらい箇所があれば遠慮なく聞いてください。

Posted by 初心者

ロボットシミュレーションP33のEX2.1がどうもうまく実行できません。
実行しても一脚ロボットがただ飛び跳ねるだけの状態です。

ヒントのcontrolHinge関数はsimLoop関数の中に入れます。とはどうゆうことでしょうか?
また、プログラム2.1

void controlHinge(dReal target)
{
static const dReal kp  = 5.0; // 比例定数
static const dReal fmax = 200; // 最大トルク [Nm]

dReal tmp = dJointGetHingeAngle(joint); // 現在の角度を取得
dReal u = kp * (target - tmp);         // 操作量

dJointSetHingeParam(joint,dParamVel,u);    // 角速度の設定
dJointSetHingeParam(joint,dParamFMax,fmax); // 最大トルクの設定
}

はどのように変数を変えればいいのでしょうか?(どの変数をどうのように変えればいいでしょうか?)
とりあえず-0.25π~0.25πまで動かすことを関係無しに、何度もいろいろためしたのですが、わかりませんでした。

Posted by Hassie

でむ様,
早々にご回答いただき,ありがとうございました.

>>試していないので、cygwinを使えるかどうかわかりませんが、0.8までは使えません。もし、
>>すでにcygwinを使われているのなら試して頂ければありがたいです。
ODE0.8を試してみましたが,やはりダメでした.

MinGW+Msysでは,コンパイルしてデモプログラムも問題なく動きました!これで私もODE
ファンの仲間入り(?)です.
ただ,同じPC(XP)にCygwinもインストールしていますので,Cygwinを使うときと,MinGWを
使うときとで,環境変数(HOMEとPATH)をいちいち切り替えなければならないのが面倒です.
(環境変数は,http://www.geocities.jp/turtle_wide/tools/confmingw.htm の方法で
切り替えています.)
どなたか,よい方法があればご教示くださいませ...

Posted by でむ

Hassieさん、

感動して頂きありがとうございます。
私も、ODEを初めて使ったとき、とても簡単なのにグラフィクスが美しいので感動しました。この感動を伝えようとこのサイトと教科書ロボットシミュレーションを執筆しました。

さて、ご質問の件ですが、ODE0.8.1をまだ試していないので、cygwinを使えるかどうかわかりませんが、0.8までは使えません。もし、すでにcygwinを使われているのなら試して頂ければありがたいです。

cygwinを使われていないのなら、mingwをお勧めします。インストールも簡単で30分もあれば終わりますから。

Posted by Hassie

はじめまして.手頃なロボットシミュレーションの環境はないかと思っていたところ,
「ロボットシミュレーション」の貴著をAmazonで見つけたので,早速発注したところ
です.併せて,このページを発見し,感動しながら環境構築の準備をすすめようとし
ています.

昨年の投稿で,CygwinではODE0.6以降は使えないというような内容を見つけた
のですが,その後もやはり同じ状況でしょうか?WIndows上で手軽にまず試すに
は,MinGWがやはりベストなのでしょうか?

初歩的な質問でお恥ずかしいですが,CygwinかMinGWか,迷っています.ご助
言をいただけましたら幸いです.


Posted by でむ

黒い人さん、

はじめまして、コメントありがとうございます。
ラグランジェ法の一種を使っています。詳細は「よくある質問 B.16」に書きましたのでご覧ください。

でむ

Posted by 黒い人

ODE 本体が微積分を計算している方法が、何か教えてください。ニュートン法やオイラー法などの名前が判るだけでも大変助かります。

Posted by でむ

大和さん、

お力になれずすみません。
もし、よかったら解決方法を投稿して頂ければ、同じような問題に悩んでいる方の参考になると思います。

Posted by ド初心者

>>ODE FAQのA.11に回答しました。
わかりづらい箇所があれば教えてください。

でむさん、非常にわかりやすい説明ありがとうございました!!
大変助かります!!

Posted by 大和

回答ありがとうございます
いろいろと自分でいじってたらなんとかうまく行きました(^^;

Posted by でむ

ド初心者さん、

ODE FAQのA.11に回答しました。
わかりづらい箇所があれば教えてください。

でむ

Posted by ド初心者

>>ご質問の意味を取り違えているかもしれないので確認させてください。
自分自身で作成する方法というのは、コンパイラー、エディターの使い方などの開発環境に関することでしょうか?

より具体的に聞いてください。


質問がわかりにくくて申し訳ございません。

先ほどの蛇ロボットの話を例にすると、
「snakeroboというフォルダをどこどこに作って、そこに自分で作成したソースコードsnakerobo.cppファイルをいれます。
そして、どうコンパイルし、どう実行させます。」
っといった具合です。
わかりにくいですね・・・。(^^;)
もう少しこういった知識があればうまく説明できるのですが。

要はでむさんの言う通り開発環境に関する内容だと思います。

Posted by でむ

ド初心者様

ご質問の意味を取り違えているかもしれないので確認させてください。
自分自身で作成する方法というのは、コンパイラー、エディターの使い方などの開発環境に関することでしょうか?

より具体的に聞いてください。

でむ

Posted by ド初心者

でむさん、ご解答ありがとうございます。

>>さて、ご自分で新しくプログラムを作成される場合、よくわからないうちはサンプルプログラムをベースに作成される方が効率てきです。

はい、確かにそれが一番手っ取り早い方法だと思います。
しかし、これから自分自身でも自作のプログラムをいろいろ作成していきたいと考えていますので、お手数ですが教えていただけないでしょうか。申し訳ございません。

>>なお、プチプロジェクトの解答例(プログラム)を公開する予定はありません。基本的な考え方やサンプルプログラムを本文中で説明しているので、それを元に自分で考えてプログラミングすることにより、プログラミングスキルの向上を図ることがプチプロジェクトの目的です。正解は1つではないので、解答例を掲載することは読者の自由な発想やコーディングを妨げることに成りかねないと考えています。

そうゆうことでしたか、理解いたしました。


Posted by でむ

ド初心者さん、

拙著を購入頂きありがとうございます。
この本は初心者を対象に書いたものなので、わからない箇所があれば質問をお願いします。

さて、ご自分で新しくプログラムを作成される場合、よくわからないうちはサンプルプログラムをベースに作成される方が効率てきです。例えば、蛇ロボットを作る場合は、P24 プログラム1.3 monoBot.cppの1本脚に、円柱をヒンジジョイントで結合していけば比較的簡単に作ることができると思います。

なお、プチプロジェクトの解答例(プログラム)を公開する予定はありません。基本的な考え方やサンプルプログラムを本文中で説明しているので、それを元に自分で考えてプログラミングすることにより、プログラミングスキルの向上を図ることがプチプロジェクトの目的です。正解は1つではないので、解答例を掲載することは読者の自由な発想やコーディングを妨げることに成りかねないと考えています。

でむ

Posted by でむ

大和さん、

Microsoftの開発環境を使ったことがないので、私にはわかりません。ごめんなさい。

どなたか、ご親切な方が回答してくだされば良いのですが...

でむ

Posted by ド初心者

こんにちわ、ド初心者と申します。
本を購入しロボットシミュレーションの学習をしております。

今現在、P27まで学習しました。そこでいくつかわからないことがあったので質問してもよろしいでしょうか。

1.6のプチプロジェクトを取り組んでいるのですが、今まではこちらのサイトからプログラムをダウンロードしコンパイルして実行していたのですが、まったく新しいプログラム(プチプロ1.1蛇ロボット)を立ち上げるにはどうしたらよろしいでしょうか。

また、プチプロの解答など載せていただけませんでしょうか。(すごい気になって先に進めません苦笑)

本当に素人で申し訳ございません

Posted by 大和

初めまして 大和といいます。
ロボットシュミレーションの本を参考にODEにチャレンジしているのですが
コンパイルは成功するのに実行すると以下のようなエラーで実行がうまくいきません。

アセンブリ 'odetest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' から型 'dxWorld' を読み込めません。

もしかして ODEのインストール自体がうまくいっていないんでしょうか?
開発環境はVisual Studio.Net 2003 を使っています。

よろしくお願いします。

Posted by Began

でむさん
早速のご回答ありがとうございます。

解決しました。
ODEのサンプルに似たような例があるのを見落としていました。

「ある一定以上の力が加わったときに、固定ジョイントを無効化する」
のを実現するため、dJointDestroyを使って失敗していましたが、
dJointAttach(Joint, 0, 0)とすることで、ジョイントを無効化することができました。
もう一度dJointAttach(Joint, body1,body2 )を使うことで、無効化したジョイントを復活させることもできました。

今回ジオメトリのクラスは用いませんでしたが、便利そうなので使ってみようと思っています。

ありがとうございました。

Posted by でむ

Beganさん、

はじめまして。

さて、2つのボディを1つの複合ボディとし扱う方法は、http://www.ode.org/ode-latest-userguide.html
の10.7.7 Geometry Transform Classを使います。

正確には2つのボディを1つの複合ボディではなく、2つのジオメトリを1つのジオメトリとして扱います。でも、形状を維持しますのでバラバラにはなりません。ODEに付属しているテストプログラムtest_boxstack.cppのソースコードを読むと使い方がわかります。ODE本では複雑になり難しくなるので説明していません。

Beganさんのようなアプリケーションを作ったことがないので試したはありませんが、fixedジョイントでできるような気がします。ERPやCFMの値を変更するとエラーが消えるのではないかと思います。それでいろいろ試してからTransform Classを試してみると時間の節約になるかもしれません。

Posted by Began

はじめまして。
ODE本を使ってシミュレーションの勉強をしています。
とても参考になり、シミュレーションの製作がさくさく進みます。
ありがとうございます。

質問です。
p90に
「2つのボディを固定する必要がある場合は、それを1つの複合ボディとする方法が良い」
という記述があります。
ODE本では触れられていないのですが、具体的にはどのような関数を使えば良いのでしょうか。

実現したい機能は、はじめは固定されていた2物体が、ある一定以上の力が加わるとバラバラになる、というものです。
dBodyDisableなどを組み合わせれば模擬的に実現できそうですが、
今後の拡張性を考えて、2つのボディを固定する方法を勉強したいと考えています。

以下のようなことを試しましたが、うまくいきませんでした。
固定ジョイントを作っておいて、ある一定以上の力でdJointDestroyでジョイントを破壊する。
しかし実行すると、dJointDestroyのところで、
「問題が発生したため、--.exeを終了します。ご不便をおかけして申し訳ありません。」
とエラーが起きて終了されてしまいました。
そこで固定ジョイント以外での方法で作ってみようと考えた次第です。

どのような関数を使えばよいかさえわかれば、あとは自分で検索もできると思いますので、
簡単でよいのでご解説いただけないでしょうか。
よろしくお願いします。

Posted by でむ

Jagurさん、

はじめまして

さて、単振動や楕円振動を実現するAPIはありませんので、自分で作るしかありませんね。

直線上に運動が拘束される振動の場合は、スライダージョイントを使えると思います。変位量に応じて、必要な周期や振幅になるように剛体に力を加えれば実現できるのではないでしょうか。

Posted by jagur

はじめまして
最近ODEを使い始め、
ロボットシュミレーションの本も購入し
このサイトもよく参考にさせていただいております。

そこで質問なのですが
物体をその場で振動させるにはどのようにすればよいのでしょうか?
実現したい振動としては
1.直線的な振動
2.楕円振動
等で、つまりその場で一定の動きをし続けるようなものです。
振動数や、振幅のパラメーターを持てるといいのですが。
その様な関数があるとよいのですが。
サンプルプログラム等がありましたら幸いです。

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

Posted by でむ

ODE2joyさん,

大きなポリゴンをODEで扱ったことがないのでわかりません.本家のメーリングリストでお聞きになられれば良いとかと思います.

Posted by Tak

Demuraさま

丁寧な解説ありがとうございました。
また何かありましたらよろしくお願いします。

Posted by ode2joy

ODEの接触解析機能に興味があって、ODE0.8に含まれていたサンプルプログラム(test_moving_trimesh.cpp)のを触ってみたのですが、巨大なtrimeshを表示しようと、下記変数を大きめにとるとプログラムのレスポンスが悪くなります。
static float Vertices[NUM_VERTEX*3];
static int Indices[NUM_POLYGON][3];

20万ポリゴンvs20万ポリゴンの接触をやりたいのですが、難しそうでしょうか。

Posted by でむ

Takさん、

dWorldSetERP()およびdWorldSetCFM()を変更するとシミュレーション中の全ジョイントに効いてきます。nearCallback()の中の contact[i].surface.soft_erpおよびcontact[i].surface.soft_cfmを変更すると接触ジョイントだけに効いてきます。Takさんの場合は、後者を変更すれば良いと思われます。

なお、倍精度でODEをインストールした場合CFMのデフォルト値が1e-10なので、CFMを設定しないとその値になります。CFM=1/(h Kp + kd)、ここでhはステップサイズ、kpはバネ定数、kdはダンパ定数なのでhが十分小さい場合、CFMはダンパ定数の逆数になります。つまり、CFMを小さくすることはダンパ定数が大きくなるので、振動を抑えることができたと考えられます。

また、ERPとCFMの値を変更しても計算時間にはさほど影響を与えません。一般的には、CFMを大きくするとシミュレータの安定性が向上します。ODEの内部エラーが出るときはその値を大きくすると回避できる場合があります。

Posted by tak

demuraさま

takです。出張中にわざわざありがとうございます。
指摘の通り以下を順に試してみました。

1. Stepsizeを小さくする。
 Stepsizeを0.005 -> 0.001へ変更してみたのですが、進行速度が1/5になった分、滑りのスピードも1/5になったという印象でしたので、元に戻しました。

2. ERPの値を小さくする。
 0.8 -> 0.2あたりまで小さくしてみましたが変化ありませんでした。

3. CFMの値を大きくする。
 「小さくする」と読み違えて10e-4 -> 10e^-10としてみた所、滑り現象が解決しました。

2と3ですが、グローバルな値の方(dWorldSetERP()およびdWorldSetCFM())を変更したのですが、これはnearCallback()の中のcontact[i].surface.soft_erpおよびcontact[i].surface.soft_cfmを変更するのとどう違うのでしょうか?私の解釈では、基本はグローバルの値に従うが、特定のオブジェクト同士のときのみ変更したいときに後者を用いて個別に与えると思っていたのですが間違いなのでしょうか?

別の話になりますが、1は小さくすればシミュレーションの負担が大きくなりますが、2、3の値はシミュレーションの負荷に大きく影響してくるのでしょうか?

Posted by でむ

Takさん、

現在、札幌出張中です。本場のジンギスカンはおいしいです。

さて、ODEでは各ステップで衝突検出の計算をし、接触ジョイントの位置を修正しているので、Stepsizeの大きさやERPの値により微小振動するケースがあります。Stepsizeが大きいと物体が地面にめり込み、ERPが大きいとその修正量が大きいの振動が大きくなります。以下を順番に試してみてください。

1. Stepsizeを小さくする。
2. ERPの値を小さくする。
3. CFMの値を大きくする。

なお、ERPとCFMでバネ・ダンパシステムをシミュレーションできます。詳しくはODE本をご覧ください。

上記で症状が改善しない場合は以下のAPIを利用してください。
void dWorldSetContactMaxCorrectingVel (dWorldID, dReal vel);
void dWorldSetContactSurfaceLayer (dWorldID, dReal depth);

症状が改善したら、どのパラメータをどう変えたらうまくいったか連絡頂ければありがたいです。


Posted by tak

takと申します。以前、Macへのインストール方法でお世話になった者です。

今までほとんど描画させずにシミュレーションを行っておりまして、最近確認のために描画させてみて気づいたのですが、何の力も働いていない地面に静止している物体が微妙に滑って動いているようなのです。摩擦係数をInfinityにしても症状は変わりませんでした。何か設定しなければいけないのでしょうか?
あるいは地面と固定するための設定方法みたいなものがあるのでしょうか?
よろしくお願いします。

Posted by でむ

Mommaさん,

よくある質問の「A.6 Visual C++ Express Editionでインストールする方法を教えてください.」にリンクをはりました.

どうもありがとうございました.

Posted by Momma

Demuraさま

コメントありがとうございます!
ご指摘の箇所、変更しました。
また、環境構築についてもトピックに掲載してますので、宜しかったらリンクを張っていただければと思います。

Posted by でむ

Mommaさま,

拝見しました.面白そうですね.お盆の中を迷路にして右手法で解けば自動的に出口に行けそうです.

Visual C++をお使いとのことなので,環境設定などを書いて頂ければ私のFAQからリンクをはります.多くの方の参考になると思います.私はVisual C++は使ったことがないのでわかりません.

また,リンクをはって頂きありがとうございました.demura.netは個人的なサイトなので出村教授ではなく「出村さん」または「でむさん」ぐらいにして頂けるとありがたいです.

Posted by Momma

Demuraさま

公開許可ありがとうございます。
ODEに関しては手探りの状態で、ODE本を片手に1つ作成できたところです。
お盆の中身を迷路にしても面白いかなと思っています。

拙のWebはURL欄に記載致しました。
ソースは解説を含めて徐々に記載していく予定です。
開発はVisual C++ 2005 EEとUbuntuで行なっていますので、備忘録を兼ねて環境構築を掲載しています。

Posted by でむ

Mommaさん,

是非ソースコードを公開してください.楽しみにしています.
URLを教えてください.

また,demura.netへリンクをはって頂けるとありがたいです.ODEを盛り上げていきましょう.

では

Posted by でむ

Lynさん

お役に立てて良かったです.
今後ともよろしくお願いします.

Posted by Momma

はじめまして。
ODE本を参考に楽しませて頂いています。
AMotorのソースを元に、衝突判定等を追加して、上にお盆を載せて玉をゴロゴロ転がす遊びのシミュレーションを作ったのですが、改変したソースの公開をしても宜しいでしょうか。ソースのコメントやWebでの解説に転用の旨を記載する予定です。

Posted by Lyn [TypeKey Profile Page]

Demura さん、
適切なご回答ありがとうございました。
教えていただいたテキストエディタによりhello.cppの重力サインを変更し上書き保存したところ
upwardにボールが落下(?) 出来ました。
再現性を確認するためNOTEPADで再度コンパイルしたところ再現しましたので参考までに
エラーメッセージを書いておきます。
$ make
g++ -Wall -fno-exceptions -fno-rtti -g -DWIN32 -c hello.cpp -L../../drawstuff/src -L../../ode/src -L/usr/local/lib -I. -I../../include -I/usr/include
hello.cpp:1: error: stray '\239' in program
hello.cpp:1: error: stray '\187' in program
hello.cpp:1: error: stray '\191' in program
make: *** [hello.o] Error 1

ありがとうございました!
これから最適軌道計画のプログラムを作るのですが、長い道のりになりそうです。

Posted by でむ

Lynさん,

エラーメッセージを教えてください.
全角の空白文字が入ったかもしれません.全角文字が入るとコンパイルに失敗します.

notepadではなく,もう少し高い機能のエディターをお使いになることをお勧めします.
私の授業ではフリーソフトTeraPad (http://www5f.biglobe.ne.jp/~t-susumu/library/tpad.html) を使っています.

TeraPadをお使いになられる場合は,表示(V)→オプション→表示で全角空白にチェックをいれ,全角文字を全て表示するよう設定してください.

Posted by Lyn [TypeKey Profile Page]

demuraさん

初歩質問で恐縮なのですが、サンプルでダウンロードしたhello.cpp file
のコンパイル・実行は可能なのですが、重力加速度をnotepadを使用し
変更後(ex1.3)、Makeコマンドでコンパイルが出来ません。
これはフリーソフトによる制限なのでしょうか?

Posted by でむ

Kogasakさん、

おめでとうございます。

Windows XP + MinGW + MSys環境では多くの実績があり、今まで授業で50名程度の学生がインストールしてきましたが問題はほとんどありませんでした。そのため、不具合を報告されるとお手上げ状態になります。

何らかの理由でシステムが正常にインストールされていなかった、環境変数が他のソフトウェアとぶつかっている、あるいはウイルスに感染しているなどが考えられますが、原因がはっきりしません。その場合、kogasakさんのようにシステムリカバリするしか他に手段はありません。それが一番時間を節約する方法なのかもしれません。

また、何か問題があればコメントをください。

Posted by kogasak

ご丁寧なご指導ありがとうございました。
その後、一週間をかけて、パソコンユーザカウント新設定、システムリカバリ、常駐プログラム停止、Lhaplusの設定変更等考えられる手を次々に打ってみました。
(ご参考に、使用システムは、Microsoft Windows XP, Home Edition V. 2002、Service Pack 2です。)
その結果、一部手順書と異なる応答があるものの、一応作動するようになりました。
何が原因でインストールできるようになったのか、多くのことをやりすぎてよくわからないのが残念です。
いずれにせよここまでこれたのは、御助言に励まされたことによるものと感謝しております。
今後とも、よろしくお願いいたします。
kogasak


Posted by でむ

でむです.

Kogasakさんから以下のコメントを頂きました.
拙著をご購入頂きありがとうございます.

さて,ODE講座2ではなく,以下のURLの手順でインストールをして頂けますか?
授業の際,25名程度でインストールしたときは問題なくできました.
http://demura.net/archives/9ode/odewindows-1.html

そのとき,mingwとmsysのバージョンは指示のとおりしてください.新しいバージョンですと動かない場合がありました.

また,cygwinの環境と混在していないでしょうか?

ちなみに私の環境は以下のとおりです.
Windows XP Professional SP2
MinGW 5.1.0
MSYS 1.0.10

ご面倒でも今一度,上のURLのとおり作業をし,cygwinの環境と混在している場合は一時的にc:\cygwinの名前をc:\cygwin1などとし,参考までに環境を教えてください.

よろしくお願いします.


-----
ODEの入り口でつまずいています。
出村先生の’ロボットシュミュレーション’を購入し、ODE二挑戦しようとしていますが、この10日ほどMinGW開発環境をインストールしようとあらゆる考えられる手を尽くしていますが歯が立ちません。
OSは、WindowsXPです。
ODE講座2に示されている手順を忠実たどってインストール作業をしていますが、makeの段階で毎回ストップします。
ストップのたびにプログラムの削除および必要ファイルの再ダウンロードからやり直していますが、毎回makeの段階でつぎのいずれかのコメントがでます。
 *** No rule to make target '../configure in' needed by 'Makefile.in'. Stop
*** No targets specified and no makefile found. Stop

ode-src-0.8.zip の解凍はLhaplusの設定をサブフォルダまで解凍するようにし、またウイルスソフトも停止状態にしたりしてインストールをトライしていますが前進しません。
以上ですが、解決法をご指導いただけませんでしょうか。     kogasak

Posted by でむ

Partizansさん,

返事が大変遅くなりごめんなさい.ロボカップ,学会,ODE本のソースコード編集作業といろいろありました.

先週,講義でこのウェブサイトに書いてあるとおりに学生にやってもらいましたが,約30名とも問題なくインストールできました.MinGW,MSYSが何らかの理由でうまくインストールされなかったと思われますが,全て削除し,再起動してから再度インストールしても状態が変わらないようなら違う理由も考えれられます.

これ以上はよくわかりません.解決されていればよいのですが.

Posted by でむ

Partizansさん、

解決できるかできるかどうかわかりませんが、よろしくお願いします。講義でも使っていますが、このような症状は初めてです。

さて、私にはmingwになんらかの問題があると思われます。私の環境は、Partizansさんと全く同じですから。

お手数ですが以下を試して頂けますか?
1. 簡単なC言語のプログラムをmingw+msys環境でコンパイルできるか?
2./bin/shはあるか?
2.ode-0.8/config.logを送ってください。
3.思い切って、mingwとmsysを完全に削除し、また入れ直す。Cドライブの直下をお勧めします。

御返事を頂いても、ロボカップジャパンオープン直前で、てんてこ舞なので回答が遅れるかもしれません。ごめんなさい。

Posted by partizans

お世話になります、Partizansです。
私はロボットのロの字も知らないし、仕事ともまったく関係ないですが、
C言語でプログラミング出来るロボットがあるのを知り、それを検索していたところODEというのがひっかかりました。というか、貴サイトが見つかった訳です^^。ODEだけではなく、MinGW+Msysさえ初耳です、、、--;
ですので、一連の作業は、貴サイトのODEのインストール方法を参照しました。
以下の手順です。
1.MinGWのインストール
 ①場所:D:/MinGW
 ②Version:5.1.3
2.Msysのインストール
 ①場所:D:/msys
 ②Version:1.0
ここまでは正常にインストールされたと思います(Msysが正常に動いたので)。最初は、Cドライブの直下ではないとまずいと思ったのですが、上記の2つをCドライブの直下にインストールしても同じでした。
3.ODE-0.8 のインストール
 ①ODE-src-0.8のダウンロード
 ②+Lhacaで解凍後、生成されたODE-0.8をフォルダごと、
  D:\msys\1.0\home\ユーザ名\src\にコピー
 以下msysで実行...
 ③$cd src(return) ⇒$cd ODE-0.8(return),でODE-0.8フォルダに移動
 ④$./configure --enable-double-precision(return)
  とすると、訳の分からないメッセージがいっぱい出てくる.
ここでやたらに気になるのは、
  configure : error : can not run /bin/sh ./config.sub
というメッセージです。
 ⑤プロンプトに戻ったら、$make(return) を実施しましたが、結果はご存知の通りです。
ご質問の1ですが、ODE-0.7も試したほどですから、ダウンロードの不十分さはないと思います。解凍に関しては再度試してみました。
ご質問の2ですが、上記の手順通りやりましたので問題ないはずですよね?
OSは、Windows XP professionalです。
お忙しいところ申し訳ありませんが、ご返事頂けれと思います。
よろしくお願いします。

Posted by でむ

partizansさん、

はじめまして。何がきっかけでODEを知られたのですか?
オープンソースですし、お手軽に使えるので、覚えると重宝すると思います。

さて、Windowのバージョンと実際に実行したコマンドを詳しく教えてください。

また、エラーをみるとmakefileがないようですね。

1. ODEソースファイルの解凍に失敗、または完全にしていない。または、ダウンロードそのものが不完全。
  ダウンロードを再度し、解凍が完全にされているか確認をお願いします。
2.makeコマンドを入力するディレクトリが違う。
  ode-0.8のすぐ下で実行しましたか?

はずじているかもしれませんが、上の2点が考えられるので確かめてください。


Posted by partizans

こんにちは、
先週ODEというものを知ったばかりです、、、(--;)
興味がわいてインストールしようとしてるんですが、うまくいってません。
WindowsのMinGW+MsysのインストールまではOK。
ODE0.8のConfigurationからうまくいってないようで、
makeしようとすると、
No targets specified and no makefile fonund.Stop
というエラーが出ます。
どうすればいいでしょうか?

Posted by saga [TypeKey Profile Page]

でむさん,

とても丁寧な回答ありがとうございます.

質問1ですが,回答どおりにボディを設定することによって,
解決することができました.
質問2ですが,振動を回避するように摩擦を入れるなどの処理をやってみます.

ODE本が出版されるのを待ち望んでいます.
大変だと思いますが,頑張ってください.

Posted by でむ

sagaさん,

「ODEよくある質問」が参考になるという意見,ありがとうございます.作った甲斐があったというものです.授業でODEを教えているので初心者の質問はとても貴重です.遠慮なく聞いてください.

さて,ご質問に回答します.
1.ODEのジョイント(関節)は単なる制約なので物理的な実体はありませんので,質量を設定するAPIはありません.ただし,ジョイントのある位置(アンカー)にボディ(剛体)を作り,そのボディは隣接したボディと接触判定をしないというようにコーディングすれば目的は達成できると思います.この程度の回答で解決できますか? 不十分な場合は校正が終わったら記事を書きましょう.

2.トルク制御のサンプルプログラムを掲載しようとしていましたが,本の校正が大詰めを迎えているのでサボっています.ODE講座16のサンプルプログラムの以下の部分の下から3,4行目にある,dJointSetHingeParam(joint[j], dParamVel, k1*z); // 角速度の設定
dJointSetHingeParam(joint[j], dParamFMax, fMax); // 最大トルクの設定
の2行を消して,代わりに以下の行を挿入してください.なお,必要なトルクの値はご自分で設定してください.
dJointAddHingeTorque(joint[j], 必要なトルクの値);

// P制御
void control() {
static int step = 0; // シミュレーションのステップ数
double k1 = 10.0, fMax = 100.0; // k1:比例ゲイン, fMax:最大トルク[Nm]
printf("\r%6d:",step++);
for (int j = 1; j < NUM; j++) {
double tmpAngle = dJointGetHingeAngle(joint[j]); // 現在の関節角[rad]
double z = THETA[j] - tmpAngle; // z: 残差=目標関節角-現在関節角
dJointSetHingeParam(joint[j], dParamVel, k1*z); // 角速度の設定
dJointSetHingeParam(joint[j], dParamFMax, fMax); // 最大トルクの設定
}
}

ただし,これだけでは振動しますので,回避するためには関節に摩擦を入れるなどの処理が必要です.校正作業が終わったらアップしますね.

Posted by saga [TypeKey Profile Page]

はじめまして。sagaと申します。
最近ODEをはじめました。
このサイトを参考にさせてもらっています(特に「ODEよくある質問」は参考になります)。

以下の2つの質問があります。
・ジョイントに質量を設定したいのですが、どうやったらできるのでしょうか。
・トルク制御をしたいと思っています。dJointAddHingeTorque()を使うということですが、
プログラム例があれば教えてもらえないでしょうか。

よろしくお願いします。

Posted by でむ

ゆうさん,

解決おめでとうございます.
Gimpactは単精度でないとインストールできないので,まだ試していません.シミュレーションをやられる場合は,精度の高い倍精度でインストールことをお勧めします.

また,メーリングリストによると衝突検出計算に関してはBulletのライブラリと統合する話もでてきており,今後大きく変わるところだと思います.

また,何かあったら投稿してください.

Posted by ゆう

こんにちは。
固定ジョイントにした所、無事動きました!
最初GIMPACTを使っていたのですが、すぐに離れてしまったりして、処理系によって違うのでなかなか難しいですね。

ありがとうございました。
これからもODE講座頑張ってください!

Posted by でむ

地面と同様にnearCallBack関数を作成しても,くっつかないと思います.
そこでは接触ジョイントを使っていますから.

以下はどうでしょうか?

ただし,これは地面が鳥もち状態です.バットにくっつけたいならgroundをバットのジオメトリIDに変更してください.

試したら結果を教えてくださいね.

static void nearCallback(void *data, dGeomID o1, dGeomID o2)
{
const int N = 10;
dContact contact[N];

int isGround = ((ground == o1) || (ground == o2));

int n = dCollide(o1,o2,N,&contact[0].geom,sizeof(dContact));
if (isGround) {
for (int i = 0; i < n; i++) {
contact[i].surface.mode = dContactBounce|dContactSoftERP|dContactSoftCFM;
contact[i].surface.bounce = 1.0; // (0.0~1.0)
contact[i].surface.bounce_vel = 0.0;
contact[i].surface.soft_erp = 1.0;
contact[i].surface.soft_cfm = 0.0;
//dJointID c = dJointCreateContact(world,contactgroup,&contact[i]);
// dJointAttach (c,dGeomGetBody(contact[i].geom.g1),
   // dGeomGetBody(contact[i].geom.g2));
fixed[i] = dJointCreateFixed(world,contactgroup);
dJointAttach (fixed[i],dGeomGetBody(contact[i].geom.g1),
dGeomGetBody(contact[i].geom.g2));
dJointSetFixed(fixed[i]);
}
}
}

Posted by ゆう

こんばんは。
ご回答ありがとうございました。
ボールがバットにくっつくというのは、でむさんがおっしゃるように
両者をfixedジョイントか何かで完全に結合させるという意味です。
地面と同じようにやっているつもりなのですが。
よろしくお願いします。

Search
Entries
ODE本の宣伝
ODEを使い仮想空間でロボットを動かそう!本ウェブの連載から誕生.ODEのマニュアル機能有. よろしくお願いします。

Open Dynamics Engine
下記のサイトから購入できます.
amazon
7&Y icon

最近のコメント

でむ on ODE質問・要望募集3!: 初心者さん、 エラ
初心者 on ODE質問・要望募集3!: 一度ソースコード新し
on ODE質問・要望募集3!: でむさん、 追加し
初心者 on ODE質問・要望募集3!: でむさん、 >>O
でむ on ODE質問・要望募集3!: mif805さん、
でむ on ODE質問・要望募集3!: 初心者さん、 OS
初心者 on ODE質問・要望募集3!: こんばんは、何度もす
でむ on ODE質問・要望募集3!: dcsyhisさん、
dcsyhi on ODE質問・要望募集3!: Demura さん
でむ on ODE質問・要望募集3!: チャンさん、 EX
カウンタ (since 2007-5-20)