Пример #1
0
    def __init__(self, headless=False):
        if headless:
            self._client = p.connect(p.DIRECT)
        else:
            self._client = p.connect(p.GUI)
        p.setAdditionalSearchPath(pybullet_data.getDataPath())
        p.setGravity(0, 0, 0)
        self.dt = 1./240.

        # Load and texture plane with features
        planeId = p.loadURDF('plane.urdf')
        textureId = p.loadTexture('sim_files/blank-texture.png')
        p.changeVisualShape(planeId, -1, textureUniqueId=textureId)

        cubeId = p.loadURDF('cube.urdf', [0, 0, 1], p.getQuaternionFromEuler(
            [0, 0, 0]), globalScaling=1.5)
        textureId = p.loadTexture('sim_files/dot-texture.png')
        p.changeVisualShape(cubeId, -1, textureUniqueId=textureId)

        # Setup camera params
        self.width = 450
        self.height = 450
        self.fov = 45.0
        self.aspect = 1
        self.nearVal = 0.1
        self.farVal = 5.0
        self._projMatrix = p.computeProjectionMatrixFOV(fov=self.fov,
                                                        aspect=self.aspect,
                                                        nearVal=self.nearVal,
                                                        farVal=self.farVal)

        self.camPosition = np.array([-0.5, 0.5, 4.])
        self.targetPosition = np.array([0., 0., 0.])
        self.upVector = np.array([0., 1., 0.])
Пример #2
0
    def loadModels(self):
        p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0)
        p.setGravity(0, 0, -9.81)
        #        p.setPhysicsEngineParameter(numSolverIterations=self.numSolverIterations)
        #p.setTimeStep(self.fixedTimeStep)

        orn = p.getQuaternionFromEuler([math.pi / 30 * 0, 0 * math.pi / 50, 0])
        p.setAdditionalSearchPath(pybullet_data.getDataPath())
        planeUid = p.loadURDF("plane_transparent.urdf", [0, 0, 0], orn)
        p.changeDynamics(planeUid, -1, lateralFriction=1)
        texUid = p.loadTexture("concrete.png")
        p.changeVisualShape(planeUid, -1, textureUniqueId=texUid)
        if self.useStairs:
            stairsUid = p.loadURDF("../urdf/stairs_gen.urdf.xml", [0, -1, 0],
                                   orn)
        flags = p.URDF_USE_SELF_COLLISION
        quadruped = p.loadURDF(
            "../urdf/spotmicroai_gen.urdf.xml",
            self.init_position,
            self.init_oritentation,
            useFixedBase=self.useFixedBase,
            useMaximalCoordinates=self.useMaximalCoordinates,
            flags=flags)  #p.URDF_USE_IMPLICIT_CYLINDER)
        p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1)
        p.changeDynamics(quadruped, -1, lateralFriction=0.8)

        return quadruped
Пример #3
0
    def add_aruco_tag(
            self,
            tag_id=0,
            rgba=(0, 1, 0, 1),
            aruco_dict_id=cv2.aruco.DICT_4X4_50,
    ):
        aruco_dict = cv2.aruco.Dictionary_get(aruco_dict_id)
        tag = cv2.aruco.drawMarker(aruco_dict,
                                   tag_id,
                                   aruco_dict.markerSize + 2,
                                   borderBits=1)
        tag = np.pad(tag, (1, 1), mode='constant', constant_values=255)

        tag_size = tag.shape[0]
        texture_img = np.zeros((4 * tag_size, 4 * tag_size, 3), dtype=np.uint8)
        texture_img[..., :] = [255 * c for c in rgba[:3]]

        # flip image so aruco tag appears properly
        texture_img[-tag_size:, -tag_size:, :] = tag[::-1, :, np.newaxis]

        img = Image.fromarray(texture_img, mode="RGB")
        tmp_fname = f'tmp_cube_tex{tag_id}.png'
        img.save(tmp_fname)
        texture_id = pb.loadTexture(tmp_fname)
        pb.changeVisualShape(self.id,
                             -1,
                             rgbaColor=(1, 1, 1, rgba[-1]),
                             textureUniqueId=texture_id,
                             physicsClientId=self.client)
        os.remove(tmp_fname)
