本記事では、 Pythonによる物理シミュレーション環境PyBullet のインストールと基本操作について紹介します。
PyBulletを使用することで、Pythonの豊富なライブラリを使った多様なシミュレーションを行うことができます。
ぜひ、Pythonで行う物理シミュレーションに興味がある方は、試してみてください。
PyBulletのインストール
Pybulletのインストールは、コマンド操作によって行います。Pythonとpipがすでにインストールされている前提で進めていきます。
まだPython及びpipをインストールされていない方は、Python及びpipのインストールから行ってください。
まずはコマンドプロンプトを開き、以下のコマンドを実行してください。
python -m pip install --upgrade pip
pipコマンドとは、Pip Install Packagesの略称であり、pythonに公式に登録されたパッケージをインストールするためのものです。
これをアップグレードしておかないと、古いバージョンのPybulletがインストールされる可能性があります。pipコマンドをアップグレードしたら、Pybulletをインストールしましょう。
(Windowsの場合)
pip install pybullet
(Linuxの場合)
sudo pip install pybullet
コマンドプロンプトに “Installing collected packages: pybullet” と表示されれば、正しくインストールが開始されています。
しばらく待ち、 “Successfully installed pybullet-x.x.x(バージョン)” と表示されれば、インストール完了になります。
環境の設定
インストールが完了したら、実際にPybulletを利用して物理エンジンに接続していきましょう。Pythonファイルを作成します。本書ではスクリプト名を“pybullet-project.py”とします。注意点として、名前をインポートするライブラリ名と同じにすると、スクリプト実行時にエラーとなるため、 作成するスクリプトに“pybullet.py”といった名前を付けることは避けましょう。
スクリプトを作成したら、さっそくコードを書いていきます。まずはPybulletライブラリを読み込みましょう。
import pybullet as p
基礎的な解説になりますが、“as”はライブラリ名を変えて利用できるようにするためのものです。
“import A(ライブラリ) as B(変更名)”とすることで、AというライブラリをBという名前で使用することができるようになります。
今回の場合であれば、pybulletをpという名前で利用できるようにしています。Pybulletライブラリを利用する際、毎回pybulletと打つのは大変なので、pと省略します。
次に、pybullet_dataをインポートします。
import pybullet_data
pybullet_dataには、サンプルのロボットや床など、便利なデータが入っています。
以上の2つのライブラリをインポートしたら、物理エンジンに接続するコードを書いていきます。
物理エンジンに接続するには connect関数 を使います。この関数は引数に“p.GUI”と入れることで、GUI (シミュレーション画面表示・キーボード操作)付きの物理エンジンに接続することができます。
一方、“p.DIRECT”と入れると、GUIなしの物理エンジンに接続することができます。”p.DIRECT”は、パソコンの計算負担を減らすため、強化学習を行う際に使用します。
ここでは、GUI付きの物理エンジンに接続していきましょう。
physicsClient = p.connect(p.GUI)
さきほど、pybullet_dataには様々なモデルが入っていると説明しました。
しかしそのままでは、pybullet_data内のモデル使用することができません。パスを通すことで、pybullet_dataのを利用するためのコードを書きます。
p.setAdditionalSearchPath(pybullet_data.getDataPath())
パスを通したら、さっそくpybullet_dataから床のデータを利用しましょう。床のデータはURDFファイルの形式で記述されています。
URDFファイルとは、ロボットなどの構造を記述するために使われるマークアップ言語(タグで囲むことで構造を表現)のことです。 URDFファイルを読み込むためには、loadURDF関数 を利用します。
引数に読み込むファイル名を入れます。床のデータは“plane.urdf”です。
planeID = p.loadURDF(“plane.urdf”)
環境設定の仕上げに、重力をセットしましょう。 setGravity関数 を利用します。
引数は3つであり、それぞれx、y、z方向に対応しています。重力加速度はz方向に-9.8m/s2なので、1、2つ目の引数に0、3つ目の引数に-9.8と入れます。
p.setGravity(0, 0, -9.8)
以上で基本的な環境の設定は完了になります。
実際に、while文の中で stepSimulation関数を実行することで、シミュレーションを動かしてみましょう。
while True:
p.stepSimulation()
次の画面が表示されれば成功です。
まとめ
以上がPyBulletの導入と基本になります。
機械学習やロボティクスと組み合わせることで、高度なシミュレーションを行うことができます。
ぜひ、想像力を膨らませて、色々なシミュレーションに挑戦してみてください!
コード全文
import pybullet as p
import pybullet_data
physicsClient = p.connect(p.GUI) # 物理エンジンに接続
p.setAdditionalSearchPath(pybullet_data.getDataPath()) # パスを追加
p.setGravity(0, 0, -9.8) # 重力の設定
planeID = p.loadURDF("plane.urdf") # 床の読み込み
# シミュレーションループ
while True:
p.stepSimulation()