pybullet机器人仿真环境搭建 2.载入.urdf, .obj等格式的模型
前言
- 前言
- 创建仿真环境
- 载入urdf格式模型
- 载入obj格式模型
- 运行
- 效果
本篇记录在pybullet中载入.urdf和.obj格式的模型。
创建仿真环境还是根据上篇的流程,连接服务端、加载资源路径、关闭渲染和GUI、设置重力、实时仿真:
import time
import pybullet
import pybullet_data
if __name__ == '__main__':
client = pybullet.connect(pybullet.GUI)
pybullet.setAdditionalSearchPath(pybullet_data.getDataPath())
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_RENDERING, 0)
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_GUI, 0)
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_TINY_RENDERER, 0)
pybullet.setGravity(0, 0, -9.8)
pybullet.setRealTimeSimulation(1)
载入urdf格式模型
urdf是最常见的机器人模型定义格式了,一般包含模型的几何结构、动力学模型和碰撞属性,因此常用于场景和机器人模型。在pybullet中的导入也非常简单,只要确定模型的路径以及在环境中的摆放位姿:
# 载入urdf格式是场景
pybullet.loadURDF("plane100.urdf", useMaximalCoordinates=True)
# 载入urdf格式的机器人
r_ind = pybullet.loadURDF('r2d2.urdf', (3, 1, 1), pybullet.getQuaternionFromEuler([0, 0, 0.785]))
返回index,可用于后续获取仿真环境中模型的各种信息。
载入obj格式模型obj格式模型也很常见,但是.obj模型只包括模型的几何结构,不包含动力学模型和碰撞属性,一般用作仿真环境中的场景物体。
由于obj模型不带碰撞属性,因此pybullet载入时需要为obj格式文件同时加载外观,并赋予碰撞属性,这里以pybullet_data文件夹中自带的sphere_smoth.obj模型为例:
# 视觉属性
visual_ind = pybullet.createVisualShape(
shapeType=pybullet.GEOM_MESH,
fileName="sphere_smooth.obj",
rgbaColor=[1, 1, 1, 1],
specularColor=[0.4, 0.4, 0],
visualFramePosition=[0, 0, 0],
meshScale=[1, 1, 1])
# 碰撞属性
collision_ind = pybullet.createCollisionShape(
shapeType=pybullet.GEOM_MESH,
fileName="sphere_smooth.obj",
collisionFramePosition=[0, 0, 0],
meshScale=[1, 1, 1])
# 从视觉和碰撞属性中创建模型
pybullet.createMultiBody(
baseMass=1,
baseCollisionShapeIndex=collision_ind,
baseVisualShapeIndex=visual_ind,
basePosition=[0, 0, 1],
useMaximalCoordinates=True)
分别载入视觉形状和碰撞属性后,再通过这两个创建模型。其中createMultiBody
可以通过参数设置模型的质量、重心、位置、惯性等等,具体可以参考官方文档api。
最后开启渲染并循环迭代:
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_RENDERING, 1)
while True:
time.sleep(1. / 240.)
效果