Force

HRIM defines a force sensor as
A device that measures the tension/compression/shear force on 1-3 axis.

So, apart from the common requirements (ID, Status, Power, Specs and Simulation, detailed in HRIM component model section), all force sensors will contain a topic referring to publishing a force reading.

HRIM component model: force sensor
URI XML MODEL ABSTRACTION CLASS
M/O
SHORT DESCRIPTION
/hrim_sensor_force_<instance_id>/id generic/id.xml topic
(Pub)
M Component identification.
/hrim_sensor_force_<instance_id>/status generic/status.xml topic
(Pub)
M How the module is working.
/hrim_sensor_force_<instance_id>/power generic/power.xml topic
(Pub)
M Describes the power supply type and give the information about the module power consumption.
/hrim_sensor_force_<instance_id>/specs_comm generic/specs_comm.xml topic
(Pub)
M Published the capabilities in term of communicaction that the component offers.
/hrim_sensor_force_<instance_id>/state_comm generic/state_comm.xml topic
(Pub)
M Published the resources that the component is using at the moment.
/hrim_sensor_force_<instance_id>/module_3d generic/module_3d.xml topic
(Pub)
M Ask for the 3D model of the HRIM component.
/hrim_sensor_force_<instance_id>/module_urdf generic/module_urdf.xml topic
(Pub)
M Ask for the information of the HRIM component's 3D model.
/hrim_sensor_force_<instance_id>/specs sensor/force/topics/specs.xml topic
(Pub)
M Device features, separated into each axis.
/hrim_sensor_force_<instance_id>/force sensor/force/topics/force.xml topic
(Pub)
M Force reading, separated into each axis.

Note: the {BASE} wildcard references the base topics all modules contain, defined in the HRIM component model page.

The XML notation would look like:

<?xml version="1.0"?>
<module name="force" type="sensor" description="defines the messages to interact with a force sensor">

  <mandatory>

    {BASE}

    <topic name="specs" type="publish" description="device features" fileName="SpecsForce">
      <property name="header" type="header" fileName="Header">
        <property name="time" type="time" fileName="Time">
          <property name="sec" type="int32" unit="second">
            <value></value>
          </property>
          <property name="nanosec" type="uint32" unit="nanosecond">
            <value></value>
          </property>
        </property>
        <property name="frame_id" type="string" description="transform frame with which this data is associated">
          <value></value>
        </property>
      </property>
      <property name="axis_specs" type="specsForceAxis[3]" description="specs related to each of the measured axes" fileName="SpecsForceAxis">
        <property name="axis" type="uint8" unit="enum" enum='{"X": 0, "Y": 1, "Z": 2}' description="the axis the specs describe">
          <value></value>
        </property>
        <property name="max_force" type="uint16" unit="newton" description="maximum measurable force">
          <value></value>
        </property>
        <property name="resolution" type="float32" unit="newton" description="minimum detectable difference">
          <value></value>
        </property>
        <property name="bidirectional" type="boolean" description="if the axis also measures negative values or not">
          <value></value>
        </property>
        <property name="safe_overload" type="uint16" unit="percentage" description="maximum force the sensor withstands safely on this axis, in reference to the max_force value">
          <value></value>
        </property>
        <property name="max_overload" type="uint16" unit="percentage" description="maximum force the sensor withstands before total breakdown on this axis, in reference to the max_force value">
          <value></value>
        </property>
        <property name="min_error_margin" type="float32" unit="+- percentage" description="average error margin while inside the ideal ranges of this axis">
          <value></value>
        </property>
        <property name="max_error_margin" type="float32" unit="+- percentage" description="average error margin while outside the ideal ranges of this axis">
          <value></value>
        </property>
      </property>

      <property name="max_rate" type="uint8" unit="hertz" description="maximum amount of measurements per second">
        <value></value>
      </property>

      <property name="min_ideal_temp" type="float32" unit="celsius" description="minimum temperature where the error margin is at it's lowest">
        <value></value>
      </property>

      <property name="max_ideal_temp" type="float32" unit="celsius" description="maximum temperature where the error margin is at it's lowest">
        <value></value>
      </property>

      <property name="min_operating_temp" type="float32" unit="celsius" description="minimum operating temperature">
        <value></value>
      </property>

      <property name="max_operating_temp" type="float32" unit="celsius" description="maximum operating temperature">
        <value></value>
      </property>

    </topic>

    <topic name="force" type="publish" description="single measurement from a force sensor" fileName="Force">
      <property name="header" type="header" fileName="Header">
        <property name="time" type="time" fileName="Time">
          <property name="sec" type="int32" unit="second">
            <value></value>
          </property>
          <property name="nanosec" type="uint32" unit="nanosecond">
            <value></value>
          </property>
        </property>
        <property name="frame_id" type="string" description="transform frame with which this data is associated">
          <value></value>
        </property>
      </property>
      <property name="axis_forces" type="forceAxis[3]" description="separate force readings from each measured axis" fileName="ForceAxis">
        <property name="axis" type="uint8" unit="enum" enum='{"X": 0, "Y": 1, "Z": 2}' description="the axis of the measurement">
          <value></value>
        </property>
        <property name="force" type="float64" unit="newton" description="reading of the force measuring">
          <value></value>
        </property>
      </property>
    </topic>

  </mandatory>

</module>