注意:この記事はODE0.9用です。
最新のODE0.11.1のインストールはこのページをご覧ください。
やっとODE (Open Dynamics Engine) 本のサンプルプログラムがVisual C++に対応しました。これでサンプルプログラムは、MinGW, Linux, Mac OS X, Visual C++に対応したことになります。では早速、Visual C++ 2008 Expression EditionでODEを使う方法を紹介します。作成にはmommaさんのページを参考にさせて頂きご了解を得ました。mommaさんありがとうございます。私はVisual C++のエキスパートではないので、内容に不備な点があればご指摘頂ければハッピーです。ここでは以下の方法を全くのビギナーを対象に図を多用してわかりやすく説明します。
- A. Visual C++ 2008 Expression Editionのインストール
- B. ODEのダウンロード
- C. ODEのインストール
- D. 環境設定
- E. ODE本のサンプルプログラムをビルドする方法
- A. Visual C++ 2008 Expression Editionのインストール
- B. ODEのダウンロード
- ここをクリックしてsourceforge.netのOpen Dynamics Engineのページ飛ぶと以下の画面になります。中ほどの赤丸で囲んだDownload Open Dynamics Engineのバナーをクリックします。
- すると次の画面になるので、下の方にある赤丸で囲んでいるode-src-0.9.zipをクリックすると ダウンロードが始まりす。
- この例では簡単にするためにデスクトップにダウンロードしましょう。
- C. ODEのインストール
- 解凍ソフトの準備(持っていない方のみ)
- ode-src-0.9.zipはzipフォーマットで圧縮されていますのでzipを解凍できるソフトウェアをインストールしてください.ここでは,Lhaplusという圧縮・解凍ソフトを使っています.GoogleでLhaplusを検索するとダウンロード先を簡単に見つけることができます.
- 解凍と移動
- デスクトップにあるode-src-0.9.zipをダブルクリックすると、ode-0.9というフォルダーがデスクトップに生成されます。
- ode-0.9フォルダをCドライブのすぐ下に移動する
- マウスをode-0.9フォルダーに当て、右マウスボタンをクリック、「切り取り(T)」を選択
- スタート→(マイ)コンピュータ→ローカルディスク(c)をダブルクリック
- マウスの右ボタンをクリックし、「貼り付け(P)」を選択
- ライブラリの作成
- ode-0.9ではVisual C++ 2008用のファイルがないので、Visual C++ 2005用のファイルを使う。 c:¥ode-0.9¥build¥vs2005にあるode.slnをダブルクリックする。
- Visual C++ 2008 Expression Editionのウインドウが開き、Visual Studio 変換ウィザードが開くので「次へ(N)>」をクリックする。
- バックアップ作成の選択画面になるので、画面のまま「次へ(N)>」をクリックする。
- 変換準備完了になるので、「完了(F)」をクリックする。変換の完了になるので「閉じる」をクリックする。
- Visual C++の「ツール(T)」→「オプション(O)」を選択。
- 以下の「オプション」ウインドウが開くので「プロジェクトおよびソリューション」の 「VC++ディレクトリ」を選択する。
- 「ディレクトリを表示するプロジェクト(S)」で「インクルード ファイル」を選択し、
c:¥ode-0.9¥include を追加 注意:上の文字列をカット&ペーストで貼り付けると失敗します。上の文字列は表示の関係で全角文字が含まれています。半角英数文字で入力しなければなりません。 カット&ペーストはこちら c:\ode-0.9\include - 「ディレクトリを表示するプロジェクト(S)」で「ライブラリ ファイル」を選択し、
c:¥ode-0.9¥lib を追加し 「OK」をクリックする。 注意:上の文字列をカット&ペーストで貼り付けると失敗します。上の文字列は表示の関係で全角文字が含まれています。半角英数文字で入力しなければなりません。 カット&ペーストはこちら c:\ode-0.9\lib - Visual C++の「ソリューション エクスプローラー」で ode¥include¥config.hを選択しダブルクリックすると下の図となり、右側のウインドウにconfig.hの内容が表示される。 ODEは例え計算精度が要求されない場合でも、倍精度で使った方が内部エラーなども発生しづらくなるので倍精度でビルドする。 つまり、以下のように30行目をコメントアウトし、31行目のコメントを外す。
30行目 // #define dSINGLE
31行目#define dDOUBLE
「編集(E)」のすぐ下にあるフロッピーディスクのアイコンをクリックしconfig.hを保存する。 - 「ビルド(B)」→「ソリューションのビルド(B)」を選択し、ライブラリを生成する。私のデスクトップでは2分弱でビルドが終わりました。ビルドに成功するとライブラリとデモプログラムが
c:¥ode-0.9¥lib¥DebugDLL に生成されます。 - c:¥ode-0.9フォルダにbinフォルダを作る。
- c:¥ode-0.9¥lib¥DebugDLLの中のode.dll と drawstuff.dll を c:¥ode-0.9¥binにコピーする。 なお、dll (dynamic link library)は実行時に動的にリンクされるライブラリで、Linuxでは共有ライブラリに相当します。
- c:¥ode-0.9¥lib¥DebugDLLの中のode.libとdrawstuff.libをc:¥ode-0.9¥libにコピーする。
上のl.の作業とは、拡張子とコピー場所が違うので注意してください。
- 解凍ソフトの準備(持っていない方のみ)
- ODEのインストールは終わりです。
- システム環境変数の設定 (Windows XP)
- ここでは、先ほどコピーしたdllの場所をシステムに教える設定をします。
- コントロールパネルを開き、「パフォーマンスとメンテナンス」を選択すると以下の画面になる。 下側に「システム」があるので選択する。
- 「システムのプロパティ」の画面になるので、「詳細設定」のタブを選択し、「環境変数(N)」をクリックする。
- 「環境変数」ウインドウが開くので、「システム環境変数(S)」のPathを編集する。 つまり、「システム環境変数(S)」のPathにカーソルを当てクリックしてから、 「編集(I)」をクリックする。
- 「システム変数の編集」ウインドウが開くので、「変数値(V)」の一番最後に以下を追加する。なお、C:¥ode-0.9¥binの前にある記号はセミコロン;です。セミコロンによって区切っています。 ;C:¥ode-0.9¥bin
注意:上の文字列をカット&ペーストで貼り付けると失敗します。上の文字列は表示の関係で全角文字が含まれています。半角英数文字で入力しなければなりません。カット&ペーストはこちら ;c:\ode-0.9\bin
- システム環境変数の設定 (Windows Vista)
- 基本的にXPと同じ。違いは、コントロールパネルの中の「システムとメンテナンス」の項目を選ぶ点だけです。
- 作業用フォルダの確認
- ここでは、作業用フォルダを以下のようなVisual C++標準のフォルダとして説明します。 C:¥Documents and Settings¥ユーザ名¥My Documents¥Visual Studio 2008¥Projects
- drawstuffフォルダのコピー
- C:¥ode-0.9¥drawstuffフォルダを丸ごと上のProjectsフォルダの中にコピーします。 これは、ODE本のサンプルプログラムでは空や地面の模様を表すテクスチャファイルの場所を、実行ファイルから相対位置で指定しているためです。 絶対パスで指定すれば必要ありませんが、互換性に欠けてしまうので相対パスで指定しています。
- I. プロジェクトファイルを使わない方法
- ここでは、自分でODEを使ったプログラムを作成する方法を紹介しましょう。ソースコードを一から作成するのは大変なので、ODE本のサンプルプログラムpro1-1を使います。このプログラムはボールが自由落下するだけのとても簡単なプログラムです。
- ダウンロードしたzipファイルを作業用フォルダの中で解凍します。解凍後はこの例では以下のようになります。中にmakefile, makefile.linux, makefile.osxという名前のファイルがありますがVisual C++では使いませんので削除してかまいません。
- C:¥Documents and Settings¥ユーザ名¥My Documents¥Visual Studio 2008¥Projects¥pro1-1
- Visual C++の「ファイル(F)」→「新規作成(N)」→「プロジェクト(P)」を選択。
- プロジェクトの種類はWin32コンソールアプリケーションを選ぶ。 ここでは「プロジェクト名(N)」を「pro1-1」とします。標準では「ソリューション名(M)」はプロジェクト名と同じになるので、あえて入力する必要はありません。
- 「Win32 アプリケーション ウィザードへようこそ」の画面が開く、「次へ>」をクリックする。
- 「アプリケーションの設定」になるので、以下のように「空のプロジェクト(E)」を選ぶ (重要)。 今回はODE本のサンプルプログラムをそのまま使うのでこのようにします。また、自分で一から作成する場合でも、「空のプロジェクト」を選択しないとstdafx.hという謎のヘッダファイルをインクリードしたり、main関数の代わりに_tmain関数を含んだファイルが自動されます。今まで習ってきた標準C++言語の常識が全く通用しないMicorsoftの世界に陥ってしまうので教育用途としてはお勧めできません。
- 「ソースファイル」→「追加(D)」→「既存の項目(G)」を選択し、ODE本のサンプルプログラムhello.cppを選ぶ。
- 「プロジェクト(P)」→「pro1-1のプロパティ(P)」を選択する。
- 「構成プロパティ」→「リンカ」→「入力」を選択し、右欄の「追加の依存ファイル」に 以下のようにライブラリを記入する。
ode.lib drawstuff.lib
- ビルドする前に、drawstuffフォルダが作業フォルダProjectsの中にコピーされているかどうか確認する。 ない場合は、C:¥ode-バージョン番号¥drawstuffフォルダを丸ごと上のProjectsフォルダの中にコピーする。
- ビルドする。つまり、「ビルド(B)」→「pro1-1のビルド(U)」を選択する。
- 成功するとpro1-1フォルダの中にDebugフォルダが作成され、その中に以下のように pro1-1.exeが作成される。
- pro1-1.exeをダブルクリックして実行する。成功すると以下のウインドウが開く。
- おしまい。お疲れ様!
- Ⅱ. 既存のプロジェクトファイルを利用する方法
- ここでは、上で作成したプロジェクトファイルを利用する方法を説明します。
- pro1-3.zipをここからダウンロードして、作業フォルダに展開する。この例では次のようになる。 C:¥Documents and Settings¥ユーザ名¥My Documents¥Visual Studio 2008¥Projects¥pro1-3
- 上で作成したプロジェクトファイルpro1-1.vcprojをpro1-3フォルダの中にコピーする。プロジェクトファイルの名前をpro1-3.vcprojに変更する。 もし、pro1-1.vcprojがない場合はここをクリックしてダウンロードする。
- pro1-1.vcprojをVisual C++で開く。ソリューションエクスプローラーの中のフォルダ名がpro1-1になっているので、カーソールを当て右マウスボタンをクリックして「名前の変更(M)」を選択し、pro1-3に名前を変更する。
- pro1-3の「ソースファイル」のhello.cppにカーソールを当て、右マウスボタンをクリックして、「削除(V)」を選択しhello.cppを削除する。
- 「ソースファイル」にカーソールを当て、右マウスボタンをクリックして、「追加(D)」→「既存の項目(G)」を選択する。
- 「既存項目の追加」ウインドウが開くのでmonoBot.cppを選択し、「追加(A)」ボタンをクリックする。
- ビルドする。つまり、「pro1-3のビルド(U)」を選択する。すると、すぐにソリューションファイルpro1-3.slnを保存するよう聞かれるので「保存(S)」をクリックする。
- 成功するとDebugフォルダが作成され、その中にpro1-3.exeができる。
- ダブルクリックして実行する。
- これで、本当のおしまい。お疲れ様!
追 記 プログラム1.1用以外のプロジェクトファイルもRoboCupジャパンオープンが終わったら時間を見つけて作ります。もう少々お待ちを!
2008-4-16: 間違える可能性のある部分を修正(悩める初心者さんありがとう!)
2008-4-15: カット&ペーストに対応
2008-3-14: 初投稿
コメント
初心者Aさん、
御指摘どうもありがとうございます。非常に助かります。
なお、この記事はODE0.9以下用ですので、ODE0.10.0以上は以下の記事をご覧ください。
なお、ODE0.10.0からビルドシステムが変更になり、単精度インストールと倍精度インストールではライブラリ名が変更になりました。
http://demura.net/wordpress/tutorials/ode2
でむ
お世話になっております。
このサイトは非常に丁寧に書いてあり
すごく参考になりました♪
しかし、
E. ODE本のサンプルプログラムをビルドする方法
i の項目にて、リンクするライブラリの名前が
間違っている可能性があります。
コピー用とされている部分をそのままコピーすると
その名前のdll ファイルはありませんとコンパイル時に
怒られてしまいました。
そこで直接ファイルから名前を
コピーしてきたところうまくいきました。
自分のように書いてある通りにしか出来ないくらい
初心者だとつまずいてしまうかもしれないと思い
ここに書かせていただきました。
確認の程、よろしくお願いします。
skasaiさん、
解決してなによりです。私も分かりかねていたので安心しました。
でむ
下のリンクされない件,無事解決しました.
リンクされないのだから,ode.lib か ode.dll がVisualC++から呼び出せていないのだろう,と思いみなおしました.
結局,C.3.h の設定時のタイプミスでした.
TriMesh を使用していないサンプルプログラムはビルドできていたので,なおさら解決に時間がかかりました.
以上,お騒がせしました.
WindowsXP + VisualC++2008EE + ODE-0.9 です.
上記の C-3.ライブラリの作成 で,例えば demo_trimesh を作成する際に,
_dCreateTriMesh
_dGeomTriMeshDataBuildSimple
_dGeomTriMeshDataCreate
がリンクされません.
どのあたりを確認すれば良いでしょうか?
ライブラリの作成で,たとえば,
demo_trimesh.cpp
のobjをリンクする際に,
dCreateTriMesh
dGeomTriMeshDataBuildSimple
dGeomTriMeshDataCreate
がリンクされず,実行ファイルが作成されません.
demo_moving_trimesh.cpp
demo_cyl.cpp
demo_basket.cpp
も,同様です.
どのあたりを確認したらよいでしょうか.
悩める初心者さん、
もう同じ間違いを別の初心者さんが起こさないように、記事の該当部分を訂正しました。
御投稿ありがとうございました。
でむ
でむさん、hogeさん
ご返信ありがとう御座いました。
本題の間違えたところですが、hogeさんの言う通り
コピー内容を間違えたのが原因でした。
似たような名前だったので、勘違いしてコピーしてしまったようです。
これからはこういったミスを減らしていきたいです。
悩める初心者さん、
恐れ入りますが、どこを間違ったか教えて頂けますか?他の多くの初心者さんも間違える可能性があります。
そのフィードバックを受けてこの記事を改定し、よりわかりやすくしたいと思います。
でむ
でむさん、ご返信ありがとうございました。
無事解決することができました。
当分の間、このサイトを通してODEとロボットシミュレーションの勉強を
したいと考えておりますので、無知な者ですが今後ともよろしくお願いします。
最初はMSYSで実行しておりましたが、今までVisual C++を使ってプログラムなどを作ってきましたので、これからはVisual C++2008を使って
進めていきたいと思います。
>>初心者さん
ひょっとして、C:¥ode-0.9¥lib¥に「.lib」ファイルでは無く、「.dll」ファイルをコピーしてはいませんか?
直前にbinフォルダへ、同名の.dllファイルをコピーしているので勘違いしてそのまま同様に貼り付けている可能性が考えられます。
違ってたらすいません。
初心者さん、
ode.libがないか?場所の指定を間違っている可能性があります。
以下の2点を確認してください。
1. ode-0.9のインストール先がCドライブのすぐ下になっているか?
なっていたら、C:¥ode-0.9¥lib¥ode.libがあるはずです。
2. このページの「ODEのインストール」→「ライブラリの作成」の中ほどにある以下を間違っていないか?カット&ペーストするといけません。
——————————————————————————————–
「ディレクトリを表示するプロジェクト(S)」で「ライブラリ ファイル」を選択し、
c:¥ode-0.9¥lib を追加し 「OK」をクリックする。
注意:上の文字列をカット&ペーストで貼り付けると失敗します。上の文字列は表示の関係で全角文字が含まれています。半角英数文字で入力しなければなりません。
———————————————————————————————-
また、説明のわかりにくい箇所がお有なら遠慮なく指摘してください。
でむ
でむさん、こんにちは
このHP通りに進めてきたのですが、最後の「pro1-1のビルド(U)」で
LINK : fatal error LNK1104: ファイル ‘ode.lib’ を開くことができません。
1 失敗とでてきてしまいexeファイルがでてきません。
思い当たる節がなく手詰まり状態です。
もし何か良い解決策がありましたら教えてもらえませんでしょうか。
ロウさん,
解決して何よりです.
このブログはWordPressというフリーのツールを作って作成しています.その環境では半角の¥(円記号)は\(バックスラッシュ)として表示されます.そこで,このブログでは馴染みの薄く,日本語キーボードでは表記のない\(バックスラッシュ)より全角の¥記号を使っているのでこの問題が生じてしまいます.
ロウさんのおかげで,カット&ペーストする方がいることがわかりました.ありがとうございます.
また,このブログに遊びにきてくださいね.
でむ
でむさん、
回答有難うございます。でむさんの回答にもありますように、このページをコピー&ペーストして入力していました。お騒がせしてすみません。おかげでプログラムを無事実行することができました。
ロウ
ロウさん、
ご質問ありがとうございます。ロウさんのおかげで、Visual C++でのインストール法を書くきっかけができました。
ご質問はode.dllの場所がシステムにはわからないことが原因と考えられます。
このページの環境変数の設定にある以下の設定は間違いないでしょうか?¥が全角になっていませんか?このページをコピー&ペーストして入力するとうまくいかないかもしれません。半角を確認してもう一度入力してみてください。
それでもうまくいかない場合は、試しにode.dllをpathの通っているところにコピーされてはいかがでしょうか?
でむ
でむさん、たびたびすみません。
報告し忘れたことがあったので、報告したいと思います。
一回目のビルドはエラーが出なく、実行すると前に書いたエラーが出てきました。しかし二回目のビルドは《’cmd.exe’ の起動中にエラーが発生しました。》というエラーが出てきて、実行するとこれも前に書いたエラーが出てきました。
もしよろしければ二回目のビルドに出てきたエラーメッセージの解決法も教えていただけたらと思います。
これからも精進していきたいと思っておりますので、なにとぞよろしくお願いします。
でむさん、こんにちは
大変わかりやすい講座有難うございます。
このHPを見ながらやったのですが、最後のpro1-1.exeを実行すると《ode.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。》というエラーメッセージが出ました。ためしにインストールし直したのですが、だめでした。どうすればよいのでしょうか?教えてください><
因みに私は2005でやっています。