まず,ここにあるODEのFAQを読んでからコメントお願いします.
ODE質問・要望5!のコメントが100件になりましたので,新しい質問や要望はODE質問・要望6!にお願いします!
なお、私のコメントやご自分の努力により問題が解決 された場合に、問題の原因がわかれば投稿して頂くと大変助かります。その情報はODEの初心者にとって重要なものです。ある程度たまりましたらFAQに掲 載したいと思いますのでご協力のほどよろしくお願いします。
まず,ここにあるODEのFAQを読んでからコメントお願いします.
ODE質問・要望5!のコメントが100件になりましたので,新しい質問や要望はODE質問・要望6!にお願いします!
なお、私のコメントやご自分の努力により問題が解決 された場合に、問題の原因がわかれば投稿して頂くと大変助かります。その情報はODEの初心者にとって重要なものです。ある程度たまりましたらFAQに掲 載したいと思いますのでご協力のほどよろしくお願いします。
コメント
ballさん、
過去のODEメーリングリストのメールを検索しましたが、該当する記事はありませんでした。
ただ、Ruby(Ruby_ODE)、JAVA(odejava)、Python(PyODE)などでは使えるようです。
私はどれも使ったことはないのでよくわかりません。
でむ
説明がへたですいません・・・
そういうことです。どうすればできますか?
ballさん、
Excel VBAからODEのAPIを呼び出すということでしょうか?
でむ
Excel VBAでもインストールできますか?
でむさん,返事が遅くなりすみません.
描画の有無で結果が異なる件ですが,1回のシミュレーションに要したトルクの総和や目標速度との誤差の総和です.制御にはdJointAddHingeTorque()を使用して,繰り返し計算の1回目だけが微妙に値が異なっていました.
しかし,最近デモのbuggy.cppを改良して繰り返し計算のプログラムを実行したところ,描画の有無で結果は変わりませんでした.
どこかプログラムにミスがあるようです.
お騒がせしました.
ぽったー
ぽったーさん
貧乏暇なしといったところです。
さて、制御と衝突検出計算の順番ですが、制御を先にしてから、衝突、動力学計算の順が良いと考えます。
衝突検出計算では、拘束条件となる接触点を算出し、それに基づき動力学計算を実施します。例えば、位置制御などにより物体の位置や姿勢が変化する場合は、それにより接触点が変更になるので、制御を先に行った方が良いです。
また、工学設計Ⅲ発表会のビデオは発表の数週間前に撮ったものなので、本番はもう少し良かったですよ。
さて、描画する場合としない場合で結果が変わるという理由は良くわかりません。表示することが動力学計算に影響を与えるとは考えづらいです。
具体的にどのように違うか教えて頂けたらありがたいです。
でむ
でむさん,忙しい時期も過ぎたでしょうか?
ぽったーです.
simLoop()について質問なんですが,simLoop()内で行う作業(関数)には明確な順番があるでしょうか?
例えば,ロボットシミュレーションのp.113では,
制御 -> 衝突検出 -> 動力学計算 -> 接触点消去 -> 描画
となっていると思います.
混乱している点は,制御してから接触ジョイントを構成するのか?それとも,接触ジョイントが構成されてから制御するのか?です.
これは,順番はどちらでもよく,動力学計算よりも前で処理すれば良い問題なのでしょうか?
工学設計Ⅲ公開発表会のムービー見ましたよ!いろいろバラエティに富んでますね.
ODEと強化学習を用いたシミュレーションですが,繰り返し計算をする際に,同じパラメータを使用しても,描画をする,しないで結果が微妙に異なることはなかったですか?
遺伝的アルゴリズムを使用してシミュレーションを行っているのですが,描画のある,なしで結果が異なるので困っています.
現在は時間がかかりますが,描画ありでシミュレーションを行いつつ,どこか変数の初期化をまちがえているのかな..と悩んでいます.
よろしくお願いします.
勉強中さん、
解決してなによりです。
またのお越しをお待ちしています。
でむ
ありがとうございます。
/sbin/ldconfigを実行したところエラーもなくなり、うまく動くようになりました。
また質問すると思いますので、今後ともよろしくお願いします!!
勉強中さん
はじめまして!
ODEをインストールするときに、make installをされましたか?
また、共有ライブラリがシステムに認識されるように、 /usr/local/lib を /etc/ld.so.confに追加し、 /sbin/ldconfigを実行しましたか?
でむ
最初のhello.cppをコンパイルして実行しようとすると
error while loading shared libraries: libode.so: cannot open shared object file: No such file or directory
といわれてしまいます。
これはどこがいけないのでしょうか??
Fedoraを使っています。
すいません,自己解決しました.
単にオフセットのやり方がまずかっただけのようです.
上にもう1つボックスを置いたらできました.
お手数掛けさせてしまい申し訳ありません.
ありがとうございました.
でむさん,お返事ありがとうございます.
一応そのページやwebの該当講座を見て作ったのですが,
そのとおりに作ってもうまくいきません.
ボックスの重心をずらしても四隅の圧力センサは同じ圧力を示しています.
まるさん、
はじめまして!
ODE本プログラム9.1:力・トルクセンサではだめでしょうか?
でむ
はじめまして,まると申します.
現在,圧力センサに関するプログラムを作っています.
ロボットの足を模したボックスの四隅に圧力センサが取り付けられており,
これからZMPを算出しようと考えています.
これでボックスの重心をずらせばZMPも移動するはずなのですが,
四隅の圧力センサはどれもほぼ同じ値を示しており,ZMPは変わりません.
どのように記述すれば正しく圧力を測定できるのでしょうか?
どうかご回答よろしくお願いします.
やはりソースコードが途切れてしまいました。
ソースコードが途切れていました。すいませんでした。
全体のソースコードを数日前にメールにてお送りいたしました。
以下はそのシミュレーションの再スタートに関する部分です。
もう一度載せてみます。
void destroyArm()
{
dJointDestroy(sensor_joint); // センサージョイントの破壊
dBodyDestroy(sensor); // センサーボディの破壊
for (int i = 1; i
C初心者さん,
これだけの情報だと原因を特定できません。
ソースコードを送って頂くか,リンクを張って頂けませんか?
でむ
pro6-4のロボットアームにシミュレーションの再スタートするプログラムを実装したのですがうまくいきません。
コンパイルは通りました。キー操作から”r”を押すと、再スタートする関数が呼び出されるのですが、”r”を押すと「問題が発生したため、・・・.exeを終了します。・・・」など表示されてしまいます。球の落下など簡単なプログラムの再シミュレーションはうまくいきました。
いろいろ試したのですが、まったくうまくいきません。どこに問題があるのでしょうか。よろしくお願いします。
実装してうまくいかなかったソースコードです。
void destroyArm()
{
dJointDestroy(sensor_joint); // センサージョイントの破壊
dBodyDestroy(sensor); // センサーボディの破壊
for (int i = 1; i
ぽったーさん、
情報ありがとうございました。助かります。さっそく、FAQに掲載させて頂きました。
現在、ロボット情報学ハンドブックのODEに関する記事の執筆を頼まれ、締め切りを過ぎて青くなっています。
修士発表が2月16日、4年生の発表が2月29日なので、これから益々忙しくなりそうです。
でむ
でむさん,お元気ですか?
そろそろ忙しさもピークを迎えたのではないでしょうか?
今回は質問ではなく,こんなことできましたという報告です.
遺伝的アルゴリズムのような繰り返し計算にODEを使用する際,計算スピードを上げるために描画を止めていました.
しかし,状態の変化を見ようとprintfをしても,MinGW+msysの環境下で描画を止めるとprintfの出力も止まってしまいました.
そこであれこれ調べていたところ,でむさんが配布されているmakefileの14行目付近にある
$(CC) -mwindows -o (略)
を
$(CC) -mconsole -o (略)
のようにすることで,描画を止めてもコンソールにprintfされるようになりました.
同じように悩んでいる方の手助けになれば幸いです.
なるほど~。できました!
衝突検出の理解も深まりました。
これでまた、ODEでさらに遊べそうです!
本当にどうもありがとうございました!!!
初心者さん、
もちろんODEで実現できます。
実際に接触したかどうかは、接触点があるかないかでわかります。
ODE講座6のサンプルプログラムでは接触点数が1個以上の場合に、flagを1にセットしています。
なお、地面に接触しているときだけ色を赤にしたい場合は、simLoopの中でdSpaceCollide()を呼び出す前にflagを0にセットすればできます(サンプルプログラムを変更しました)。ただし、跳ね返るデモでは、接触が一瞬なので肉眼では確認しづらいです。
でむ
非常にわかりやすいご回答ありがとうございます。大変助かりました!!!
参考書のP20にありますが、neerCallback関数は2つのオブジェクトが接触する可能性のある場合呼び出されます。なので、接触する場合のみ取り扱いたい場合はODEの特性上、不可能でしょうか?
今回の場合ですと、赤のボールが一度地面と衝突したらずっと青のままになってしまいます。地面と衝突して、跳ね上がったらまた赤にすることは無理でしょうか?
初心者さん、
衝突したら色を変えるためには以下の手順でやってください。
1.衝突したことを示すグローバル変数を準備する。ここでは以下のようにします。
static int flag = 0;
2.nearCallback関数の中でdCollide()の返却値が1以上なら、衝突したことを示すグローバル変数flagを1にセットし、そうでない場合は0にセットする。
3.simLoop関数の中で、flagが1なら別の色を設定し、0なら元の色に設定する。
また、シミュレーションの画面に文字を表示する機能はdrawstuffにはありませんが、以下の3つの方法で対処可能です。
1.標準出力で我慢する
2.drawstuff+文字表示ライブラリを利用する
3.drawstuff以外のライブラリを使用する
でむ
球を空中から落下させて、地面と衝突したら球の色を変えたり、画面に「衝突した」と表示させるなど衝突したときの反応を示すプログラムを作りたいのですがが、どうすればよいでしょうか?
ODEのデモにも2つほど似たようなものを見つけましたが、ソースコードが複雑でなかなか上記に関する箇所を見つけることができませんでした。
nakaさん、
よかったですね。
また、遊びにきてください。
でむ
でむさん
ご回答ありがとうございました.
やはりSetFeedbackの指定の箇所に問題があったようでした.
9.1やODE講座13のプログラムを参考に設定しなおしてみたところ
上手く動作してくれました.
ありがとうございました.
nakaさん、
固定ジョイントでなくても力やトルクを取得可能です。
dJointSetFeedback()で取得したい関節を指定されましたか?
ODE本P227のプログラム9.1が参考になると思います。
でむ
でむさん
先日はありがとうございました.
すみません,またしても質問です.
dJointGetFeedback関数を用いてボディにかける力の値を得たいと思うのですが,その際のジョイントは固定関節でなければできないのでしょうか?
また,ボディのどこかが地面に接着していなければまずいでしょうか?
ジョイントがfixedでなく,ボディも接着していない状態で値を取得してみたのですが,それが10桁以上の値になってしまいました.
これはジョイントやボディの問題でなく,関数の設定方法に問題があるのでしょうか?
よろしくお願いします.
nakaさん,
問題が解決して何よりです。初歩的な質問はdemura.netにとって大変重要なので,また,何かあれば聞いてください。
でむ
でむさん
初歩的な質問ばかりですみませんでした.
ですが,おかげさまで進められそうです.
ありがとうございました.
これからもよろしくお願いします.
でむさん,お忙しいところありがとうございます.
幸い風邪をひくことなく,元気にODEをしています.
stepsizeが数値積分の刻み幅であり,精度と計算速度のトレードオフがあることは分かりました.
ご報告として,けんせいちゃんのシミュレーションなのですが,stepsize=0.00001など非常に小さな値にすると,なんとけんせいちゃんが宙に舞います.
ぽったーさん、
お久しぶりです。お元気ですか?
さて、dWordStep(dWorldID world, dReal stepsize)のstepsizeは数値積分の刻み幅です。小さいほど精確になりますが、速度は遅くなります。
ただし、ODEはゲームの物理計算エンジン用に開発されたので、現状では精度が要求される工学分野には向きません。そのような用途にはOpenHRP3を利用されるのが良いと考えます。ただし、ODEと比較すると速度は遅いです。一般に、精度と速度はトレードオフの関係にあります。ODEはリーズナブルな挙動で、高速性と安定性が特徴となっています。
nakaさん、
新HPが見やすくなったとのコメントありがとうございます。苦労した甲斐がありました。
1. 慣性力が働くので、全てのボディ(剛体)の速度、角速度を0に初期化してください。
2.はい。ただし、ロボットは複数のボディとそれを結合している複数のリンクで構成されているので、あるボディだけに特定の方向へ動かす力を与えても、ロボット全体がどの方向に移動するかはシミュレーションの結果を見なければわかりません。
地面との拘束も考慮しなければなりません。
でむ
でむさん
ご回答ありがとうございます.
新HPでは項目などが整理されていて,とても読みやすくなっていると思います!
申し訳ないですがさらに2つほど質問させてください.
1.先日の2.の続きですが物体を拘束するにはどうすればいいのでしょうか?
それまで力を与えて動かしていたので,とりあえず力を与えるのをやめましたが,慣性力が働いてしばらく動いてしまいます.すぐに止めたいのですが,位置座標の指定(?)など固定の方法はないでしょうか?
2.ロボットのボディの別々の場所に力を与えた場合,ロボットはその合力方向に動くのでしょうか?
よろしくお願いします.
でむさん,おひさしぶりです.
ODEのシミュレーションのステップに関する質問です.
こちらのサイトで紹介されている
EX9.3: ヒューマノイドモデル 「けんせいちゃん」 (P223)
のサンプルプログラムの270行目の数値を0.01から0.00001や0.05,0.1に変更するとシミュレーション結果が変わります.
シミュレーションのステップがODEの数値積分などに利用されているために,このように結果が異なるのでしょうか?
単に小さければいいというわけではなさそうなのですが,目安としてどのくらいの値を与えるべきなのでしょうか?
nakaさん、
はじめまして。ウェブサイトをリニューアルして以前より読みやすくなったと思いますがいかがでしょうか? 改善して欲しいことがあればコメント頂ければありがたいです。さて、回答します。
1.そうです。dContactMu2をdInfinityにすると滑りません。ただし、そのためには、dContactMu2のフラグを設定する必要があります。さらに、車軸方向を計算して、contact[i].fdir1[0]~contact[i].fdir1[2]に設定しなければなりません。dContactFDir1のフラグを設定することもお忘れなく。ODE本のプログラム5.2に全方向移動ロボットのサンプルプログラムがあります。全方向移動ロボットの車輪は横方向に摩擦が小さいので、nakaさんの例とは逆になりますが、参考にはなると思います。
2. simloopの中でループをカウントして、ある数に達成したら拘束をかけるというのではだめでしょうか?
でむ
はじめまして,いつもこちらのHPで勉強させていただいております.
2つほど質問させてください.
1.シミュレーションでロボットが進行方向と垂直な方向に横滑りします.
車輪がついているわけではないのですが,その横滑りを抑えるにはdContactMu2を用いればいいのでしょうか?一応設定してみたのですが,あまり効いているように見えません.設定方法に注意点などありますでしょうか?
2.いくつかのリンクが連なっている物体を考えているのですが,ある時間までは自由に動き回っているとして,シミュレーションの途中(一定時間経った後など)からその一部のみを拘束する,と言うことは可能でしょうか?
説明不足でしたらすみません.
よろしくお願いします.
CohCohさん、
ご質問ありがとうございます。
剛体の初期角速度の設定はdBodySetAngularVel、初期速度の設定はdBodySetLinearVelを使います。ただし、この角速度は重心周りの角速度、速度は重心の速度です。
ご質問はロボットのように多リンク機構の関節の角速度を初期設定したいということですので計算に手間がかかりますね。
普通のモータは役不足なので、高性能で理想的なAモータなら使えると思います。このモータは次のステップで必ず指定した角速度になるとユーザガイドには記載されています。ODE本では簡単ですが、91ページから96ページにかけて説明しています。また、ODE講座24としてAモータを使った簡単なサンプルプログラムを作りましたので参考にしてください。
ODE講座8のコメント欄に質問したんですが、
このページを見付けたので、転載しました。
質問の重複になりすいません。
以前はシミュレーション中に描画しない方法を教えて頂き、
本当にありがとうございました。
いまODEを用いて、腰、膝、踝の3関節と
上腿、下腿、足の3関節からなるヒトの脚を模した
力学モデルを作成し、運動のシミュレーションを行っているのですが、
各関節に初期角速度を設定する方法が分からなくて困っています。
dJointSetHingeParam(joint, dParamVel, 値);
という関数で設定できるのかと思ったのですが、
ODE本やこのサイトを見ると「目標角速度」と記述が有り、
どうやら求めている、初期角速度の設定では無いようで、
どのように設定したら良いか分かりません。
運動途中の一部分を抜き出して、
その部分に対しシミュレーションを行っているので、
初期速度(加速度)が設定できないと、
正確なシミュレーションが出来ません。
もしよろしければ、設定方法を教えていただけないでしょうか。
ゲストさん,
はじめまして,
まず,dWorldQuickStep()が問題かどうか,dWorldStep()に変えて調べ,ステップサイズも教えてください.
dWorldStep()でも同様な症状が現れる場合は,現実には起こりえないことをシミュレーションしようとしている可能性があります.
例えば,本来剛体であるべきオブジェクト同士が貫通している場合などです.
その現象を防ぐためには,ステップサイズを小さくする.ODE本の100ページに説明のあるdWorldSetContactMaxCorrectingVel()やdWorldSetContactSurfaceLayer()などで貫通することを防いでください.
結果を教えてください.
でむ
はじめまして、どうしても解決することができない問題があるので、よろしくお願いします。
bodyで作成したオブジェクトを密集させたところ、プログラムが強制終了します。gdbで調べたところ、segmentation faultと表示されます。quickstep.cppのmの値を出力しながら、シミュレーションを行うと下記のようになりました。
私は、mの値が関係していると思うのですが、プログラムが強制終了する原因は、どのようなものが考えられるでしょうか?
m(quickstep.cpp)=24
m(quickstep.cpp)=24
m(quickstep.cpp)=45
m(quickstep.cpp)=87
m(quickstep.cpp)=45
m(quickstep.cpp)=24
m(quickstep.cpp)=24
m(quickstep.cpp)=24
m(quickstep.cpp)=24
m(quickstep.cpp)=45
m(quickstep.cpp)=87
m(quickstep.cpp)=45
m(quickstep.cpp)=24
m(quickstep.cpp)=24
m(quickstep.cpp)=45
m(quickstep.cpp)=45
m(quickstep.cpp)=84
m(quickstep.cpp)=162
m(quickstep.cpp)=84
m(quickstep.cpp)=45
m(quickstep.cpp)=45
m(quickstep.cpp)=45
m(quickstep.cpp)=45
m(quickstep.cpp)=84
m(quickstep.cpp)=66
m(quickstep.cpp)=84
m(quickstep.cpp)=45
m(quickstep.cpp)=45
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step contact_index:490
1
m(quickstep.cpp)=48
m(quickstep.cpp)=48
m(quickstep.cpp)=321
m(quickstep.cpp)=48
m(quickstep.cpp)=48
m(quickstep.cpp)=48
m(quickstep.cpp)=48
m(quickstep.cpp)=321
m(quickstep.cpp)=48
m(quickstep.cpp)=48
m(quickstep.cpp)=168
m(quickstep.cpp)=168
m(quickstep.cpp)=168
m(quickstep.cpp)=237
m(quickstep.cpp)=168
m(quickstep.cpp)=168
m(quickstep.cpp)=168
m(quickstep.cpp)=120
m(quickstep.cpp)=132
m(quickstep.cpp)=120
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 2
contact_index:391
m(quickstep.cpp)=402
m(quickstep.cpp)=402
m(quickstep.cpp)=420
m(quickstep.cpp)=402
m(quickstep.cpp)=402
m(quickstep.cpp)=423
m(quickstep.cpp)=225
m(quickstep.cpp)=321
m(quickstep.cpp)=234
m(quickstep.cpp)=153
m(quickstep.cpp)=198
m(quickstep.cpp)=153
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 3
contact_index:364
m(quickstep.cpp)=516
m(quickstep.cpp)=507
m(quickstep.cpp)=528
m(quickstep.cpp)=507
m(quickstep.cpp)=507
m(quickstep.cpp)=543
m(quickstep.cpp)=291
m(quickstep.cpp)=408
m(quickstep.cpp)=300
m(quickstep.cpp)=186
m(quickstep.cpp)=273
m(quickstep.cpp)=186
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 4
contact_index:339
m(quickstep.cpp)=621
m(quickstep.cpp)=1893
m(quickstep.cpp)=633
m(quickstep.cpp)=603
m(quickstep.cpp)=366
m(quickstep.cpp)=486
m(quickstep.cpp)=366
m(quickstep.cpp)=219
m(quickstep.cpp)=354
m(quickstep.cpp)=219
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 5
contact_index:336
m(quickstep.cpp)=705
m(quickstep.cpp)=2184
m(quickstep.cpp)=750
m(quickstep.cpp)=678
m(quickstep.cpp)=429
m(quickstep.cpp)=570
m(quickstep.cpp)=423
m(quickstep.cpp)=252
m(quickstep.cpp)=438
m(quickstep.cpp)=252
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 6
contact_index:307
m(quickstep.cpp)=774
m(quickstep.cpp)=3264
m(quickstep.cpp)=741
m(quickstep.cpp)=492
m(quickstep.cpp)=651
m(quickstep.cpp)=489
m(quickstep.cpp)=285
m(quickstep.cpp)=534
m(quickstep.cpp)=285
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 7
contact_index:278
m(quickstep.cpp)=5196
m(quickstep.cpp)=543
m(quickstep.cpp)=729
m(quickstep.cpp)=537
m(quickstep.cpp)=318
m(quickstep.cpp)=615
m(quickstep.cpp)=318
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 8
contact_index:247
m(quickstep.cpp)=5607
m(quickstep.cpp)=579
m(quickstep.cpp)=816
m(quickstep.cpp)=609
m(quickstep.cpp)=351
m(quickstep.cpp)=702
m(quickstep.cpp)=351
m(quickstep.cpp)=0
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 9
contact_index:253
m(quickstep.cpp)=5988
m(quickstep.cpp)=621
m(quickstep.cpp)=900
m(quickstep.cpp)=657
m(quickstep.cpp)=384
m(quickstep.cpp)=775
m(quickstep.cpp)=384
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 10
contact_index:232
m(quickstep.cpp)=9076
m(quickstep.cpp)=663
m(quickstep.cpp)=717
m(quickstep.cpp)=0
m(quickstep.cpp)=0
Step 11
contact_index:255
m(quickstep.cpp)=11401
akadaさん,
良かったですね.是非,ODEの世界を楽しまれてください.
でむ@妙高高原
ありがとうございました。ご指摘のようにするとうまくいきました。
これからも超初歩的な質問をすることになりそうですが、よろしくおねがいします。
akadaさん,
はじめまして. demura.netのサーバーを移転し,ブログのカスタマイズをしているのでいろいろご迷惑をおかけします.
さて,configure: error: no acceptable C compiler found in $PATH というエラーは恐らく,MinGW+MSYSのインストールが失敗したためだと考えられます.ユーザー名を半角に変えたらうまくいったとのことですので,一度MinGWとMSYSをアンインストールしてから再起動し,インストールしてみてください.
でむ
すいません。変なものを投稿してしまってました・・・。
「add your coment」というのは無視してください。
あと、はじめの「bash.exe: warning: could not find /tmp, please create!」と表示される問題はアカウント名を半角にしたら解決できました。もうひとつのほうをお願いします・・・
odeをインストールした後に
「$./configure□–enable-double-precision」を入力すると
「configure: error: no acceptable C compiler found in $PATH 」
と表示されて、コンパイルできません。どうすればよいのでしょうか?
odeのインストールでつまづいたのですが、MSYSを起動すると
「bash.exe: warning: could not find /tmp, please create!」と表示されるのですが、
これは何なのでしょうか?
>>でむ 07-12-20 (木) 7:51
初心者さん
お返事が遅くなりすみません。年末なのでいろいろとありまして…
1. ODE本では簡単にするために例外処理はしていません。
ご自分で例外処理を考える必要があります。
(6.102)式の左辺の分母にあるS5を分子にもってきてください。
2.姿勢情報はどう与えれば良いかというご質問です。
回転行列またはクオータニオンで設定することができます。
でむ
***************************
パソコンの調子が悪くなり、お礼を伝えるのが遅くなりました。
すみません、申し訳ないです。
ご回答ありがとうございました!!