PyODEの開発環境構築チュートリアル

Windows11環境でVisual Studio2022を利用して

ODE-0.16.4とPythonをバインディングする方法


tutorial2.pyの実行例


tutorial2.pyは、ODE-0.16.4付属のPyODE
で書かれたサンプルファイルです。tutori
al2.pyは、二重振り子をシミュレーション
します。tutorial2.pyは、コードを修正す
ること無く実行出来ました。また、tutori
al2.pyを実行するには、動画表示用のPyga
meのインストールが必要です。

tutorial3.py(コード修正有)の実行例


 tutorial3.pyは、ODE-0.16.4付属のPyODE
で書かれたサンプルファイルです。衝突検出
をシミュレーションします。コードを修正し
て実行しました。
 1つ目の修正は、「表示画面の作成」部
分です。下記のように、188行目のコードに
「b」を加えて、文字列をbyte列に変換しま
した。 

glutCreateWindow (b"testode")
 2つ目の修正は、「衝突検出」部分です。269行目~277行目のコードを 下記のコードに書き換えました。衝突検出を行うnear_callback関数を直 接使うように修正しました。そして、全てのオブジェクトに対して衝突検 出するために、二重forループの中にnear_callback関数を置きました。
for i in range(n):
for g1 in geoms:
for g2 in geoms:
near_callback((world,contactgroup), g1, g2)
for g1 in geoms:
near_callback((world,contactgroup), g1, floor)
# Simulation step
world.step(dt/n)
# Remove all contact joints
contactgroup.empty()
修正前のコードではspace.collide()が使われていましたが、環境 構築時のエラー回避のために、ode.pyxの3559行目のdSpaceCollide() 関数と4463行目のdSpaceCollide2()関数をコメントアウトしたので、 space.collide()は、使えなくなっています。また、tutorial3.pyを 実行するには、3D動画表示用のPyOpenGLのインストールが必要です。

Visual Studio2022でODEをビルドしてDLLファイルとLIBファイルを作成


・Dドライブ直下にode-0.16.4フォルダをコピーします。
・コマンドプロンプトで、下記のようにpremake4.exeファイルを実行します。

D:\ode-0.16.4\build>premake4.exe --with-tests --with-demos vs2010

・「D:\ode-0.16.4\build\vs2010\ode.sln」が作成されるので、ode.slnファイルを開きます。
・VisualStudio作業画面の上部の「ビルド」タブの下にある「Win32」の欄から「構成マネージャ」を選びます。
・「構成マネージャ」の「アクティブソリューションプラットホーム」欄から「新規作成」を選びます。
・「新しいプラットホーム・・・」から「x64」を選びます。「ビルド」タブの下にある「Win32」の欄が「x64」に変わります。
・VisualStudio作業画面右側の「ソリューションエクスプローラー」の中にある、下から二番目の「ode」という名前のプロジェクト
をクリックして選択します。
・VisualStudio作業画面の上部の「プロジェクト」タブをクリックし、「プロパティ」をクリックします。
・「odeプロパティページ」の「構成プロパティ」の「全般」の「構成の種類」を「ダイナミック ライブラリ (.dll)」にし、「ode
プロパティページ」の「OK」ボタンを押します。
・VisualStudio作業画面の上部の「ビルド」タブをクリックして、「odeのビルド」をクリックすると複数のDLLファイルとLIBファイ
ルが作成されます。
・PyODEの環境構築で使うDLLファイルは、「D:\ode-0.16.4\build\vs2010\x64\DebugDoubleDLL」に作成されるode_doubled.dllファ
イルを使います。LIBファイルは、「D:\ode-0.16.4\lib\DebugDoubleDLL」に作成されるode_doubled.libファイルを使います。


DLLファイルとLIBファイルを使用してsetup.pyをビルド


前もってPythonとCythonとpkg-configとWindows SDKをインストールする必要があります。今回使ったバージョンは、Python 3.12.7
とCython 3.0.11です。

まず、「D:\ode-0.16.4\bindings\python」に、
「D:\ode-0.16.4\build\vs2010\x64\DebugDoubleDLL」に作成されたode_doubled.dllファイルと
「D:\ode-0.16.4\lib\DebugDoubleDLL」に作成されたode_doubled.libファイルをコピーします。
次に、コマンドプロンプトを開いて、下記のように実行していきます。

D:\>path=%path%;c:\pkg-config\bin
D:\>set include=%include%;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt
D:\>set include=%include%;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared
D:\>set include=%include%;D:\ode-0.16.4\include
D:\>set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64
D:\>set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64
D:\>set Path=%Path%;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64
D:\>set PKG_CONFIG_PATH=D:\ode-0.16.4
 次に、「D:\ode-0.16.4\bindings\python」にあるode.pyxの3559行目のdSpaceCollide()関数と4463行目のdSpaceCollide2()関数 をコメントアウトします。  次に、「D:\ode-0.16.4」にあるode.pc.inの名前をode.pcに変更して、3行目と10行目を下記のように書き換えます。 3行目:libdir = ode_doubled.lib 10行目:Libs: ${libdir}  次に、コマンドプロンプトで、下記のようにsetup.pyをビルドします。 D:\ode-0.16.4\bindings\python>python setup.py build_ext 「D:\ode-0.16.4\bindings\python」にode.cファイルが作成され、コマンドプロンプトに「#error: You must #define dSINGLE or dDOUBLE」が表示されます。  次に、「D:\ode-0.16.4\bindings\python」に作成されたode.cファイルの先頭(21行目)に下記のコードを追加します。 #define dDOUBLE もう一度、コマンドプロンプトで、下記のようにsetup.pyをビルドします。 D:\ode-0.16.4\bindings\python>python setup.py build_ext 「D:\ode-0.16.4\bindings\python\build\lib.win-amd64-cpython-312」にode.cp312-win_amd64.pydファイルが作成されます。 ode.cp312-win_amd64.pydは、PyODEのコードを実行するのに必要なファイルです。

DLLファイルとpydファイルを使用してPyODEのコードを含むPythonファイルを実行


ode.cp312-win_amd64.pydファイルとode_doubled.dllファイルを「D:\ode-0.16.4\bindings\python\demos」にコピーし、コマンド
プロンプトから下記のようにPythonで実行すると、PyODEのコードを含むtutorial2.pyファイルの実行が可能になります。

D:\ode-0.16.4\bindings\python\demos>python tutorial2.py

また、ode.pyxのコードを修正したため、space.collide()が使えなくなっていますが、代わりにnear_callback()関数を直接使って
衝突検出できます。