IMU

HRIM defines an inertial measurement unit (IMU) as
An electronic device that measures linear and angular motion usually with a triad of gyroscopes and triad of accelerometers.

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

HRIM component model: IMU
URI XML MODEL ABSTRACTION CLASS
M/O
SHORT DESCRIPTION
/hrim_sensor_imu_<instance_id>/id generic/id.xml topic
(Pub)
M Component identification.
/hrim_sensor_imu_<instance_id>/status generic/status.xml topic
(Pub)
M How the module is working.
/hrim_sensor_imu_<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_imu_<instance_id>/specs_comm generic/specs_comm.xml topic
(Pub)
M Published the capabilities in term of communicaction that the component offers.
/hrim_sensor_imu_<instance_id>/state_comm generic/state_comm.xml topic
(Pub)
M Published the resources that the component is using at the moment.
/hrim_sensor_imu_<instance_id>/module_3d generic/module_3d.xml topic
(Pub)
M Ask for the 3D model of the HRIM component.
/hrim_sensor_imu_<instance_id>/module_urdf generic/module_urdf.xml topic
(Pub)
M Ask for the information of the HRIM component's 3D model.
/hrim_sensor_imu_<instance_id>/specs sensor/imu/topics/specs.xml topic
(Pub)
M Device features.
/hrim_sensor_imu_<instance_id>/imu sensor/imu/topics/imu.xml topic
(Pub)
M Accelerometers and gyroscopes.
/hrim_sensor_imu_<instance_id>/compass sensor/imu/topics/compass.xml topic
(Pub)
O Magnetometers. The integration of an magnetometer sensor is needed.
/hrim_sensor_imu_<instance_id>/reconfiguration sensor/imu/topics/reconfiguration.xml topic
(Sub)
O Dynamic reconfiguration of H-ROS systems. The integration of an IMU sensor is needed.
Parameters
PARAMETER NAME DATA TYPE UNIT CLASS
M/O
SHORT DESCRIPTION
frame_id string M Sets the TF frame from which the IMU is publishing.
gyro_fs uint8 index M Gyroscope full scale to use (defined in specs topic).
accel_fs uint8 index M Accelerometer full scale to use (defined in specs topic).
mag_fs uint8 index O Magnetometer full scale to use (defined in specs topic).

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="imu" type="sensor" description="defines the messages to interact with a inertial motion unit sensor">
  <mandatory>

    {BASE}

    <topic name="specs" type="publish" description="device features" fileName="SpecsIMU">
      <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="fs_gyro_ranges" type="float32[]" unit="radians per second" description="max gyro readings, most to less precise (+-rad/s)">
        <value></value>
      </property>
      <property name="fs_gyro_resolution" type="float32[]" unit="radians per second" description="resolution of reading in each full scale range (rad/s)">
        <value></value>
      </property>
      <property name="fs_accel_ranges" type="float32[]" unit="meters per second squared" description="max accel readings, most to less precise (+-m/s^2)">
        <value></value>
      </property>
      <property name="fs_accel_resolution" type="float32[]" unit="meters per second squared" description="resolution of reading in each full scale range (m/s^2)">
        <value></value>
      </property>
      <property name="fs_mag_range" type="float32[]" unit="micro tesla" description="+- max mag readings, most to less precise (micro T)">
        <value></value>
      </property>
      <property name="fs_mag_resolution" type="float32[]" unit="micro tesla" description="resolution of reading in each full scale range (micro T)">
        <value></value>
      </property>
      <property name="max_rate" type="uint16[3]" unit="hertz" description="maximum data publishing rate per type [gyro,accel,mag] (Hz)">
        <value></value>
      </property>
      <property name="min_ideal_temp" type="float32" unit="celsius" description="minimum temperature where the sensor's error margin is at it's lowest (C)">
        <value></value>
      </property>
      <property name="max_ideal_temp" type="float32" unit="celsius" description="maximum temperature where the sensor's error margin is at it's lowest (C)">
        <value></value>
      </property>
      <property name="min_operating_temp" type="float32" unit="celsius" description="minimum temperature before breakdown (C)">
        <value></value>
      </property>
      <property name="max_operating_temp" type="float32" unit="celsius" description="maximum temperature before breakdown (C)">
        <value></value>
      </property>
      <property name="min_gyro_error_margin" type="float32" unit="radians per second" description="gyro variability in reading inside ideal temperature ranges, based on first full scale range (+-rad/s)">
        <value></value>
      </property>
      <property name="max_gyro_error_margin" type="float32" unit="radians per second" description="gyro variability in reading outside ideal temperature ranges, based on first full scale range (+-rad/s)">
        <value></value>
      </property>
      <property name="min_accel_error_margin" type="float32" unit="meters per second squared" description="accel variability in reading inside ideal temperature ranges, based on first full scale range (+-m/s^2)">
        <value></value>
      </property>
      <property name="max_accel_error_margin" type="float32" unit="meters per second squared" description="accel variability in reading outside ideal temperature ranges, based on first full scale range (+-m/s^2)">
        <value></value>
      </property>
      <property name="min_mag_error_margin" type="float32" unit="micro tesla" description="mag variability in reading inside ideal temperature ranges, based on first full scale range (+-micro T)">
        <value></value>
      </property>
      <property name="max_mag_error_margin" type="float32" unit="micro tesla" description="mag variability in reading outside ideal temperature ranges, based on first full scale range (+-micro T)">
        <value></value>
      </property>
    </topic>

    <topic name="imu" type="publish" description="accelerometers and gyroscopes" fileName="IMU">
      <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="orientation" type="quaternion" fileName="Quaternion">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
        <property name="w" type="float64">
          <value></value>
        </property>
      </property>
      <property name="orientation_covariance" type="float64[9]">
        <value></value>
      </property>
      <property name="angular_velocity" type="vector3" fileName="Vector3">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
      </property>
      <property name="angular_velocity_covariance" type="float64[9]">
        <value></value>
      </property>
      <property name="linear_acceleration" type="vector3" fileName="Vector3">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
      </property>
      <property name="linear_acceleration_covariance" type="float64[9]">
        <value></value>
      </property>
    </topic>

    <param name="frame_id" type="string" description="tf frame from which the torque sensor is publishing">
      <value></value>
    </param>

    <param name="gyro_fs" type="uint8" description="gyroscope full scale to use (defined in specs topic)">
      <value></value>
    </param>

    <param name="accel_fs" type="uint8" description="accelerometer full scale to use (defined in specs topic)">
      <value></value>
    </param>

  </mandatory>
  <optional>

    <topic name="compass" type="publish" description="magnetometers. The integration of an magnetometer sensor is needed" fileName="Compass">
      <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="magnetic_field" type="vector3" fileName="Vector3" unit="micro tesla">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
      </property>
      <property name="magnetic_field_covariance" type="float64[9]">
        <value></value>
      </property>
    </topic>

    <topic name="reconfiguration" type="publish" description="dynamic reconfiguration of H-ROS systems" fileName="Reconfiguration">
      <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="orientation" type="quaternion" fileName="Quaternion">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
        <property name="w" type="float64">
          <value></value>
        </property>
      </property>
      <property name="orientation_covariance" type="float64[9]">
        <value></value>
      </property>
      <property name="angular_velocity" type="vector3" fileName="Vector3">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
      </property>
      <property name="angular_velocity_covariance" type="float64[9]">
        <value></value>
      </property>
      <property name="linear_acceleration" type="vector3" fileName="Vector3">
        <property name="x" type="float64">
          <value></value>
        </property>
        <property name="y" type="float64">
          <value></value>
        </property>
        <property name="z" type="float64">
          <value></value>
        </property>
      </property>
      <property name="linear_acceleration_covariance" type="float64[9]">
        <value></value>
      </property>
    </topic>

    <param name="mag_fs" type="uint8" description="magnetometer full scale to use (defined in specs topic)">
      <value></value>
    </param>

  </optional>
</module>