Пример #4
0
    def make_box(self,
                 size,
                 position=[0, 0, 0],
                 orientation=[0, 0, 0, 1],
                 mass=0,
                 tex=None,
                 color=None,
                 tag=None,
                 **kwargs):
        cid = pb.createCollisionShape(pb.GEOM_BOX,
                                      halfExtents=np.array(size) * 0.5)
        vid = pb.createVisualShape(pb.GEOM_BOX,
                                   halfExtents=np.array(size) * 0.5)
        id = pb.createMultiBody(mass,
                                baseCollisionShapeIndex=cid,
                                baseVisualShapeIndex=vid,
                                basePosition=position,
                                baseOrientation=orientation)
        if color is not None:
            pb.changeVisualShape(id, -1, rgbaColor=color)
        if tex is not None:
            if type(tex) is str:
                tex = pb.loadTexture(tex)
            pb.changeVisualShape(id, -1, textureUniqueId=tex)
        if len(kwargs):
            pb.changeDynamics(id, -1, **kwargs)

        if tag is not None:
            self.__tag_map[id] = tag
        return id
    def create_object(self):
        random_id = random.randint(0, 999)

        visual_id = pb.createVisualShape(
            shapeType=pb.GEOM_MESH,
            fileName=f'random_urdfs/{random_id:03}/{random_id:03}.obj',
            rgbaColor=None,
            meshScale=[0.1, 0.1, 0.1])

        collision_id = pb.createCollisionShape(
            shapeType=pb.GEOM_MESH,
            fileName=f'random_urdfs/{random_id:03}/{random_id:03}_coll.obj',
            meshScale=[0.1, 0.1, 0.1])

        link_id = pb.createMultiBody(
            baseMass=1.0,
            baseCollisionShapeIndex=visual_id,
            baseVisualShapeIndex=collision_id,
            basePosition=[0, 0, 3],
            baseOrientation=pb.getQuaternionFromEuler([0, 0, 0]))

        texture_paths = glob.glob(os.path.join('dtd', '**', '*.jpg'), recursive=True)
        random_texture_path = texture_paths[random.randint(0, len(texture_paths) - 1)]
        texture_id = pb.loadTexture(random_texture_path)
        pb.changeVisualShape(link_id, -1, textureUniqueId=texture_id)

        self._loaded_objects.append(link_id)
Пример #6
0
 def add_mesh(self,
              path="./data/chair/",
              mesh_name="chair.obj",
              tex_name="diffuse.tga",
              position=[0, 0, 1],
              orientation=[0.7071068, 0, 0, 0.7071068],
              scale=0.1):
     shift = [0, -0.02, 0]
     meshScale = [scale, scale, scale]
     # the visual shape and collision shape can be re-used by all createMultiBody instances (instancing)
     visualShapeId = p.createVisualShape(shapeType=p.GEOM_MESH,
                                         fileName=path + mesh_name,
                                         rgbaColor=[1, 1, 1, 1],
                                         specularColor=[0.4, .4, 0],
                                         visualFramePosition=shift,
                                         meshScale=meshScale)
     collisionShapeId = p.createCollisionShape(shapeType=p.GEOM_MESH,
                                               fileName=path + mesh_name,
                                               collisionFramePosition=shift,
                                               meshScale=meshScale)
     rangex = 5
     rangey = 5
     bodyUid = p.createMultiBody(baseMass=0,
                                 baseInertialFramePosition=[0, 0, 0],
                                 baseCollisionShapeIndex=collisionShapeId,
                                 baseVisualShapeIndex=visualShapeId,
                                 basePosition=position,
                                 baseOrientation=orientation,
                                 useMaximalCoordinates=True)
     if tex_name != None:
         texUid = p.loadTexture(path + tex_name)
         p.changeVisualShape(bodyUid, -1, textureUniqueId=texUid)
     return bodyUid
