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>"#
)