本記事では、 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(バージョン)” と表示されれば、インストール完了になります。

comand_successed.png

環境の設定

インストールが完了したら、実際に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.png

まとめ

以上が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()