Пример #7
0
  def _reset(self):
    #print("KukaGymEnv _reset")
    self.terminated = 0
    p.resetSimulation()
    p.setPhysicsEngineParameter(numSolverIterations=150)
    p.setTimeStep(self._timeStep)
    texUid = p.loadTexture("./cube_new/aaa.png")
    cube_objects = p.loadSDF("./cube_new/model.sdf")
    self.cubeId = cube_objects[0]
    p.changeVisualShape(cube_objects[0], -1,rgbaColor =[1,1,1,1])
    p.changeVisualShape(cube_objects[0], -1, textureUniqueId = texUid)
    p.loadURDF(os.path.join(self._urdfRoot,"plane.urdf"),[0,0,-1])
    self.tray = p.loadURDF(os.path.join(pybullet_data.getDataPath(),"tray/tray.urdf"), 0.640000,0.075000,-0.190000,0.000000,0.000000,1.000000,0.000000)
    self.table = p.loadURDF(os.path.join(self._urdfRoot,"table/table.urdf"), 0.5000000,0.00000,-0.820000,0.000000,0.000000,0.0,1.0)
    #print("table:::",self.table)
    #print("tray:::",self.tray)
 
    #This is where the object spawn at random i should adjust this so it spawn at random position with specific area bound if reward increased
       
    xpos = 0.58
    ypos = 0.04
    ang = 3.14*0.5
    orn = p.getQuaternionFromEuler([0,0,ang])
    self.blockUid =p.loadURDF(os.path.join(self._urdfRoot,"block.urdf"), xpos,ypos,-0.15,orn[0],orn[1],orn[2],orn[3])


    #This where robot is reset i should modefy this to adjust height of end-effector
    p.setGravity(0,0,-10)
    self._kuka_hand = Kuka_Handlit(urdfRootPath=self._urdfRoot, timeStep=self._timeStep)
    self._envStepCounter = 0
    p.stepSimulation()
    self._observation = self.getExtendedObservation()
    return np.array([self._observation])
Пример #8
0
    def load_urdf(self):
        """Load the URDF of the field into the environment

        The field URDF comes with its own dimensions and
        textures, collidables. Note that this also calls 
        the method responsible for setting button joint IDs.
        """
        self.model_id = p.loadURDF(Utilities.gen_urdf_path("field/field.urdf"),
                                   useFixedBase=True)
        # Load the texture as well
        # Not done automatically for some reason
        p.changeVisualShape(self.model_id,
                            -1,
                            textureUniqueId=p.loadTexture(
                                Utilities.gen_urdf_path("field/field.png")))
        self.buttons.populate_joint_ids([1, 3, 5, 7, 9, 11, 13, 15, 17, 19])

        # TODO: replace with setJointMotorControlArray
        for b in self.buttons:
            p.setJointMotorControl2(self.model_id,
                                    b.joint_id,
                                    controlMode=p.POSITION_CONTROL,
                                    targetPosition=0.0,
                                    force=0.2,
                                    positionGain=0.8)
Пример #9
0
 def make_ball(self,
               radius,
               position=[0, 0, 0],
               mass=0,
               tex=None,
               color=None,
               tag=None,
               **kwargs):
     cid = pb.createCollisionShape(pb.GEOM_SPHERE, radius=radius)
     vid = pb.createVisualShape(pb.GEOM_SPHERE, radius=radius)
     id = pb.createMultiBody(mass,
                             baseCollisionShapeIndex=cid,
                             baseVisualShapeIndex=vid,
                             basePosition=position)
     if color is not None:
         pb.changeVisualShape(id, -1, rgbaColor=color)
     if tex is not None:
         if type(tex) is str:
             tex = pb.loadTexture(tex)
         pb.changeVisualShape(id, -1, textureUniqueId=tex)
     if len(kwargs):
         pb.changeDynamics(id, -1, **kwargs)
     if tag is not None:
         self.__tag_map[id] = tag
     return id
