Skip to main content

FER_URDF

Constant FER_URDF 

Source
pub const FER_URDF: &str = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  Franka Emika Robot (FER, FCI v5), arm only, mesh-free. Generated file: see\n  `tools/fer-model-fit` and `docs/book/src/reference/model.md`; do not edit by hand.\n\n  Joint origins and axes: `franka_description`\'s `fer_joint1..8`, which agree with\n  the robot\'s own `libfcimodels_x64.so` to 4e-16.\n\n  `<inertial>` elements: identified from that shared object by the `fit` command of\n  `tools/fer-model-fit`, as the minimum-norm correction to `franka_description`\'s\n  published values that reproduces the library\'s mass matrix and gravity torques.\n  Regressor rank 45 of 70 (the classical base parameters), worst residual 3.553e-14 over\n  208 joint configurations.\n\n  These ten numbers per link are a base-parameter-equivalent set, NOT a physically\n  meaningful description of each casting: some moments of inertia are negative. That\n  is a property of the robot\'s own model, not of the fit \u{2014} no exact fit is physically\n  consistent (the smallest reachable pseudo-inertia eigenvalue over the whole family\n  of exact fits is -1.496e-2). Use this file to reproduce libfranka\'s numbers, not to\n  seed a physics simulation.\n\n  Link names are libfranka\'s own `link0..link8`, because `franka::model::NativeBackend`\n  looks for the flange under `RobotModel::kLastLinkName`.\n-->\n<robot name=\"fer\">\n  <link name=\"link0\"/>\n  <link name=\"link1\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"0.008212145719781648 -0.012489433728811434 -0.04762000000000013\"/>\n      <mass value=\"4.970684\"/>\n      <inertia ixx=\"0.702616168960195\" ixy=\"-0.0006889014261360759\" ixz=\"0.005745380380637394\" iyy=\"0.7063494182919353\" iyz=\"0.02261787953853889\" izz=\"0.00252224154567267\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint1\" type=\"revolute\">\n    <origin rpy=\"0.0 0.0 0.0\" xyz=\"0.0 0.0 0.333\"/>\n    <parent link=\"link0\"/>\n    <child link=\"link1\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"87.0\" lower=\"-2.8973\" upper=\"2.8973\" velocity=\"2.175\"/>\n  </joint>\n  <link name=\"link2\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"-0.008847188777277989 -0.027478515098922834 -0.10845755996646182\"/>\n      <mass value=\"0.6469260000000004\"/>\n      <inertia ixx=\"-0.010435853412563362\" ixy=\"-0.005177260395266927\" ixz=\"0.029034281597634885\" iyy=\"0.01769709595829096\" iyz=\"-0.0015692467290544213\" izz=\"0.032692302428138635\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint2\" type=\"revolute\">\n    <origin rpy=\"-1.5707963267948966 0.0 0.0\" xyz=\"0.0 0.0 0.0\"/>\n    <parent link=\"link1\"/>\n    <child link=\"link2\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"87.0\" lower=\"-1.7628\" upper=\"1.7628\" velocity=\"2.175\"/>\n  </joint>\n  <link name=\"link3\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"0.02841819564298921 0.03858833128409879 -0.06679932425691104\"/>\n      <mass value=\"3.226078812759408\"/>\n      <inertia ixx=\"0.03931086918293672\" ixy=\"-0.005053474288594204\" ixz=\"-0.016811536796376148\" iyy=\"0.037310455098084824\" iyz=\"-0.013111663402157121\" izz=\"0.004872267100857771\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint3\" type=\"revolute\">\n    <origin rpy=\"1.5707963267948966 0.0 0.0\" xyz=\"0.0 -0.316 0.0\"/>\n    <parent link=\"link2\"/>\n    <child link=\"link3\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"87.0\" lower=\"-2.8973\" upper=\"2.8973\" velocity=\"2.175\"/>\n  </joint>\n  <link name=\"link4\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"-0.052923582753299815 0.1041655281882056 0.028072528740131844\"/>\n      <mass value=\"3.588634337011673\"/>\n      <inertia ixx=\"0.01879326936772531\" ixy=\"0.019613334939035772\" ixz=\"-0.0005851665677740316\" iyy=\"0.017929420205220613\" iyz=\"0.007812946524814866\" izz=\"0.03591432048480523\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint4\" type=\"revolute\">\n    <origin rpy=\"1.5707963267948966 0.0 0.0\" xyz=\"0.0825 0.0 0.0\"/>\n    <parent link=\"link3\"/>\n    <child link=\"link4\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"87.0\" lower=\"-3.0718\" upper=\"-0.0698\" velocity=\"2.175\"/>\n  </joint>\n  <link name=\"link5\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"-0.00819919810222125 0.044849648534549445 -0.03912541618142476\"/>\n      <mass value=\"1.224660602599113\"/>\n      <inertia ixx=\"0.04250244229149407\" ixy=\"-0.00418291650860753\" ixz=\"-0.005749943950155883\" iyy=\"0.027739448427164998\" iyz=\"0.005555036692920862\" izz=\"0.0005098413569274763\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint5\" type=\"revolute\">\n    <origin rpy=\"-1.5707963267948966 0.0 0.0\" xyz=\"-0.0825 0.384 0.0\"/>\n    <parent link=\"link4\"/>\n    <child link=\"link5\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"12.0\" lower=\"-2.8973\" upper=\"2.8973\" velocity=\"2.61\"/>\n  </joint>\n  <link name=\"link6\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"0.06064264248542852 -0.013792474511436911 -0.013276699467264706\"/>\n      <mass value=\"1.665269602599113\"/>\n      <inertia ixx=\"-0.003069941349005529\" ixy=\"4.066514884184039e-5\" ixz=\"-0.001354770129082226\" iyy=\"0.0029132442028317164\" iyz=\"0.0011252745943301765\" izz=\"0.0019853862104898127\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint6\" type=\"revolute\">\n    <origin rpy=\"1.5707963267948966 0.0 0.0\" xyz=\"0.0 0.0 0.0\"/>\n    <parent link=\"link5\"/>\n    <child link=\"link6\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"12.0\" lower=\"-0.0175\" upper=\"3.7525\" velocity=\"2.61\"/>\n  </joint>\n  <link name=\"link7\">\n    <inertial>\n      <origin rpy=\"0 0 0\" xyz=\"0.008499343414525214 -0.0006345336526240304 0.060901871831290526\"/>\n      <mass value=\"0.7347474831348583\"/>\n      <inertia ixx=\"0.0064418635784042975\" ixy=\"0.001183620745107082\" ixz=\"0.0021380029551365423\" iyy=\"0.00815041377656671\" iyz=\"-0.0006250487121552125\" izz=\"0.0012188799841693894\"/>\n    </inertial>\n  </link>\n  <joint name=\"joint7\" type=\"revolute\">\n    <origin rpy=\"1.5707963267948966 0.0 0.0\" xyz=\"0.088 0.0 0.0\"/>\n    <parent link=\"link6\"/>\n    <child link=\"link7\"/>\n    <axis xyz=\"0 0 1\"/>\n    <limit effort=\"12.0\" lower=\"-2.8973\" upper=\"2.8973\" velocity=\"2.61\"/>\n  </joint>\n  <link name=\"link8\"/>\n  <joint name=\"joint8\" type=\"fixed\">\n    <origin rpy=\"0.0 0.0 0.0\" xyz=\"0.0 0.0 0.107\"/>\n    <parent link=\"link7\"/>\n    <child link=\"link8\"/>\n  </joint>\n</robot>\n";
Expand description

The Franka Emika Robot (FER)’s arm, as a URDF the native_backend can evaluate.

An FER has no GetRobotModel, so this file is not something the robot serves: it is a mesh-free, arm-only description built here — the joint origins and axes of franka_description’s fer_joint1..8, plus link inertial parameters identified from an FER’s own libfcimodels_x64.so by tools/fer-model-fit. Model::native_fer parses it.

The ten inertial parameters per link are a base-parameter-equivalent set, chosen to reproduce the robot’s model, and not a physically realisable description of each casting; see docs/book/src/reference/model.md.