92ODEの最近のブログ記事
2007年最後の記事になります.ご愛読ありがとうございました.
今年はODE本の出版などdemura.netに関しては飛躍の年となりました.おかげさまで,皆様のご協力のもとにODE本は理工学専門書としてはボチボチの売り上げとなり,ご本家様のODEプロジェクトにわずかではありますが寄付をすることができました.これに関してODEの開発者ラッセル・スミス博士からお礼の言葉がありましたのでここにご報告します.
さて,demura.netではODEの開発環境としてMinGW+MSYS環境を推奨しています.フリーですからね.
でも,さすがのフリーソフトも完璧ではありません.標準設定ではいくつかの問題があります.まず,日本語を表示することができません. 講義で使用する場合はローマ字や英語を表示するように指示すれば何とかなります.
ところがさらにまずいことに,C言語を使う場合は問題があります. 標準入力scanfで入力する前に,普通は入力を促すためにprintfを使い画面に文字列を表示しますよね.でも,標準のMinGW+MSYS環境ではscanfが終わるまでブロックされ画面にprintfで表示するはずの文字列が表示されません.これはMSYSで使っているターミナルソフトrxvtの一部に実装の問題があるためです.
この問題を解決する方法を説明します.
c:\msys\1.0\msys.bat
上のファイルの41行目で標準ではターミナルソフトrxvtを起動するので,下図のようにこの行をコメントアウトしてWindows標準のコマンドプロンプトに切り替えましょう.
上の図はジョイント(関節)の中心に球を描画し、各ボディの重心と各関節中心を直線で結び、それが外部から見えるようにボディを半透明にしスケルトン表示しています。
ODE (Open Dynamics Engine) 講座の23回目です。 11月に入り、カニ漁が解禁になりました。雄のズワイガニはとても有名ですが、その雌は香箱ガニと呼ばれ体は小さいのですが、卵が美味で珍味として重宝されています。今年は豊漁のようで、金沢では近所のスーパーで3杯1000円程度で購入できます。金沢では美味しい食べ物とお酒と温泉がこれからの楽しみとなります。
さて、チップさんから、関節中心点の取得法について質問があり、ODE本を読んでもよくわからないとのことだったのでここで補足します。
Archive3D.netからダウンロードした3DSフォーマットの「うさちゃん」。lib3dsライブラリを使うことでODE付属のdrawstuffで表示できました。
早いものでもう11月ですね。卒業研究や修士研究に取り組んでいる方はお尻に火か着くころではないでしょうか。
さて、ODE (Open Dynamics Engine)講座の22回目です。ODEに付属している3次元グラフィクスライブラリdrawstuffでは3Dモデルのファイルを読み込みません。ひびきのさんはXファイル(あの謎が謎を呼ぶTV番組ではありません。最も最近はPrison Breakに夢中ですが...)を読み込むX File Loaderを公開しています。 ここではもう一つの標準的な3Dファイルである3DSを読み込むサンプルプログラムをテスト公開します。
テクスチャを切り替えるサンプルプログラム
チップさんから「プログラムに関する質問なのですが、テクスチャをたくさん使うにはどうすればいいのでしょうか?LOOPの中でfn.path_to_texturesのパスを変えてもテクスチャが変わらなくて悩んでいます。というご質問を頂きました今回のODE講座で回答します。
simloopの中でpath_to_texturesのパスを変えてもテクスチャは変わりません。
dsStartGraphics()を使う必要があります。ただし、drawstuff.hの95行目のdsSimulationLoop()の下に以下の一行を追加して、ode-0.9のフォルダでmake,make installし直してください。ode-0.8だとエラーが出るようです。
DS_API void dsStartGraphics(int window_width, int window_height, struct dsFunctions *fn);
なお、シミュレーション中の複数の物体に違ったテクスチャを割り当てるためには、dsStartGraphics()を各物体を描画する前に、各物体毎に呼び出さなければいけず、描画速度が遅くなります。drawstuffのソースコードに手を加えるか、他の3Dグラフィクスライブラリを使用することをお勧めします。
そもそもdrawstuffはテストプログラムの表示用ライブラリなので凝ったことはできません。その代わりにソースも短くコードも複雑ではないのでOpenGLの勉強にもピッタリです。
以下に't'キーと'u'キーを押すとテクスチャが切り替わるサンプルプログラムを紹介しますので参考にしてください。ここからダウンロード可能です。
お待たせしました。約半年ぶりのODE講座です。さて、任意のベクトルの向きに沿うように円柱を表示させる方法に関してご質問があったので、試しにサンプルプログラムを作ってみました。
ここではdRFromAxisAndAngle()とdRFromZAxis()のAPIを使って実現しています。 この他にdRFromEulerAngles()のAPIもありますが、ODEのオイラー角はロボット関係者にとっては標準的ではないので省略します。 詳細については、よくある質問をご覧ください。
テクスチャの変更例(詳細はロボコンマガジンNo.50)
卒研発表も終わりやっとKITにも束の間の平和な時期が訪れました.ODE本の出版準備も順調に進み,正式な書名が決まったので.そのうちこのブログで発表できると思います.全国の書店に並ぶのはゴールデンウィーク明けになるでしょう.
さて,オープンソースの動力学計算エンジンODE (Open Dynamics Engine) 講座も19回目を迎え基本的なことは大体説明したので,ODEにオマケで付いている描画ライブラリdrawstuff(ドロースタッフ)のカスタマイズについて紹介します.drawstuffはOpenGLを使った非常にシンプルなライブラリなのでOpenGLの勉強にも役立ちます.一度ソースコードを ご覧になってはいかがでしょうか.
3種のテクスチャ
ドロースタッフでは下図に示す3種類のテクスチャだけを使用しています.これらのファイルはppm(portable pixmap)形式とよばれる標準的なものを使っていて,ode-0.8/drawstuff/texturesの下にあります.空と地面のテクスチャはユーザが指定しなくても自動的に適用されますが,物体のテクスチャはdsSetTexture(DS_WOOD)を使って設定します.設定を解除するときはdsSetTexture(DS_NONE)を使います.
- 空のテクスチャ: sky.ppm
- 地面のテクスチャ: ground.ppm
- 物体のテクスチャ: wood.ppm
|
空のテクスチャ |
地面のテクスチャ |
物体のテクスチャ |
1月22日~24日までKITの池の平セミナーハウスへ学生といってまいりました。今年は雪が少なく池の平温泉スキー場でも積雪が1mしかありませんでした。それでも滑るには十分な量で学生達とスキーやスノボーを満喫しました。それにしても、最近の若者はスノーボードしかやりません。スキーをやっている人はオヤジやご老人がほとんどでしたが、ご老人(推定年齢70歳)のスノーボーダーを発見して勇気付けられました。そのおじいちゃんは全身銀色のウェアを身にまとい、頭に銀色のヘルメットをかぶり、もの凄い速さでかっ飛ばしています。私もそれに刺激を受け、久しぶりにスノボーにチャレンジしましたが、簡単ではありません。それでも、七転び八起きしながらなんとか滑れるようになったのが今研修の成果?でした。
体がズキズキ痛みますが、ゲーム開発やロボットの研究者にも広く使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第18回目をはじめましょう。今回はODEについている3Dグラフィクスライブラリdrawstuffを使わずにシミュレーションをスピードアップする方法をご説明します。
drawstuffはODEの一部ではなく、テストプログラムを表示するためのいわばオマケで、OpenGLをベースに作られています。とてもシンプルでソースコードもあるのでOpenGLを勉強するにはとても良い教材だと思います。
描画しない方法はとても簡単です。テストプログラムではdsSimulationLoopをmain関数の中で呼び出しています。この部分が描画ループを呼び出しシミュレーションの各ステップで描画やキーボードからのイベント処理をしているので、これを呼び出さなければOKです。simLoop関数の中でも描画している部分があるので、そこも呼び出さないようにする必要があります。
つまり、以下のようにしてください。
- 描画をする場合
static void simLoop (int pause)
{
必要な処理に関するコードをここに書く。
dSpaceCollide(space,0,&nearCallback);
dWorldStep(world,0.01);
dJointGroupEmpty(contactgroup);
drawSphere(torso.geom);
}
int main(int argc, char *argv[])
{
略
dsSimulationLoop(argc, argv, 640, 480, &fn);
略
}
- 描画をしない場合
static void simLoop (int pause)
{
必要な処理に関するコードをここに書く。
dSpaceCollide(space,0,&nearCallback);
dWorldStep(world,0.01);
dJointGroupEmpty(contactgroup);
// drawSphere(torso.geom); 描画はしない
}
int main(int argc, char *argv[])
{
略
while (1) {
simLoop(0); // 引数は必ず0にしてください。
}
略
}
今回はこれでおしまい。
ゲーム開発やロボットの研究者にも広く使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第17回目です。
今回は重心の位置を移動する方法について説明します。ODE0.6からはdGeomSetOffsetPositionというAPIが導入され、昨年ODE講座で紹介したGeometry Transform オブジェクトを使う従来の方法と比べてずいぶん簡単に重心の位置をずらして設定することができるようになりました。
- ジオメトリの位置を移動させるAPI
dGeomIDの位置をbodyの位置から(x, y, z)だけずらして設定する。このAPIを使用する前にジオメトリはボディと関連づけられていなければいけない。つまり、dGeomSetBodyが先に呼び出されている必要あり。
では、サンプルプログラムとして上図の起き上がり小法師を紹介します。ソースコードはここからダウンロードしてください。この例では、小法師の胴体に相当するの球(質量10kg、半径0.4m)の重心を球の中心より0.4m下に設定し、頭に相当する球の質量は1gしかないので、この小法師は必ず起き上がってくれます。具体的には、dBodySetPositionで重心位置を球の中心から半径分(0.4m)下にずらして設定し、dGeomSetOffsetPositionでそのずらした量(オフセット,ここではdz)を設定しています。
キーボードからfキーやjキーを押すと、 起き上がり小法師へ左右方向へ100Nの力が加えられますが、復元力があるので起き上がるようすを確認できます。
3関節マニピュレータのシミュレータ (ソースコードはたった100行)
ゲーム開発やロボットの研究者にも使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第16回目です。
今回は今までの知識を整理するために、簡単な3関節マニピュレータのプチシミュレータを作ってみましょう。これはODEを使うと「たった100行程度でこのようなシミュレータができるんです.」というプログラムなので衝突計算部分は省略しています.運動学や逆運動学を習った方はこのロボットに実装してみてください.ロボットが動くと不思議にわかった気になるものです.
図 Yellow Dog Linux 5.0 for PLAYSTATION 3のスクリーンショット:左のターミナルにcpuinfoを表示しています。Cell Broadband Engineが2個認識され、machineがPS3PFと認識されていることがわかります。YDLの標準ウインドウマネージャはEnlightenmentですが、gnomeに変更しています。
ゲーム開発やロボットの研究者にも使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座も第15回目となりました。
今回はお正月企画として、お年玉で購入した?PLAYSTATION 3 (プレイステーション3、PS3)にLinuxをインストールしODEを動かすまでの道のりを紹介したいと思います。
LinxuのディストリビューションにはPS3用に先陣を切ったYellow Dog Linux 5.0(YDL5.0)のフリーダウンロード(英語)版を使いました。 YDLの前にMomonga Linux(20061217版) を試したのですが、何故かfirefoxが起動せずにすぐ落ちる問題点と音がでないために泣く泣く使うのをあきらめました。Momonga Linuxは私がかつて愛用したKondara Linuxの志を継ぐユニークなディストリビューションです。かわいいモモンガがちびっ子にも大人気です。今後に期待しましょう!
さて、Yellow Dog Linux 5.0をPS3にインストールする方法は超簡単でFIXSTARSによる詳細な説明が以下のウェブサイトにあるので、そちらをご覧ください。準備等も含めて2時間もあればインストールは終わると思います。私の場合は、Linux用に10GB、Game OS用に50GBのハードディスク領域を確保し、Linuxのスワップ領域は1GB確保しました。
1. Yellow Dog Linux 5.0のインストール とカスタマイズ(ウインドウマネージャの日本語化)