Пример #10
0
def load_rope_geometry_from_urdf(modelUrdfFile, texturePath=""):
    print("Loading urdf '{}'".format(modelUrdfFile))
    if (not os.path.exists(modelUrdfFile)):
        print("Failed to find model paths '{}'".format(modelUrdfFile))
        return RopeObj.INVALID_UID, np.array([])

    multiBodyId = ""
    if (modelUrdfFile.endswith(ModelFormats.Urdf)):
        multiBodyId = p.loadURDF(modelUrdfFile)
        print("(INFO) Loaded new model '{}'".format(multiBodyId))
    else:
        print("Unknown model format '{}'".format(modelUrdfFile))
        return RopeObj.INVALID_UID, np.array([])

    # Override textures
    if (texturePath != ""):
        p.changeVisualShape(multiBodyId, -1, textureUniqueId=p.loadTexture(texturePath))

    link_poses, _, _ = link_states(multiBodyId, p.getNumJoints(multiBodyId))
    linkPositions = link_poses[:, 0:3]
    if len(linkPositions) > 0:
        print("(INFO) Found {} links and {} joints".format(len(linkPositions), p.getNumJoints(multiBodyId)))
    else:
        print("Failed to get link states.")
        return RopeObj.INVALID_UID, np.array([])

    return multiBodyId, np.array(linkPositions)
Пример #11
0
def LoadModel(modelGeometryFile, modelCollisionFile="", texturePath=""):
    print("Loading urdf")
    if (not os.path.exists(modelGeometryFile)
            and not os.path.exists(modelCollisionFile)):
        print("Failed to find model paths")
        return

    meshScale = [0.1, 0.1, 0.1]
    visId = p.createVisualShape(shapeType=p.GEOM_MESH,
                                fileName=modelGeometryFile,
                                rgbaColor=None,
                                meshScale=meshScale)
    colId = p.createCollisionShape(shapeType=p.GEOM_MESH,
                                   fileName=modelCollisionFile,
                                   meshScale=meshScale)
    multiBodyId = p.createMultiBody(baseMass=1.0,
                                    baseCollisionShapeIndex=colId,
                                    baseVisualShapeIndex=visId,
                                    basePosition=MODEL_INITIAL_POS,
                                    baseOrientation=p.getQuaternionFromEuler(
                                        [0, 0, 0]))

    # Override textures
    p.changeVisualShape(multiBodyId,
                        -1,
                        textureUniqueId=p.loadTexture(textPath))
    return
Пример #12
0
    def apply_texture(self, obj_id, patternPath="envs/dtd/images"):
        """
        Apply texture to pybullet object

        Parameters:
            :param obj_id: (int) ID obtained from `p.loadURDF/SDF/..()`
            :param path: (str) Relative path to *.jpg (recursive) with textures
        """
        if patternPath is None:
            return

        if patternPath == self.textures_path:  # no change, can use cached value
            texture_paths = self.all_textures_
        else:
            pp = os.path.abspath(os.path.join(repodir, str(patternPath)))
            texture_paths = glob.glob(os.path.join(pp, '**', '*.jpg'),
                                      recursive=True)
        random_texture_path = texture_paths[random.randint(
            0,
            len(texture_paths) - 1)]
        textureId = p.loadTexture(random_texture_path)
        try:
            p.changeVisualShape(obj_id,
                                -1,
                                rgbaColor=[1, 1, 1, 1],
                                textureUniqueId=textureId)
        except:
            print("Failed to apply texture to obj ID:" + str(obj_id) +
                  " from path=" + str(pp))
Пример #13
0
    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)
Пример #14
0
def random_texture(fig):
    texture_paths = glob.glob(os.path.join('dtd', '**', '*.jpg'),
                              recursive=True)
    random_texture_path = texture_paths[random.randint(0,
                                                       len(texture_paths) - 1)]
    textureId = p.loadTexture(random_texture_path)
    p.changeVisualShape(fig, -1, textureUniqueId=textureId)
