from director import transformUtils
from director import affordanceitems
from urdf_parser_py import urdf
[docs]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])
[docs]def stringWithAffordanceId(inputStr, aff):
return inputStr % aff.getProperty('uuid')
[docs]def stringWithAffordanceName(inputStr, aff):
return inputStr % aff.getProperty('Name')
[docs]def colorFromAffordance(aff):
color = aff.getProperty('Color')
return urdf.Color(color[0], color[1], color[2] ,1)
[docs]def materialFromAffordance(aff):
color = colorFromAffordance(aff)
return urdf.Material(name=stringWithAffordanceId('material_%s', aff), color=color, texture=None)
[docs]def poseFromAffordance(aff):
t = aff.getChildFrame().transform
position, quat = transformUtils.poseFromTransform(t)
rpy = transformUtils.rollPitchYawFromTransform(t)
return urdf.Pose(position, rpy)
[docs]def linkFromAffordance(aff):
geometry = geometryFromAffordance(aff)
material = materialFromAffordance(aff)
pose = poseFromAffordance(aff)
visual = urdf.Visual(geometry=geometry, material=material, origin=pose)
collision = urdf.Collision(geometry=geometry, origin=pose)
return urdf.Link(name=stringWithAffordanceId('link_%s', aff), visual=visual, collision=collision)
[docs]def urdfStringFromAffordances(affordanceList):
r = urdf.Robot(name='affordance_environment')
for aff in affordanceList:
r.add_link(linkFromAffordance(aff))
return r.to_xml_string()