Pybulletでマルチシミュレーションを行う
深層強化学習の研究をしていると,pybulletを物理シミュレータとして,よく使います.
公式ドキュメントには,シミュレータは1つで動かすことを前提に書かれています.
しかしA3CやPPOなどのプログラムでは,複数エージェントで動かしたいことが多いと思います.
そこで今回は,pybulletでマルチシミュレーションをする方法を調べました.
解決策
解決策は,このイシューに書いてある通りです. github.com
以下のソースコードように,BulletClient
関数により,複数のシミュレータを動かす事ができます.
import pybullet_utils.bullet_client as bc import pybullet import pybullet_data p0 = bc.BulletClient(connection_mode=pybullet.DIRECT) p0.setAdditionalSearchPath(pybullet_data.getDataPath()) p1 = bc.BulletClient(connection_mode=pybullet.DIRECT) p1.setAdditionalSearchPath(pybullet_data.getDataPath()) pgui = bc.BulletClient(connection_mode=pybullet.GUI) p0.loadURDF("r2d2.urdf") p1.loadSDF("stadium.sdf") print(p0._client) print(p1._client) print("p0.getNumBodies()=",p0.getNumBodies()) print("p1.getNumBodies()=",p1.getNumBodies()) while (1): p0.stepSimulation() p1.stepSimulation() pgui.stepSimulation()
注意点としては,import pybullet_utils.bullet_client as bc
にしないと,bc.BulletClient
が使えないことです.
多分僕のpythonに関する知識不足ですが,pybullet_utils.bullet_client.BulletClient()
だと動かなかったです.