RobotDescription

Upkie

Upkie Project · licence Apache-2.0 · source: github.com/upkie/upkie_description @ 19a91ce69

What you are looking at is RobotDescription.from_urdf(original).to_urdf_string(): the reference implementation's re-serialisation of the original file, not the original file itself.

MuJoCo is unavailable for this robot: Error: size 0 must be positive in geom.

Loading the model…

drag to orbit · scroll to zoom · right-drag to pan

robot.urdf

<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by bam_robot_descriptions (py backend), content 88cc5f148c81f91f -->
<robot name="upkie">
  <material name="black">
    <color rgba="0.1 0.1 0.1 1.0" />
  </material>
  <material name="chalky_blue">
    <color rgba="0.65 0.76 0.91 1.0" />
  </material>
  <material name="dark_gray">
    <color rgba="0.3 0.3 0.3 1.0" />
  </material>
  <material name="light_gray">
    <color rgba="0.8 0.8 0.8 1.0" />
  </material>
  <material name="light_wood">
    <color rgba="1.0 0.77 0.48 1.0" />
  </material>
  <material name="mj5208_rotor">
    <color rgba="0.5 0.55 0.6 1.0" />
  </material>
  <material name="mj5208_stator">
    <color rgba="0.22 0.22 0.25 1.0" />
  </material>
  <material name="terracotta_light">
    <color rgba="0.93 0.64 0.52 1.0" />
  </material>
  <material name="terracotta_transparent">
    <color rgba="0.93 0.64 0.52 0.8" />
  </material>
  <link name="base">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <link name="torso">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.125 0.17 0.25" />
      </geometry>
      <material name="terracotta_transparent" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.125 0.17 0.25" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="1.0" />
      <inertia ixx="0.007616666666666667" ixy="0.0" ixz="0.0" iyy="0.006510416666666667" iyz="0.0" izz="0.0037104166666666674" />
    </inertial>
  </link>
  <joint name="torso_fix" type="fixed">
    <origin xyz="0.0 0.0 -0.1" rpy="0.0 0.0 0.0" />
    <parent link="base" />
    <child link="torso" />
  </joint>
  <link name="imu">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="imu_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="3.141592653589793 0.0 3.141592653589793" />
    <parent link="torso" />
    <child link="imu" />
  </joint>
  <link name="battery">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.13 0.074 0.055" />
      </geometry>
      <material name="dark_gray" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.13 0.074 0.055" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.8" />
      <inertia ixx="0.0005667333333333333" ixy="0.0" ixz="0.0" iyy="0.0013283333333333335" iyz="0.0" izz="0.0014917333333333335" />
    </inertial>
  </link>
  <joint name="battery_fix" type="fixed">
    <origin xyz="-0.04 0.0 0.0" rpy="1.5707963267948966 0.0 1.5707963267948966" />
    <parent link="torso" />
    <child link="battery" />
  </joint>
  <link name="handle">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/add-ons/handle.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.12 0.07 0.04" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <mass value="0.0525" />
      <inertia ixx="2.8437500000000003e-05" ixy="0.0" ixz="0.0" iyy="7.000000000000001e-05" iyz="0.0" izz="8.44375e-05" />
    </inertial>
  </link>
  <joint name="handle_fix" type="fixed">
    <origin xyz="0.0 0.0 0.135" rpy="0.0 0.0 -1.5707963267948966" />
    <parent link="torso" />
    <child link="handle" />
  </joint>
  <link name="left_hip_qdd100_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_stator.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.03" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.47" />
      <inertia ixx="0.00032900000000000003" ixy="0.0" ixz="0.0" iyy="0.00032900000000000003" iyz="0.0" izz="0.0005875000000000001" />
    </inertial>
  </link>
  <joint name="left_hip_qdd100_stator_fix" type="fixed">
    <origin xyz="0.0 0.085 -0.064" rpy="-1.5707963267948966 0.0 0.0" />
    <parent link="torso" />
    <child link="left_hip_qdd100_stator" />
  </joint>
  <link name="left_hip_qdd100_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_rotor.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.005" radius="0.023" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <mass value="0.015" />
      <inertia ixx="2.0149999999999998e-06" ixy="0.0" ixz="0.0" iyy="2.0149999999999998e-06" iyz="0.0" izz="3.9675e-06" />
    </inertial>
  </link>
  <joint name="left_hip" type="revolute">
    <origin xyz="0.0 0.0 0.0292" rpy="0.0 0.0 0.0" />
    <parent link="left_hip_qdd100_stator" />
    <child link="left_hip_qdd100_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="16.0" velocity="28.8" lower="-1.26" upper="1.26" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="left_hip_horn">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_horn.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.09" radius="0.025" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.05267" />
      <inertia ixx="4.37819375e-05" ixy="0.0" ixz="0.0" iyy="4.37819375e-05" iyz="0.0" izz="1.6459375000000005e-05" />
    </inertial>
  </link>
  <joint name="left_hip_horn_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 1.5707963267948966" />
    <parent link="left_hip_qdd100_rotor" />
    <child link="left_hip_horn" />
  </joint>
  <link name="left_femur">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.25" radius="0.011" />
      </geometry>
      <material name="light_wood" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.26" radius="0.012" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.056" />
      <inertia ixx="5.170666666666667e-06" ixy="0.0" ixz="0.0" iyy="5.170666666666667e-06" iyz="0.0" izz="4.0320000000000005e-06" />
    </inertial>
  </link>
  <joint name="left_femur_fix" type="fixed">
    <origin xyz="0.0 0.07 0.025" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="left_hip_qdd100_rotor" />
    <child link="left_femur" />
  </joint>
  <joint name="left_knee_stator_fix" type="fixed">
    <origin xyz="0.0 0.042 -0.098" rpy="0.0 0.0 -1.5707963267948966" />
    <parent link="left_femur" />
    <child link="left_knee_stator" />
  </joint>
  <link name="left_knee_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/knee_stator.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.03 0.0 0.0" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.06" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.03 0.0 0.0" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.09874" />
      <inertia ixx="9.133450000000001e-05" ixy="0.0" ixz="0.0" iyy="9.133450000000001e-05" iyz="0.0" izz="0.000123425" />
    </inertial>
  </link>
  <link name="left_knee_qdd100_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_stator.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.03" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.47" />
      <inertia ixx="0.00032900000000000003" ixy="0.0" ixz="0.0" iyy="0.00032900000000000003" iyz="0.0" izz="0.0005875000000000001" />
    </inertial>
  </link>
  <joint name="left_knee_qdd100_stator_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="-1.5707963267948966 0.0 1.5707963267948966" />
    <parent link="left_knee_stator" />
    <child link="left_knee_qdd100_stator" />
  </joint>
  <joint name="left_knee" type="revolute">
    <origin xyz="0.0 0.0 0.0292" rpy="0.0 0.0 0.0" />
    <parent link="left_knee_qdd100_stator" />
    <child link="left_knee_qdd100_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="16.0" velocity="28.8" lower="-2.51" upper="2.51" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="left_knee_qdd100_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_rotor.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.005" radius="0.023" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <mass value="0.015" />
      <inertia ixx="2.0149999999999998e-06" ixy="0.0" ixz="0.0" iyy="2.0149999999999998e-06" iyz="0.0" izz="3.9675e-06" />
    </inertial>
  </link>
  <link name="left_knee_horn">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_horn.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.09" radius="0.025" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.05267" />
      <inertia ixx="4.37819375e-05" ixy="0.0" ixz="0.0" iyy="4.37819375e-05" iyz="0.0" izz="1.6459375000000005e-05" />
    </inertial>
  </link>
  <joint name="left_knee_horn_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 1.5707963267948966" />
    <parent link="left_knee_qdd100_rotor" />
    <child link="left_knee_horn" />
  </joint>
  <link name="left_tibia">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.25" radius="0.011" />
      </geometry>
      <material name="light_wood" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.26" radius="0.012" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.056" />
      <inertia ixx="5.170666666666667e-06" ixy="0.0" ixz="0.0" iyy="5.170666666666667e-06" iyz="0.0" izz="4.0320000000000005e-06" />
    </inertial>
  </link>
  <joint name="left_tibia_fix" type="fixed">
    <origin xyz="0.0 0.07 0.025" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="left_knee_qdd100_rotor" />
    <child link="left_tibia" />
  </joint>
  <link name="left_ankle_base">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/ankle_stator.stl" />
      </geometry>
      <material name="chalky_blue" />
    </visual>
    <collision>
      <origin xyz="0.0 0.002 0.0275" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.092 0.068 0.056" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.002 0.0275" rpy="0.0 0.0 0.0" />
      <mass value="0.07863" />
      <inertia ixx="5.084740000000002e-05" ixy="0.0" ixz="0.0" iyy="7.6009e-05" iyz="0.0" izz="8.575912e-05" />
    </inertial>
  </link>
  <joint name="left_ankle_base_fix" type="fixed">
    <origin xyz="0.0 0.034 -0.105" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="left_tibia" />
    <child link="left_ankle_base" />
  </joint>
  <link name="left_ankle_plate">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.08 0.045 0.003" />
      </geometry>
      <material name="light_gray" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.09 0.046 0.004" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.02" />
      <inertia ixx="3.5533333333333333e-06" ixy="0.0" ixz="0.0" iyy="1.3526666666666667e-05" iyz="0.0" izz="1.7026666666666667e-05" />
    </inertial>
  </link>
  <joint name="left_ankle_plate_fix" type="fixed">
    <origin xyz="0.0 0.0 -0.0015" rpy="0.0 0.0 0.0" />
    <parent link="left_ankle_base" />
    <child link="left_ankle_plate" />
  </joint>
  <link name="left_ankle_mj5208_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/mj5208_stator.stl" />
      </geometry>
      <material name="mj5208_stator" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.018" radius="0.03" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <mass value="0.1721" />
      <inertia ixx="4.3369200000000005e-05" ixy="0.0" ixz="0.0" iyy="4.3369200000000005e-05" iyz="0.0" izz="7.7445e-05" />
    </inertial>
  </link>
  <joint name="left_ankle_mj5208_stator_fix" type="fixed">
    <origin xyz="0.0 0.0 -0.0015" rpy="3.141592653589793 0.0 0.0" />
    <parent link="left_ankle_plate" />
    <child link="left_ankle_mj5208_stator" />
  </joint>
  <link name="left_anchor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="left_anchor_fix" type="fixed">
    <origin xyz="0.0 0.0545 0.05" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="left_ankle_mj5208_stator" />
    <child link="left_anchor" />
  </joint>
  <link name="left_ankle_mj5208_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/mj5208_rotor.stl" />
      </geometry>
      <material name="mj5208_rotor" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.016" radius="0.034" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.05" />
      <inertia ixx="1.551666666666667e-05" ixy="0.0" ixz="0.0" iyy="1.551666666666667e-05" iyz="0.0" izz="2.8900000000000005e-05" />
    </inertial>
  </link>
  <joint name="left_wheel" type="revolute">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
    <parent link="left_ankle_mj5208_stator" />
    <child link="left_ankle_mj5208_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="1.7" velocity="111.0" lower="0.0" upper="0.0" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="left_wheel_hub">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/wheel_hub.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0125" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.025" radius="0.039" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0125" rpy="0.0 0.0 0.0" />
      <mass value="0.0454" />
      <inertia ixx="1.9627933333333332e-05" ixy="0.0" ixz="0.0" iyy="1.9627933333333332e-05" iyz="0.0" izz="3.45267e-05" />
    </inertial>
  </link>
  <joint name="left_wheel_hub_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0251" rpy="0.0 0.0 0.0" />
    <parent link="left_ankle_mj5208_rotor" />
    <child link="left_wheel_hub" />
  </joint>
  <link name="left_wheel_tire">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/wheel_tire/wheel_tire.stl" />
      </geometry>
      <material name="dark_gray" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.04" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.08715" />
      <inertia ixx="6.608875000000002e-05" ixy="0.0" ixz="0.0" iyy="6.608875000000002e-05" iyz="0.0" izz="0.00010893750000000003" />
    </inertial>
  </link>
  <joint name="left_wheel_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0209" rpy="0.0 0.0 0.0" />
    <parent link="left_wheel_hub" />
    <child link="left_wheel_tire" />
  </joint>
  <link name="left_contact">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="left_contact_fix" type="fixed">
    <origin xyz="0.0 0.047 0.0" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="left_wheel_tire" />
    <child link="left_contact" />
  </joint>
  <link name="left_wheel_center">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="left_wheel_center_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="left_wheel_tire" />
    <child link="left_wheel_center" />
  </joint>
  <link name="right_hip_qdd100_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_stator.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.03" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.47" />
      <inertia ixx="0.00032900000000000003" ixy="0.0" ixz="0.0" iyy="0.00032900000000000003" iyz="0.0" izz="0.0005875000000000001" />
    </inertial>
  </link>
  <joint name="right_hip_qdd100_stator_fix" type="fixed">
    <origin xyz="0.0 -0.085 -0.064" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="torso" />
    <child link="right_hip_qdd100_stator" />
  </joint>
  <link name="right_hip_qdd100_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_rotor.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.005" radius="0.023" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <mass value="0.015" />
      <inertia ixx="2.0149999999999998e-06" ixy="0.0" ixz="0.0" iyy="2.0149999999999998e-06" iyz="0.0" izz="3.9675e-06" />
    </inertial>
  </link>
  <joint name="right_hip" type="revolute">
    <origin xyz="0.0 0.0 0.0292" rpy="0.0 0.0 0.0" />
    <parent link="right_hip_qdd100_stator" />
    <child link="right_hip_qdd100_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="16.0" velocity="28.8" lower="-1.26" upper="1.26" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="right_hip_horn">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_horn.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.09" radius="0.025" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.05267" />
      <inertia ixx="4.37819375e-05" ixy="0.0" ixz="0.0" iyy="4.37819375e-05" iyz="0.0" izz="1.6459375000000005e-05" />
    </inertial>
  </link>
  <joint name="right_hip_horn_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 1.5707963267948966" />
    <parent link="right_hip_qdd100_rotor" />
    <child link="right_hip_horn" />
  </joint>
  <link name="right_femur">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.25" radius="0.011" />
      </geometry>
      <material name="light_wood" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.26" radius="0.012" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.056" />
      <inertia ixx="5.170666666666667e-06" ixy="0.0" ixz="0.0" iyy="5.170666666666667e-06" iyz="0.0" izz="4.0320000000000005e-06" />
    </inertial>
  </link>
  <joint name="right_femur_fix" type="fixed">
    <origin xyz="0.0 0.07 0.025" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="right_hip_qdd100_rotor" />
    <child link="right_femur" />
  </joint>
  <joint name="right_knee_stator_fix" type="fixed">
    <origin xyz="0.0 0.042 -0.098" rpy="0.0 0.0 -1.5707963267948966" />
    <parent link="right_femur" />
    <child link="right_knee_stator" />
  </joint>
  <link name="right_knee_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/knee_stator.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.03 0.0 0.0" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.06" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.03 0.0 0.0" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.09874" />
      <inertia ixx="9.133450000000001e-05" ixy="0.0" ixz="0.0" iyy="9.133450000000001e-05" iyz="0.0" izz="0.000123425" />
    </inertial>
  </link>
  <link name="right_knee_qdd100_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_stator.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.03" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.47" />
      <inertia ixx="0.00032900000000000003" ixy="0.0" ixz="0.0" iyy="0.00032900000000000003" iyz="0.0" izz="0.0005875000000000001" />
    </inertial>
  </link>
  <joint name="right_knee_qdd100_stator_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="-1.5707963267948966 0.0 1.5707963267948966" />
    <parent link="right_knee_stator" />
    <child link="right_knee_qdd100_stator" />
  </joint>
  <joint name="right_knee" type="revolute">
    <origin xyz="0.0 0.0 0.0292" rpy="0.0 0.0 0.0" />
    <parent link="right_knee_qdd100_stator" />
    <child link="right_knee_qdd100_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="16.0" velocity="28.8" lower="-2.51" upper="2.51" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="right_knee_qdd100_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_rotor.stl" />
      </geometry>
      <material name="black" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.005" radius="0.023" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 -0.0025" rpy="0.0 0.0 0.0" />
      <mass value="0.015" />
      <inertia ixx="2.0149999999999998e-06" ixy="0.0" ixz="0.0" iyy="2.0149999999999998e-06" iyz="0.0" izz="3.9675e-06" />
    </inertial>
  </link>
  <link name="right_knee_horn">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/qdd100_horn.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <geometry>
        <cylinder length="0.09" radius="0.025" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.025" rpy="0.0 1.5707963267948966 0.0" />
      <mass value="0.05267" />
      <inertia ixx="4.37819375e-05" ixy="0.0" ixz="0.0" iyy="4.37819375e-05" iyz="0.0" izz="1.6459375000000005e-05" />
    </inertial>
  </link>
  <joint name="right_knee_horn_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 1.5707963267948966" />
    <parent link="right_knee_qdd100_rotor" />
    <child link="right_knee_horn" />
  </joint>
  <link name="right_tibia">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.25" radius="0.011" />
      </geometry>
      <material name="light_wood" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.26" radius="0.012" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.056" />
      <inertia ixx="5.170666666666667e-06" ixy="0.0" ixz="0.0" iyy="5.170666666666667e-06" iyz="0.0" izz="4.0320000000000005e-06" />
    </inertial>
  </link>
  <joint name="right_tibia_fix" type="fixed">
    <origin xyz="0.0 0.07 0.025" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="right_knee_qdd100_rotor" />
    <child link="right_tibia" />
  </joint>
  <link name="right_ankle_base">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/ankle_stator.stl" />
      </geometry>
      <material name="chalky_blue" />
    </visual>
    <collision>
      <origin xyz="0.0 0.002 0.0275" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.092 0.068 0.056" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.002 0.0275" rpy="0.0 0.0 0.0" />
      <mass value="0.07863" />
      <inertia ixx="5.084740000000002e-05" ixy="0.0" ixz="0.0" iyy="7.6009e-05" iyz="0.0" izz="8.575912e-05" />
    </inertial>
  </link>
  <joint name="right_ankle_base_fix" type="fixed">
    <origin xyz="0.0 0.034 -0.105" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="right_tibia" />
    <child link="right_ankle_base" />
  </joint>
  <link name="right_ankle_plate">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.08 0.045 0.003" />
      </geometry>
      <material name="light_gray" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.09 0.046 0.004" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.02" />
      <inertia ixx="3.5533333333333333e-06" ixy="0.0" ixz="0.0" iyy="1.3526666666666667e-05" iyz="0.0" izz="1.7026666666666667e-05" />
    </inertial>
  </link>
  <joint name="right_ankle_plate_fix" type="fixed">
    <origin xyz="0.0 0.0 -0.0015" rpy="0.0 0.0 0.0" />
    <parent link="right_ankle_base" />
    <child link="right_ankle_plate" />
  </joint>
  <link name="right_ankle_mj5208_stator">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/mj5208_stator.stl" />
      </geometry>
      <material name="mj5208_stator" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.018" radius="0.03" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.01" rpy="0.0 0.0 0.0" />
      <mass value="0.1721" />
      <inertia ixx="4.3369200000000005e-05" ixy="0.0" ixz="0.0" iyy="4.3369200000000005e-05" iyz="0.0" izz="7.7445e-05" />
    </inertial>
  </link>
  <joint name="right_ankle_mj5208_stator_fix" type="fixed">
    <origin xyz="0.0 0.0 -0.0015" rpy="3.141592653589793 0.0 0.0" />
    <parent link="right_ankle_plate" />
    <child link="right_ankle_mj5208_stator" />
  </joint>
  <link name="right_anchor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="right_anchor_fix" type="fixed">
    <origin xyz="0.0 0.0545 0.048" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="right_ankle_mj5208_stator" />
    <child link="right_anchor" />
  </joint>
  <link name="right_ankle_mj5208_rotor">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/mjbots/mj5208_rotor.stl" />
      </geometry>
      <material name="mj5208_rotor" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.016" radius="0.034" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.015" rpy="0.0 0.0 0.0" />
      <mass value="0.05" />
      <inertia ixx="1.551666666666667e-05" ixy="0.0" ixz="0.0" iyy="1.551666666666667e-05" iyz="0.0" izz="2.8900000000000005e-05" />
    </inertial>
  </link>
  <joint name="right_wheel" type="revolute">
    <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
    <parent link="right_ankle_mj5208_stator" />
    <child link="right_ankle_mj5208_rotor" />
    <axis xyz="0.0 0.0 -1.0" />
    <limit effort="1.7" velocity="111.0" lower="0.0" upper="0.0" />
    <dynamics damping="0.0" friction="0.0" />
  </joint>
  <link name="right_wheel_hub">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/wheel_hub.stl" />
      </geometry>
      <material name="terracotta_light" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0125" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.025" radius="0.039" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0125" rpy="0.0 0.0 0.0" />
      <mass value="0.0454" />
      <inertia ixx="1.9627933333333332e-05" ixy="0.0" ixz="0.0" iyy="1.9627933333333332e-05" iyz="0.0" izz="3.45267e-05" />
    </inertial>
  </link>
  <joint name="right_wheel_hub_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0251" rpy="0.0 0.0 0.0" />
    <parent link="right_ankle_mj5208_rotor" />
    <child link="right_wheel_hub" />
  </joint>
  <link name="right_wheel_tire">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <mesh filename="package://upkie_description/meshes/wheel_tire/wheel_tire.stl" />
      </geometry>
      <material name="dark_gray" />
    </visual>
    <collision>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.04" radius="0.05" />
      </geometry>
    </collision>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.08715" />
      <inertia ixx="6.608875000000002e-05" ixy="0.0" ixz="0.0" iyy="6.608875000000002e-05" iyz="0.0" izz="0.00010893750000000003" />
    </inertial>
  </link>
  <joint name="right_wheel_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0209" rpy="0.0 0.0 0.0" />
    <parent link="right_wheel_hub" />
    <child link="right_wheel_tire" />
  </joint>
  <link name="right_contact">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="right_contact_fix" type="fixed">
    <origin xyz="0.0 0.047 0.0" rpy="1.5707963267948966 0.0 0.0" />
    <parent link="right_wheel_tire" />
    <child link="right_contact" />
  </joint>
  <link name="right_wheel_center">
    <visual>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <geometry>
        <box size="0.0 0.0 0.0" />
      </geometry>
    </visual>
    <inertial>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
      <mass value="0.001" />
      <inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
    </inertial>
  </link>
  <joint name="right_wheel_center_fix" type="fixed">
    <origin xyz="0.0 0.0 0.0" rpy="1.5707963267948966 3.141592653589793 0.0" />
    <parent link="right_wheel_tire" />
    <child link="right_wheel_center" />
  </joint>
</robot>