예제 #1
0
def geometryFromAffordance(aff):

    if isinstance(aff, affordanceitems.SphereAffordanceItem):
        radius = aff.getProperty('Radius')
        return urdf.Sphere(radius=radius)

    if isinstance(aff, affordanceitems.BoxAffordanceItem):
        dimensions = aff.getProperty('Dimensions')
        return urdf.Box(size=dimensions)

    if isinstance(aff, affordanceitems.CylinderAffordanceItem):
        return urdf.Cylinder(length=aff.getProperty('Length'),
                             radius=aff.getProperty('Radius'))

    if isinstance(aff, affordanceitems.CapsuleAffordanceItem):
        return urdf.Cylinder(length=aff.getProperty('Length'),
                             radius=aff.getProperty('Radius'))

    if isinstance(aff, affordanceitems.CapsuleRingAffordanceItem):
        raise Exception('not supported yet')

    if isinstance(aff, affordanceitems.MeshAffordanceItem):
        filename = aff.getProperty('Filename')
        filename = affordanceitems.MeshAffordanceItem.getMeshManager(
        ).getFilesystemFilename(filename)
        return urdf.Mesh(filename=filename, scale=[1.0, 1.0, 1.0])
def default_collision(geometry=None, origin=None):
    """ Return default collision """
    if geometry is None:
        geometry = urdf.Box([0.05, 0.05, 0.05])
    if origin is None:
        origin = urdf.Pose([-1, 0, 0.5], [0, 0, 0])
    return urdf.Collision(geometry=geometry, origin=origin)
예제 #3
0
 def from_world_body(cls, world_body, *args, **kwargs):
     """
     :type world_body: giskard_msgs.msg._WorldBody.WorldBody
     :rtype: URDFObject
     """
     links = []
     joints = []
     if world_body.type == world_body.PRIMITIVE_BODY or world_body.type == world_body.MESH_BODY:
         if world_body.shape.type == world_body.shape.BOX:
             geometry = up.Box(world_body.shape.dimensions)
         elif world_body.shape.type == world_body.shape.SPHERE:
             geometry = up.Sphere(world_body.shape.dimensions[0])
         elif world_body.shape.type == world_body.shape.CYLINDER:
             geometry = up.Cylinder(
                 world_body.shape.dimensions[
                     world_body.shape.CYLINDER_RADIUS],
                 world_body.shape.dimensions[
                     world_body.shape.CYLINDER_HEIGHT])
         elif world_body.shape.type == world_body.shape.CONE:
             raise TypeError(u'primitive shape cone not supported')
         elif world_body.type == world_body.MESH_BODY:
             geometry = up.Mesh(world_body.mesh)
         else:
             raise CorruptShapeException(
                 u'primitive shape \'{}\' not supported'.format(
                     world_body.shape.type))
         # FIXME test if this works on 16.04
         try:
             link = up.Link(world_body.name)
             link.add_aggregate(
                 u'visual',
                 up.Visual(geometry,
                           material=up.Material(u'green',
                                                color=up.Color(0, 1, 0,
                                                               1))))
             link.add_aggregate(u'collision', up.Collision(geometry))
         except AssertionError:
             link = up.Link(world_body.name,
                            visual=up.Visual(geometry,
                                             material=up.Material(
                                                 u'green',
                                                 color=up.Color(0, 1, 0,
                                                                1))),
                            collision=up.Collision(geometry))
         links.append(link)
     elif world_body.type == world_body.URDF_BODY:
         o = cls(world_body.urdf, *args, **kwargs)
         o.set_name(world_body.name)
         return o
     else:
         raise CorruptShapeException(
             u'world body type \'{}\' not supported'.format(
                 world_body.type))
     return cls.from_parts(world_body.name, links, joints, *args, **kwargs)
예제 #4
0
 def from_object_state(cls, object_state, *args, **kwargs):
     """
     :type world_body: knowrob_objects.msg._ObjectState.ObjectState
     :rtype: URDFObject
     """
     links = []
     joints = []
     shape = [object_state.size.y,
              object_state.size.x,
              object_state.size.z]
     if object_state.has_visual and object_state.mesh_path == u'':
         geometry = up.Box(shape)
     elif object_state.has_visual:
         geometry = up.Mesh(object_state.mesh_path)
     else:
         raise CorruptShapeException(u'object state has no visual')
     link = up.Link(object_state.object_id,
                    visual=up.Visual(geometry, material=up.Material(u'green', color=up.Color(0, 1, 0, 1))),
                    collision=up.Collision(geometry))
     links.append(link)
     return cls.from_parts(object_state.object_id, links, joints, *args, **kwargs)
def default_visual():
    return urdf.Visual(geometry=urdf.Box([0.05, 0.05, 0.05]),
                       material=urdf.Material(name="red"),
                       origin=urdf.Pose([-1, 0, 0.5], [0, 0, 0]))