卵型オブジェクトのPyBulletシミュレーション構築まとめ
目的
卵型オブジェクトをURDFで定義し、PyBullet上に表示・落下させるところまでを実現。
フォルダ構成(プロジェクト例: egg_cracker_rl
)
egg_cracker_rl/
├── rl_env/ # 仮想環境(Python venv)
├── egg_env/ # 卵URDFファイル保存用
│ └── egg.urdf
├── scripts/ # Pythonコード置き場
│ └── test_egg.py
egg.urdf(カプセル型の卵)
<?xml version="1.0" ?>
<robot name="egg">
<link name="egg_body">
<visual>
<geometry>
<capsule radius="0.05" length="0.12"/>
</geometry>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
<collision>
<geometry>
<capsule radius="0.05" length="0.12"/>
</geometry>
</collision>
<inertial>
<mass value="0.05"/>
<inertia ixx="1e-5" iyy="1e-5" izz="1e-5" ixy="0" ixz="0" iyz="0"/>
</inertial>
</link>
</robot>
test_egg.py(表示テスト用Pythonスクリプト)
import pybullet as p
import pybullet_data
import time
import os
# GUI起動
p.connect(p.GUI)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
# 地面と重力
p.setGravity(0, 0, -9.81)
p.loadURDF("plane.urdf")
# 卵URDFの読み込み
egg_path = os.path.join(os.path.dirname(__file__), "../egg_env/egg.urdf")
egg_id = p.loadURDF(egg_path, basePosition=[0, 0, 1.0])
# 表示ループ
for _ in range(240):
p.stepSimulation()
time.sleep(1.0 / 60)
# オプション: 5秒間表示維持
time.sleep(5)
p.disconnect()
その他メモ
- 仮想環境は
(rl_env)
表示時のみ使用可 egg.urdf
は拡張子が.xml
のままでは不可(必ず.urdf
に)- オブジェクトが見えないときは:
radius
とlength
を大きめにするbasePosition
を高めに設定(例:[0, 0, 1.0]
)- カメラを回して周囲を探索
現在の状態
- PyBullet上で卵型オブジェクトの描画・落下を確認済み
- URDF構造・Pythonスクリプト・フォルダ構成まで完成
次のステップ候補
- 卵を掴むロボットアームの追加
- 卵をパカッと割る構造の設計(左右分割型)
- 強化学習タスク設計と環境整備