Пример #15
0
 def get_texture(self):
     if len(VisualRandomizer.loaded_textures
            ) < VisualRandomizer.max_textures:
         random_texture = random.choice(os.listdir(self.texture_dir))
         VisualRandomizer.loaded_textures.append(
             p.loadTexture(os.path.join(self.texture_dir, random_texture)))
         return VisualRandomizer.loaded_textures[-1]
     else:
         return random.choice(VisualRandomizer.loaded_textures)
Пример #16
0
 def init_table(self):
     table_path = os.path.join(self.env_root, 'urdf/table/table.urdf')
     self.table_id = p.loadURDF(
         table_path, [0.42, 0, 0], [0, 0, math.pi * 0.32, 1],
         globalScaling=0.6)  #,physicsClientId=self.physical_id)
     texture_path = os.path.join(
         self.env_root, 'texture/table_textures/table_texture.jpg')
     table_textid = p.loadTexture(texture_path)
     p.changeVisualShape(self.table_id, -1, textureUniqueId=table_textid)
Пример #17
0
def draw_bullet(shape, color, size, r, c, data):

    p.resetSimulation()
    #p.setRealTimeSimulation(True)
    p.setGravity(0, 9.8, GRAVITY)
    p.setTimeStep(dt)
    planeId = p.loadURDF("plane.urdf")

    sizes = ['small', 'big']
    colors = ['red', 'green', 'blue']
    shapes = ['sphere', 'cube', 'capsule']

    sizename = sizes[size]
    shapename = shapes[shape]
    colorname = colors[color]

    body_name = 'shapes/bullet_data/my_{}_{}_{}.urdf'.format(
        shapename, colorname, sizename)
    if size == 0:
        factor = 0.5
    else:
        factor = 1
    if shape == 2:
        body_name = 'shapes/bullet_data/my_{}_{}.urdf'.format(
            shapename, sizename)
    z_centre = 0.5 * factor

    cubeStartPos = [(r - 1), (c - 1), z_centre]
    cubeStartOrientation = p.getQuaternionFromEuler([3.14 / 2, 0, 0])

    botId = p.loadURDF(body_name, cubeStartPos, cubeStartOrientation)
    if shape == 2:
        textureId = p.loadTexture(
            'shapes/bullet_data/{}.png'.format(colorname))
        p.changeVisualShape(botId, -1, textureUniqueId=textureId)

    viewMatrix = p.computeViewMatrix(cameraEyePosition=[1.5, 1.5, 2],
                                     cameraTargetPosition=[0, 0, 0],
                                     cameraUpVector=[-1, -1, 1])
    projectionMatrix = p.computeProjectionMatrixFOV(fov=90.0,
                                                    aspect=1.0,
                                                    nearVal=0.1,
                                                    farVal=30.1)

    import time
    p.setRealTimeSimulation(1)
    st = 1500

    p.setGravity(0, 0, GRAVITY)

    width, height, rgbImg, depthImg, segImg = p.getCameraImage(
        width=30,
        height=30,
        viewMatrix=viewMatrix,
        projectionMatrix=projectionMatrix)
    data = np.array(rgbImg)
    return data
