見出し画像

pybullet - Visual Studio 2022でビルド&実行 / Bullet Physics / Windows

物理エンジンBullet Physics(C++)をPythonから操作するpybulletの開発環境を作成する方法です。C++のビルド、Pythonのインストール、pybulletの実行、すべてVisual Studio 2022で!
動作確認はWindows10のみです。

用意するもの

  • Visual Studio 2022

  • Bullet Physics SDK

Visual Studio 2022のインストール

学生、個人なら無料です(2022/6/15)

必要な機能は

  • Python開発

  • C++によるゲーム開発

  • .NET デスクトップ開発(いらないかも)

VS2022インストール

Bullet Physics SDKの入手

GitHubから入手。下のページのSource code(zip)または、リポジトリーから
今回利用したのはPyBullet 3.2.4です。

Bullet Physicsのビルド

フォルダ名の変更
フォルダ名に . (ピリオド)があるとPythonのimportに失敗することがあったので bullet3-3.24⇒bullet3 とかに変更してください。

Pythonフォルダとバージョンの確認
pyblulletのビルドで使用します。
たぶんここのはず
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64
ここではない場合は探してください。python.exeやinclude/、libs/とかあるところです。
このバージョン(36_64⇒Python3.6 64bit)とPython環境のバージョンを一致させないとimportに失敗します。

Visual Studioプロジェクトファイルの生成
SDKのbatファイルはそのままでは使えないので、こちらに用意しました。
1行目はPythonフォルダのパスです。build.batとか適当に名前を付けて実行してください。作成場所はbullet3/(SDKのトップフォルダ)

set myvar=C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64

cd build3

premake4  --double --enable_stable_pd --enable_multithreading --midi --enable_static_vr_plugin --enable_openvr --enable_pybullet --python_include_dir="%myvar%/include" --python_lib_dir="%myvar%/libs"   --targetdir="../bin" vs2010

実行するとbullet3/build3/vs2010といフォルダが作成され、その中にソリューション、プロジェクトファイルが生成されます。
0_Bullet3Solution.slnをVS2022で開きます。
バージョン変換(プロジェクトの再ターゲット)のウインドウが表示されるので[OK]。

pybulletのビルド

pybulletのビルド

上にあるターゲット Release / x64 
pybulletの右クリックメニュー⇒ビルド
なんか色々表示されて最後に
==== 成功 xx、失敗 0、 ====
と表示されていれば成功です。

Python使用準備
bullet3/bin/pybullet_vs2010_x64_release.dllを
pybullet.pydに変更
このファイルのパスと
bullet3/examples/pybullet/gymのパス
をメモしておいてください。

hello_pybullet.pyの実行

VS2022で【新しいプロジェクトの作成】
テンプレートは「Python アプリケーション」
プロジェクトが作成できたら
bullet3/examples/pybullet/examples/hello_pybullet.py
の内容をpyファイルにコピペ

import pybullet as p
from time import sleep
import pybullet_data


physicsClient = p.connect(p.GUI)

p.setAdditionalSearchPath(pybullet_data.getDataPath())

p.setGravity(0, 0, -10)
planeId = p.loadURDF("plane.urdf")
cubeStartPos = [0, 0, 1]
cubeStartOrientation = p.getQuaternionFromEuler([0, 0, 0])
boxId = p.loadURDF("r2d2.urdf", cubeStartPos, cubeStartOrientation)
cubePos, cubeOrn = p.getBasePositionAndOrientation(boxId)

useRealTimeSimulation = 0

if (useRealTimeSimulation):
  p.setRealTimeSimulation(1)

while 1:
  if (useRealTimeSimulation):
    p.setGravity(0, 0, -10)
    sleep(0.01)  # Time in seconds.
  else:
    p.stepSimulation()

検索パスの追加
検索パスの右クリックメニュー
「フォルダーを検索パスに追加」
事前に調べておいたpybullet.pydとpybullet/gym
のパスを追加します。プロジェクトのプロパティー/デバッグ/検索パスでも編集できます。

hello_pybullet.py

開始ボタンで実行

hello_pybullet.pyの実行

こんな画面が表示されれば成功!

モジュールが見つからずに実行できない場合
フォルダ名にピリオドがないか
ビルドと実行環境のPythonバージョンが一致しているか
確認してください。

お疲れ様でした

これでBullet PhysicsをPythonから利用する環境の完成です。
自分が使い慣れている開発環境なので、VS2022だけで完結させてみました。

この記事が役に立ったという方は、サポートお願いします。今後の製作の励みになります。