Function to_urdf

Source
pub fn to_urdf(
    tree: &(impl KinematicInterface + ToURDF),
    urdf_config: URDFConfig,
) -> Result<Writer<Cursor<Vec<u8>>>, Error>
Expand description

A function to represent a KinematicInterface implementor in the URDF format.

This function should be used to generate the descriptions.

§Example

Reads and writes are hidden for brevity.

let white_material = MaterialDescriptor::new_rgb(1., 1., 1.).named("white");

let right_leg_link = Link::builder("[\\[right]\\]_leg").add_visual(
    Visual::builder(BoxGeometry::new(0.6, 0.1, 0.2))
    .materialized(white_material.clone())
    .transformed(Transform::new_translation(0., 0., -0.3)),
);

let right_leg: Robot = right_leg_link.build_tree().to_robot("Right_Leg_bot");

let right_base_link = Link::builder("[\\[right]\\]_base")
    .add_visual(Visual::builder(BoxGeometry::new(0.4, 0.1, 0.1)).materialized(white_material));

let right_base_joint = SmartJointBuilder::new_fixed("[\\[right]\\]_base_joint")
    .add_transform(Transform::new_translation(0., 0., -0.6));

right_leg
    .get_root_link()
    .write()
    .unwrap()
    .try_attach_child(right_base_joint, right_base_link)
    .unwrap();

assert_eq!(
xml_writer_to_string(
    to_urdf(
        &right_leg,
        URDFConfig{
            xml_mode: XMLMode::Indent(' ', 2),
            ..Default::default()
    }).unwrap()),
r#"<?xml version="1.0"?>
<robot name="Right_Leg_bot">
  <material name="white">
    <color rgba="1 1 1 1"/>
  </material>
  <link name="[[right]]_leg">
    <visual>
      <origin xyz="0 0 -0.3"/>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
      <material name="white"/>
    </visual>
  </link>
  <joint name="[[right]]_base_joint" type="fixed">
    <origin xyz="0 0 -0.6"/>
    <parent link="[[right]]_leg"/>
    <child link="[[right]]_base"/>
  </joint>
  <link name="[[right]]_base">
    <visual>
      <geometry>
        <box size="0.4 0.1 0.1"/>
      </geometry>
      <material name="white"/>
    </visual>
  </link>
</robot>"#
)