Пример #18
0
def add_obj(path_to_obj, 
            position, orientation,
            fix_base, scale, 
            base_mass, base_inertialframe_position, 
            texture_file=None, rgb=None):
    '''
    path_to_obj: str
    orientation: np.ndarray, (3,3) or (4,)
    scale: float
    fix_base: bool
    texture_file: str or None
    rgb: (float, float, float) or (3,) np.ndarray
    '''

    R = orientation

    assert isinstance(R, np.ndarray)
    if R.shape == (3,3):
        quat = R2quat(R)
    else:
        assert len(R) == 4
        quat = R 

    collision_shape_id = pb.createCollisionShape(shapeType=pb.GEOM_MESH, meshScale=np.full(3, scale), fileName=path_to_obj)
    visual_shape_id = pb.createVisualShape(shapeType=pb.GEOM_MESH, meshScale=np.full(3, scale), fileName=path_to_obj)
    if fix_base:
        # simply omitting baseMass makes it fixed object.
        bullet_body_id = pb.createMultiBody(
                            basePosition=position, baseOrientation=quat, 
                            baseCollisionShapeIndex=collision_shape_id, baseVisualShapeIndex=visual_shape_id,
                            )
    else:
        bullet_body_id = pb.createMultiBody(
                            baseMass=base_mass, baseInertialFramePosition=base_inertialframe_position,
                            basePosition=position, baseOrientation=quat,
                            baseCollisionShapeIndex=collision_shape_id, baseVisualShapeIndex=visual_shape_id,
                            )

    if texture_file is not None:
        texture_id = pb.loadTexture(texture_file)
    else:
        texture_id = None

    if rgb is not None:
        rgba = [c for c in rgb] + [1.]
    else:
        rgba = None

    if texture_id is not None and rgba is not None:
        pb.changeVisualShape(bullet_body_id, -1, textureUniqueId=texture_id, rgbaColor=rgba)
    elif texture_id is not None and rgba is None:
        pb.changeVisualShape(bullet_body_id, -1, textureUniqueId=texture_id)
    elif texture_id is None and rgba is not None:
        pb.changeVisualShape(bullet_body_id, -1, rgbaColor=rgba)

    return bullet_body_id
Пример #19
0
    def from_array(bitmap, client_id):
        """ Load a texture from memory and return a non-negative
        texture unique id if the loading succeeds. """

        # PyBullet can only load textures from file, so ...
        with tempfile.NamedTemporaryFile() as tmp_file:
            image = Image.fromarray(bitmap, 'RGB')
            image.save(tmp_file, 'PNG')
            tmp_file.flush()
            return pb.loadTexture(tmp_file.name, physicsClientId=client_id)
Пример #20
0
 def set_marker(self, dir_path, file, pic_file):
     tmp = os.getcwd()
     os.chdir(dir_path)
     # c = p.loadURDF(file, (0, 0, 1), useFixedBase=True)
     c = p.loadURDF(file, (0, 1, 0), useFixedBase=True, globalScaling=0.1)
     # for i in range(1, 6):
     #     p.loadURDF(file, (0.2*i, 1, 0), useFixedBase=True, globalScaling=0.1)
     os.chdir(tmp)
     x = p.loadTexture(pic_file)
     p.changeVisualShape(c, -1, textureUniqueId=x)
Пример #21
0
def floor(clientId, texture=False, wall=False):
    floorId = p.loadURDF('env/model/floor.urdf', physicsClientId=clientId)
    if texture:
        textureId = p.loadTexture(
            'env/model/texture/wood1.jpg', physicsClientId=clientId)
        p.changeVisualShape(
            floorId, -1, textureUniqueId=textureId, physicsClientId=clientId)
    if wall:
        p.loadURDF('samurai.urdf', physicsClientId=clientId)
    return floorId
Пример #22
0
    def add_drone(self, RobotController, name, image):
        if self.get_drone_by_name(name) is not None:
            raise Exception(f'drone with name "{name}" already exists')
        try:
            # create instance of controller
            controller = RobotController(self.enforce_motor_limits)

            # get color
            color = controller.get_color()
            assert (len(color) == 3)
            color.append(1.)

            # get label
            if image is not None:
                texture_id = pybullet.loadTexture(image)

            # load urdf
            id = pybullet.loadURDF(
                os.path.join('.', 'urdf', 'drone.urdf'),
                basePosition=np.array([0., 0., 0.3]),
                baseOrientation=pybullet.getQuaternionFromEuler([0., 0., 0.]),
                useFixedBase=0,
                flags=(pybullet.URDF_USE_IMPLICIT_CYLINDER
                       | pybullet.URDF_USE_INERTIA_FROM_FILE))

            # apply color and label
            pybullet.changeVisualShape(id, -1, rgbaColor=color)
            if image is None:
                pybullet.changeVisualShape(id, 1, rgbaColor=[1., 1., 1., 0.])
            else:
                pybullet.changeVisualShape(id,
                                           1,
                                           rgbaColor=[1., 1., 1., 0.75],
                                           textureUniqueId=texture_id)

            # set contact parameters
            pybullet.changeDynamics(id,
                                    -1,
                                    lateralFriction=1.0,
                                    spinningFriction=0.0,
                                    rollingFriction=0.0,
                                    restitution=0.5,
                                    contactDamping=-1,
                                    contactStiffness=-1)

            self.drones.append({
                'id': id,
                'module': None,
                'RobotController': RobotController,
                'name': name,
                'controller': controller,
            })
        except Exception as err:
            print(f'Failed to add {name} because of the following error:')
            print(f'\n==========\n{traceback.format_exc()}==========\n')
