def load_scene_mesh(self): """ Load scene mesh """ filename = os.path.join(get_scene_path(self.scene_id), "mesh_z_up_downsampled.obj") if not os.path.isfile(filename): filename = os.path.join(get_scene_path(self.scene_id), "mesh_z_up.obj") collision_id = p.createCollisionShape( p.GEOM_MESH, fileName=filename, flags=p.GEOM_FORCE_CONCAVE_TRIMESH) if self.pybullet_load_texture: visual_id = p.createVisualShape(p.GEOM_MESH, fileName=filename) else: visual_id = -1 self.mesh_body_id = p.createMultiBody( baseCollisionShapeIndex=collision_id, baseVisualShapeIndex=visual_id) p.changeDynamics(self.mesh_body_id, -1, lateralFriction=1) if self.pybullet_load_texture: texture_filename = get_texture_file(filename) if texture_filename is not None: texture_id = p.loadTexture(texture_filename) p.changeVisualShape(self.mesh_body_id, -1, textureUniqueId=texture_id)
def main(): if len(sys.argv) > 1: model_path = sys.argv[1] else: model_path = os.path.join(get_model_path('Rs'), 'mesh_z_up.obj') p.connect(p.GUI) p.setGravity(0, 0, -9.8) p.setTimeStep(1. / 240.) # Load scenes collision_id = p.createCollisionShape(p.GEOM_MESH, fileName=model_path, meshScale=1.0, flags=p.GEOM_FORCE_CONCAVE_TRIMESH) visual_id = p.createVisualShape(p.GEOM_MESH, fileName=model_path, meshScale=1.0) texture_filename = get_texture_file(model_path) texture_id = p.loadTexture(texture_filename) mesh_id = p.createMultiBody(baseCollisionShapeIndex=collision_id, baseVisualShapeIndex=visual_id) # Load robots turtlebot_urdf = os.path.join(gibson2.assets_path, 'models/turtlebot/turtlebot.urdf') robot_id = p.loadURDF(turtlebot_urdf, flags=p.URDF_USE_MATERIAL_COLORS_FROM_MTL) # Load objects obj_visual_filename = os.path.join( gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple.obj') obj_collision_filename = os.path.join( gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple_vhacd.obj') collision_id = p.createCollisionShape(p.GEOM_MESH, fileName=obj_collision_filename, meshScale=1.0) visual_id = p.createVisualShape(p.GEOM_MESH, fileName=obj_visual_filename, meshScale=1.0) object_id = p.createMultiBody(baseCollisionShapeIndex=collision_id, baseVisualShapeIndex=visual_id, basePosition=[1.0, 0.0, 1.0], baseMass=0.1) for _ in range(10000): p.stepSimulation() p.disconnect()
def load_floor_planes(self): if self.is_interactive: for f in range(len(self.floors)): # load the floor plane with the original floor texture for each floor plane_name = os.path.join(get_model_path(self.model_id), "plane_z_up_{}.obj".format(f)) collision_id = p.createCollisionShape(p.GEOM_MESH, fileName=plane_name) visual_id = p.createVisualShape(p.GEOM_MESH, fileName=plane_name) texture_filename = get_texture_file(plane_name) if texture_filename is not None: texture_id = p.loadTexture(texture_filename) else: texture_id = -1 floor_body_id = p.createMultiBody( baseCollisionShapeIndex=collision_id, baseVisualShapeIndex=visual_id) if texture_id != -1: p.changeVisualShape(floor_body_id, -1, textureUniqueId=texture_id) floor_height = self.floors[f] p.resetBasePositionAndOrientation(floor_body_id, posObj=[0, 0, floor_height], ornObj=[0, 0, 0, 1]) # Since both the floor plane and the scene mesh have mass 0 (static), # PyBullet seems to have already disabled collision between them. # Just to be safe, explicit disable collision between them. p.setCollisionFilterPair(self.mesh_body_id, floor_body_id, -1, -1, enableCollision=0) self.floor_body_ids.append(floor_body_id) else: # load the default floor plane (only once) and later reset it to different floor heiights plane_name = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml") floor_body_id = p.loadMJCF(plane_name)[0] p.resetBasePositionAndOrientation(floor_body_id, posObj=[0, 0, 0], ornObj=[0, 0, 0, 1]) p.setCollisionFilterPair(self.mesh_body_id, floor_body_id, -1, -1, enableCollision=0) self.floor_body_ids.append(floor_body_id)