simulation.utils.urdf package¶
Module package to create .urdf model definitions.
The package contains a number of classes that enable to define urdf robots through python.
For what? The urdf is very repetetive to write and requires prior knowledge on available tags and how they can be combined to a fully specified robot. Additionally, the commonly used xacro is less powerful than python and, again, another tool.
The basic idea used throughout the package is the inheritance from XmlObject.
XmlObject.create_xml() creates a xml.etree.cElementTree.Element
from the class instance.
It does so by converting all instance attributes into xml attributes and sub elements.
If a class attribute is an instance of a subclass of XmlObject,
the objects XmlObject.create_xml() is called recursively.
The XmlObject in combination with
dataclasses
allows to create lightweight classes that define urdf components when converted to xml.
Submodules:
Summary¶
__all__ Classes:
Basic class that will be converted into a xml attribute. |
|
Axis(xyz: simulation.utils.urdf.core.Attribute = <factory>) |
|
Box(size: simulation.utils.urdf.core.Attribute) |
|
CameraClip(near: float, far: float) |
|
CameraDefinition(horizontal_fov: float, image: simulation.utils.urdf.camera.CameraImage, clip: simulation.utils.urdf.camera.CameraClip = None) |
|
CameraImage(width: int, height: int, format: str) |
|
CameraPlugin(name: simulation.utils.urdf.core.Attribute, filename: simulation.utils.urdf.core.Attribute, alwaysOn: float = 1, updateRate: float = 0, frameName: str = None, cameraName: str = None, CxPrime: float = None, Cx: float = None, Cy: float = None) |
|
CameraProperties(horizontal_fov: float, update_rate: float, image_width: float, image_height: float, image_format: float, clip_near: float, clip_far: float, image_topic: str, info_topic: str, frame_name: str, optical_center_x: float = None, optical_center_y: float = None) |
|
CameraSensor(name: simulation.utils.urdf.core.Attribute, type: simulation.utils.urdf.core.Attribute, plugin: simulation.utils.urdf.camera.CameraPlugin, update_rate: float, camera: simulation.utils.urdf.camera.CameraDefinition) |
|
Child(link: simulation.utils.urdf.core.Attribute) |
|
Collision(origin: simulation.utils.urdf.core.Origin = None, geometry: simulation.utils.urdf.link.Geometry = None) |
|
Color(xyz: simulation.utils.urdf.core.Attribute = <factory>) |
|
Cylinder(radius: simulation.utils.urdf.core.Attribute, length: simulation.utils.urdf.core.Attribute) |
|
DepthCamera(name: str, origin: simulation.utils.urdf.core.Origin, size: simulation.utils.geometry.vector.Vector, mass: float, properties: simulation.utils.urdf.camera.DepthCameraProperties, chassis_link: simulation.utils.urdf.link.Link) |
|
DepthCameraPlugin(name: simulation.utils.urdf.core.Attribute = ‘camera_plugin’, filename: simulation.utils.urdf.core.Attribute = ‘libgazebo_ros_openni_kinect.so’, alwaysOn: float = 1, updateRate: float = 0, frameName: str = None, cameraName: str = None, CxPrime: float = None, Cx: float = None, Cy: float = None, depthImageTopicName: str = None, depthImageCameraInfoTopicName: str = None, pointCloudTopicName: str = None, pointCloudCutoff: float = None) |
|
DepthCameraProperties(horizontal_fov: float, update_rate: float, image_width: float, image_height: float, image_format: float, clip_near: float, clip_far: float, image_topic: str, info_topic: str, frame_name: str, optical_center_x: float = None, optical_center_y: float = None, point_cloud_cutoff: float = None, point_cloud_topic_name: str = None) |
|
Gazebo(inner: simulation.utils.urdf.core.XmlObject, reference: simulation.utils.urdf.core.Attribute = None) |
|
Geometry(value: simulation.utils.urdf.core.XmlObject) |
|
Inertia(ixx: simulation.utils.urdf.core.Attribute = 0, ixy: simulation.utils.urdf.core.Attribute = 0, ixz: simulation.utils.urdf.core.Attribute = 0, iyx: simulation.utils.urdf.core.Attribute = 0, iyy: simulation.utils.urdf.core.Attribute = 0, iyz: simulation.utils.urdf.core.Attribute = 0, izx: simulation.utils.urdf.core.Attribute = 0, izy: simulation.utils.urdf.core.Attribute = 0, izz: simulation.utils.urdf.core.Attribute = 0) |
|
Inertial(mass: float, inertia: simulation.utils.urdf.link.Inertia, origin: simulation.utils.urdf.core.Origin = None) |
|
Joint(name: simulation.utils.urdf.core.Attribute, parent: simulation.utils.urdf.joint.Parent, child: simulation.utils.urdf.joint.Child, type: simulation.utils.urdf.core.Attribute = ‘fixed’, axis: simulation.utils.geometry.vector.Vector = None, limit: simulation.utils.urdf.joint.JointLimit = None, dynamics: simulation.utils.urdf.joint.JointDynamics = None, origin: simulation.utils.urdf.core.Origin = None) |
|
JointDynamics(damping: simulation.utils.urdf.core.Attribute = None, friction: simulation.utils.urdf.core.Attribute = None) |
|
JointLimit(effort: simulation.utils.urdf.core.Attribute = None, lower: simulation.utils.urdf.core.Attribute = None, upper: simulation.utils.urdf.core.Attribute = None, velocity: simulation.utils.urdf.core.Attribute = None) |
|
Link(name: simulation.utils.urdf.core.Attribute, collision: simulation.utils.urdf.link.Collision = None, visual: simulation.utils.urdf.link.Collision = None, inertial: simulation.utils.urdf.link.Inertial = None) |
|
Material(name: simulation.utils.urdf.core.Attribute = None, color: simulation.utils.geometry.vector.Vector = None, texture: str = None) |
|
Mesh(filename: simulation.utils.urdf.core.Attribute, scale: simulation.utils.geometry.vector.Vector = None) |
|
MonoCamera(name: str, origin: simulation.utils.urdf.core.Origin, size: simulation.utils.geometry.vector.Vector, mass: float, properties: simulation.utils.urdf.camera.CameraProperties, chassis_link: simulation.utils.urdf.link.Link) |
|
Origin(xyz: simulation.utils.urdf.core.Attribute = <factory>, rpy: simulation.utils.urdf.core.Attribute = <factory>) |
|
Parent(link: simulation.utils.urdf.core.Attribute) |
|
Plugin(name: simulation.utils.urdf.core.Attribute, filename: simulation.utils.urdf.core.Attribute) |
|
Sensor(name: simulation.utils.urdf.core.Attribute, type: simulation.utils.urdf.core.Attribute) |
|
Sphere(radius: simulation.utils.urdf.core.Attribute) |
|
Visual(origin: Tuple = None, geometry: simulation.utils.urdf.link.Geometry = None, material: simulation.utils.urdf.link.Material = None) |
|
Base class for all urdf xml objects. |
-
class
Attribute(val: str, name: Optional[str] = None)[source]¶ Basic class that will be converted into a xml attribute.
Important: Within a subclass of
XmlObjectan attribute can be defined by simply annotating a class variable with py:class:Attribute!Example
>>> from dataclasses import dataclass >>> from urdf.core import XmlObject, Attribute >>> @dataclass ... class Example(XmlObject): ... TAG = "example" ... name: Attribute ... value1: str ... value2: float = None >>> ex = Example("example_name",value1="I'm an example.")
The code block defines a simple example class that results in the xml string:
<example name="example_name"> <value1>I'm an example.</value1> </example>
- Parameters
val – Attribute value.
name – Optionally the name of the can be provided. By default the name of the Attribute instance defines the name of the resulting xml attribute.
-
class
XmlObject[source]¶ Base class for all urdf xml objects.
-
TAG= None¶
-
create_xml(root_el: Optional[xml.etree.ElementTree.Element] = None) → xml.etree.ElementTree.Element[source]¶ Convert this instance into a xml element.
If the class of this instance does not define a tag, new xml elements from this instance are appended to the root_el. Otherwise, a sub element is created and returned.
Additionally to all instance attributes, a dictionary
parameterscan be used to define sub elements.A
Attributetype annotation for any of the object`s attributes, will result in a xml attribute.
- Parameters
root_el – Optional element that is used a parent xml element when provided.
-
-
class
Origin(xyz: simulation.utils.urdf.core.Attribute = <factory>, rpy: simulation.utils.urdf.core.Attribute = <factory>)[source]¶ -
TAG= 'origin'¶
-
classmethod
from_vector(vector: simulation.utils.geometry.vector.Vector)[source]¶
-
-
class
Inertia(ixx: simulation.utils.urdf.core.Attribute = 0, ixy: simulation.utils.urdf.core.Attribute = 0, ixz: simulation.utils.urdf.core.Attribute = 0, iyx: simulation.utils.urdf.core.Attribute = 0, iyy: simulation.utils.urdf.core.Attribute = 0, iyz: simulation.utils.urdf.core.Attribute = 0, izx: simulation.utils.urdf.core.Attribute = 0, izy: simulation.utils.urdf.core.Attribute = 0, izz: simulation.utils.urdf.core.Attribute = 0)[source]¶ -
TAG= 'inertia'¶
-
-
class
Inertial(mass: float, inertia: simulation.utils.urdf.link.Inertia, origin: simulation.utils.urdf.core.Origin = None)[source]¶ -
TAG= 'inertial'¶
-
mass: float¶
-
inertia: simulation.utils.urdf.link.Inertia¶
-
origin: simulation.utils.urdf.core.Origin = None¶
-
create_xml(root_el=None)[source]¶ Convert this instance into a xml element.
If the class of this instance does not define a tag, new xml elements from this instance are appended to the root_el. Otherwise, a sub element is created and returned.
Additionally to all instance attributes, a dictionary
parameterscan be used to define sub elements.A
Attributetype annotation for any of the object`s attributes, will result in a xml attribute.
- Parameters
root_el – Optional element that is used a parent xml element when provided.
-
-
class
Box(size: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'box'¶
-
calculate_inertia(mass) → simulation.utils.urdf.link.Inertia[source]¶
-
-
class
Sphere(radius: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'sphere'¶
-
calculate_inertia(mass) → simulation.utils.urdf.link.Inertia[source]¶
-
-
class
Cylinder(radius: simulation.utils.urdf.core.Attribute, length: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'cylinder'¶
-
calculate_inertia(mass) → simulation.utils.urdf.link.Inertia[source]¶
-
-
class
Geometry(value: simulation.utils.urdf.core.XmlObject)[source]¶ -
TAG= 'geometry'¶
-
-
class
Mesh(filename: simulation.utils.urdf.core.Attribute, scale: simulation.utils.geometry.vector.Vector = None)[source]¶ -
TAG= 'mesh'¶
-
filename: simulation.utils.urdf.core.Attribute¶
-
scale: simulation.utils.geometry.vector.Vector = None¶
-
-
class
Material(name: simulation.utils.urdf.core.Attribute = None, color: simulation.utils.geometry.vector.Vector = None, texture: str = None)[source]¶ -
TAG= 'material'¶
-
name: simulation.utils.urdf.core.Attribute = None¶
-
color: simulation.utils.geometry.vector.Vector = None¶
-
texture: str = None¶
-
-
class
Visual(origin: Tuple = None, geometry: simulation.utils.urdf.link.Geometry = None, material: simulation.utils.urdf.link.Material = None)[source]¶ -
TAG= 'visual'¶
-
origin: Tuple = None¶
-
geometry: simulation.utils.urdf.link.Geometry = None¶
-
material: simulation.utils.urdf.link.Material = None¶
-
-
class
Collision(origin: simulation.utils.urdf.core.Origin = None, geometry: simulation.utils.urdf.link.Geometry = None)[source]¶ -
TAG= 'collision'¶
-
origin: simulation.utils.urdf.core.Origin = None¶
-
geometry: simulation.utils.urdf.link.Geometry = None¶
-
-
class
Link(name: simulation.utils.urdf.core.Attribute, collision: simulation.utils.urdf.link.Collision = None, visual: simulation.utils.urdf.link.Collision = None, inertial: simulation.utils.urdf.link.Inertial = None)[source]¶ -
TAG= 'link'¶
-
collision: simulation.utils.urdf.link.Collision = None¶
-
visual: simulation.utils.urdf.link.Collision = None¶
-
inertial: simulation.utils.urdf.link.Inertial = None¶
-
-
class
JointDynamics(damping: simulation.utils.urdf.core.Attribute = None, friction: simulation.utils.urdf.core.Attribute = None)[source]¶ -
TAG= 'dynamics'¶
-
damping: simulation.utils.urdf.core.Attribute = None¶
-
friction: simulation.utils.urdf.core.Attribute = None¶
-
-
class
JointLimit(effort: simulation.utils.urdf.core.Attribute = None, lower: simulation.utils.urdf.core.Attribute = None, upper: simulation.utils.urdf.core.Attribute = None, velocity: simulation.utils.urdf.core.Attribute = None)[source]¶ -
TAG= 'limit'¶
-
effort: simulation.utils.urdf.core.Attribute = None¶
-
lower: simulation.utils.urdf.core.Attribute = None¶
-
upper: simulation.utils.urdf.core.Attribute = None¶
-
velocity: simulation.utils.urdf.core.Attribute = None¶
-
-
class
Parent(link: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'parent'¶
-
-
class
Child(link: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'child'¶
-
-
class
Joint(name: simulation.utils.urdf.core.Attribute, parent: simulation.utils.urdf.joint.Parent, child: simulation.utils.urdf.joint.Child, type: simulation.utils.urdf.core.Attribute = 'fixed', axis: simulation.utils.geometry.vector.Vector = None, limit: simulation.utils.urdf.joint.JointLimit = None, dynamics: simulation.utils.urdf.joint.JointDynamics = None, origin: simulation.utils.urdf.core.Origin = None)[source]¶ -
TAG= 'joint'¶
-
FIXED= 'fixed'¶
-
REVOLUTE= 'revolute'¶
-
CONTINUOUS= 'continuous'¶
-
type: simulation.utils.urdf.core.Attribute = 'fixed'¶
-
axis: simulation.utils.geometry.vector.Vector = None¶
-
limit: simulation.utils.urdf.joint.JointLimit = None¶
-
dynamics: simulation.utils.urdf.joint.JointDynamics = None¶
-
origin: simulation.utils.urdf.core.Origin = None¶
-
-
class
Plugin(name: simulation.utils.urdf.core.Attribute, filename: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'plugin'¶
-
filename: simulation.utils.urdf.core.Attribute¶
-
-
class
Gazebo(inner: simulation.utils.urdf.core.XmlObject, reference: simulation.utils.urdf.core.Attribute = None)[source]¶ -
TAG= 'gazebo'¶
-
reference: simulation.utils.urdf.core.Attribute = None¶
-
-
class
Sensor(name: simulation.utils.urdf.core.Attribute, type: simulation.utils.urdf.core.Attribute)[source]¶ -
TAG= 'sensor'¶
-
-
class
MonoCamera(name: str, origin: simulation.utils.urdf.core.Origin, size: simulation.utils.geometry.vector.Vector, mass: float, properties: simulation.utils.urdf.camera.CameraProperties, chassis_link: simulation.utils.urdf.link.Link)[source]¶
-
class
DepthCamera(name: str, origin: simulation.utils.urdf.core.Origin, size: simulation.utils.geometry.vector.Vector, mass: float, properties: simulation.utils.urdf.camera.DepthCameraProperties, chassis_link: simulation.utils.urdf.link.Link)[source]¶
-
class
CameraDefinition(horizontal_fov: float, image: simulation.utils.urdf.camera.CameraImage, clip: simulation.utils.urdf.camera.CameraClip = None)[source]¶ -
TAG= 'camera'¶
-
horizontal_fov: float¶
-
clip: simulation.utils.urdf.camera.CameraClip = None¶
-
-
class
CameraImage(width: int, height: int, format: str)[source]¶ -
TAG= 'image'¶
-
width: int¶
-
height: int¶
-
format: str¶
-
-
class
CameraPlugin(name: simulation.utils.urdf.core.Attribute, filename: simulation.utils.urdf.core.Attribute, alwaysOn: float = 1, updateRate: float = 0, frameName: str = None, cameraName: str = None, CxPrime: float = None, Cx: float = None, Cy: float = None)[source]¶ -
alwaysOn: float = 1¶
-
updateRate: float = 0¶
-
frameName: str = None¶
-
cameraName: str = None¶
-
CxPrime: float = None¶
-
Cx: float = None¶
-
Cy: float = None¶
-
-
class
DepthCameraPlugin(name: simulation.utils.urdf.core.Attribute = 'camera_plugin', filename: simulation.utils.urdf.core.Attribute = 'libgazebo_ros_openni_kinect.so', alwaysOn: float = 1, updateRate: float = 0, frameName: str = None, cameraName: str = None, CxPrime: float = None, Cx: float = None, Cy: float = None, depthImageTopicName: str = None, depthImageCameraInfoTopicName: str = None, pointCloudTopicName: str = None, pointCloudCutoff: float = None)[source]¶ -
name: simulation.utils.urdf.core.Attribute = 'camera_plugin'¶
-
filename: simulation.utils.urdf.core.Attribute = 'libgazebo_ros_openni_kinect.so'¶
-
depthImageTopicName: str = None¶
-
depthImageCameraInfoTopicName: str = None¶
-
pointCloudTopicName: str = None¶
-
pointCloudCutoff: float = None¶
-
-
class
CameraSensor(name: simulation.utils.urdf.core.Attribute, type: simulation.utils.urdf.core.Attribute, plugin: simulation.utils.urdf.camera.CameraPlugin, update_rate: float, camera: simulation.utils.urdf.camera.CameraDefinition)[source]¶ -
-
update_rate: float¶
-
-
class
CameraProperties(horizontal_fov: float, update_rate: float, image_width: float, image_height: float, image_format: float, clip_near: float, clip_far: float, image_topic: str, info_topic: str, frame_name: str, optical_center_x: float = None, optical_center_y: float = None)[source]¶ -
horizontal_fov: float¶
-
update_rate: float¶
-
image_width: float¶
-
image_height: float¶
-
image_format: float¶
-
clip_near: float¶
-
clip_far: float¶
-
image_topic: str¶
-
info_topic: str¶
-
frame_name: str¶
-
optical_center_x: float = None¶
-
optical_center_y: float = None¶
-
-
class
DepthCameraProperties(horizontal_fov: float, update_rate: float, image_width: float, image_height: float, image_format: float, clip_near: float, clip_far: float, image_topic: str, info_topic: str, frame_name: str, optical_center_x: float = None, optical_center_y: float = None, point_cloud_cutoff: float = None, point_cloud_topic_name: str = None)[source]¶ -
point_cloud_cutoff: float = None¶
-
point_cloud_topic_name: str = None¶
-