Пример #23
0
 def load(self, parent):
     self.parent = parent
     num_planes = p.getNumJoints(parent)
     self.joints = [-1] + list(range(num_planes))
     self.textures = []
     for j in self.joints:
         p.changeVisualShape(parent, j, rgbaColor=[1, 1, 1, 1])
         t = p.loadTexture(DATA_DIR + "tex256.png")
         self.textures.append(t)
         p.changeTexture(t, self.random_pixels(), self.w, self.h)
         p.changeVisualShape(parent, j, textureUniqueId=t)
Пример #24
0
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()
Пример #25
0
def set_texture(body, image_path):
    #if color is not None:
    #    set_color(body, color)
    assert image_path.endswith('.png')
    texture = p.loadTexture(image_path)
    assert 0 <= texture
    p.changeVisualShape(
        body,
        linkIndex=NULL_ID,
        shapeIndex=NULL_ID,  #rgbaColor=WHITE,
        textureUniqueId=texture,  #specularColor=(0, 0, 0),
        physicsClientId=get_client())
    return texture
Пример #26
0
    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)
Пример #27
0
 def init_plane(self):
     self.plane_id = self.p.loadURDF(os.path.join(self.env_root,
                                                  'urdf/table/plane.urdf'),
                                     [0.7, 0, 0],
                                     [0, 0, -math.pi * 0.02, 1],
                                     globalScaling=0.7)
     texture_path = os.path.join(self.opt.project_root, 'scripts', 'Envs',
                                 'texture/real_textures')
     texture_file = os.path.join(
         texture_path,
         random.sample(os.listdir(texture_path), 1)[0])
     self.textid = p.loadTexture(texture_file)
     self.p.changeVisualShape(self.plane_id, -1, rgbaColor=[1, 1, 1, 0.9])
     self.p.changeVisualShape(self.plane_id,
                              -1,
                              textureUniqueId=self.textid)
Пример #28
0
    def __init__(self):
        physicsClient = p.connect(p.GUI)
        p.setAdditionalSearchPath(pybullet_data.getDataPath())
        p.setGravity(0, 0, -9.81)
        planeId = p.loadURDF("plane.urdf")

        # load models from URDF
        lowerBallSpawnPos = [0, 0, 3]
        robotSpawnPos = [0, 0, 8]
        defaultOrientation = p.getQuaternionFromEuler([0, 0, 0])

        self.lower_ball_id = p.loadURDF(
            "../model_3d/urdf/lower_ball.urdf",
            lowerBallSpawnPos,
            defaultOrientation,
            flags=p.URDF_USE_INERTIA_FROM_FILE)
        self.robot_id = p.loadURDF(
            "../model_3d/urdf/robot.urdf",
            robotSpawnPos,
            defaultOrientation,
            flags=p.URDF_USE_INERTIA_FROM_FILE)

        # extract joint indices
        if p.getNumJoints(self.robot_id) != 2:
            print("robot does not have 2 joints!")
            exit()

        name_to_joint_idx = {}
        for i in range(p.getNumJoints(self.robot_id)):
            name_to_joint_idx.update({p.getJointInfo(self.robot_id, i)[1]: i})

        self.motor_x_idx = name_to_joint_idx['lateral_rotation_axis']
        self.motor_y_idx = name_to_joint_idx['primary_rotation_axis']

        # add texture for better visualization
        texUid = p.loadTexture("../model_3d/urdf/media/circles.png")

        p.changeVisualShape(self.lower_ball_id, -1, textureUniqueId=texUid)
        p.changeVisualShape(self.robot_id, -1, textureUniqueId=texUid)

        # load controller
        param = ModelParam()
        param.l = 1.0
        param.r1 = 3.0
        param.r2 = 2.0

        self.controller = Controller(param)
Пример #29
0
def create_textured_square(size,
                           color=None,
                           width=MAX_TEXTURE_WIDTH,
                           height=MAX_TEXTURE_WIDTH):
    body = load_model('models/square.urdf', scale=size)
    if color is not None:
        set_color(body, color)
    path = os.path.join(TEMP_DIR, 'texture.png')
    image = MAX_PIXEL_VALUE * np.ones((width, height, 3), dtype=np.uint8)
    import scipy.misc
    scipy.misc.imsave(path, image)
    texture = p.loadTexture(path)
    p.changeVisualShape(body,
                        NULL_ID,
                        textureUniqueId=texture,
                        physicsClientId=CLIENT)
    return body, texture
Пример #30
0
    def readTexture(self, texture):
        '''Convert the texture into the color format taken by pybullet'''

        if (texture[0] == '#'):
            r = float(
                self.hexToInt(texture[1]) * 16 +
                self.hexToInt(texture[2])) / 255.0
            g = float(
                self.hexToInt(texture[3]) * 16 +
                self.hexToInt(texture[4])) / 255.0
            b = float(
                self.hexToInt(texture[5]) * 16 +
                self.hexToInt(texture[5])) / 255.0
            color = [r, g, b, 1]
            return color
        else:
            textId = p.loadTexture(texture)
            return textId
Пример #31
0
import pybullet as p
from time import sleep
import matplotlib.pyplot as plt
import numpy as np

physicsClient = p.connect(p.GUI)

p.setGravity(0,0,0)
bearStartPos1 = [-3.3,0,0]
bearStartOrientation1 = p.getQuaternionFromEuler([0,0,0])
bearId1 = p.loadURDF("plane.urdf", bearStartPos1, bearStartOrientation1)
bearStartPos2 = [0,0,0]
bearStartOrientation2 = p.getQuaternionFromEuler([0,0,0])
bearId2 = p.loadURDF("teddy_large.urdf",bearStartPos2, bearStartOrientation2)
textureId = p.loadTexture("checker_grid.jpg")
#p.changeVisualShape(objectUniqueId=0, linkIndex=-1, textureUniqueId=textureId)
#p.changeVisualShape(objectUniqueId=1, linkIndex=-1, textureUniqueId=textureId)


useRealTimeSimulation = 1

if (useRealTimeSimulation):
	p.setRealTimeSimulation(1)

while 1:
	if (useRealTimeSimulation):
		camera = p.getDebugVisualizerCamera()
		viewMat = camera[2]
		projMat = camera[3]
		#An example of setting the view matrix for the projective texture.
		#viewMat = p.computeViewMatrix(cameraEyePosition=[7,0,0], cameraTargetPosition=[0,0,0], cameraUpVector=[0,0,1])
Пример #32
0
import pybullet as p
p.connect(p.GUI)
plane = p.loadURDF("plane.urdf")
visualData = p.getVisualShapeData(plane, p.VISUAL_SHAPE_DATA_TEXTURE_UNIQUE_IDS)
print(visualData)
curTexUid = visualData[0][8]
print(curTexUid)
texUid = p.loadTexture("tex256.png")
print("texUid=", texUid)

p.changeVisualShape(plane, -1, textureUniqueId=texUid)

for i in range(100):
  p.getCameraImage(320, 200)
p.changeVisualShape(plane, -1, textureUniqueId=curTexUid)

for i in range(100):
  p.getCameraImage(320, 200)