Rotary servomotor

HRIM defines a rotary servomotor as
A smart actuator that creates a circular movement and allows for precise control of position, velocity, effort and, sometimes acceleration.

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

HRIM component model: RotaryServo
URI XML MODEL ABSTRACTION CLASS
M/O
SHORT DESCRIPTION
/hrim_actuator_rotaryservo_<instance_id>/id generic/id.xml topic
(Pub)
M Component identification.
/hrim_actuator_rotaryservo_<instance_id>/status generic/status.xml topic
(Pub)
M How the module is working.
/hrim_actuator_rotaryservo_<instance_id>/power generic/power.xml topic
(Pub)
M Describes the power supply type and give the information about the module power consumption.
/hrim_actuator_rotaryservo_<instance_id>/specs_comm generic/specs_comm.xml topic
(Pub)
M Published the capabilities in term of communicaction that the component offers.
/hrim_actuator_rotaryservo_<instance_id>/state_comm generic/state_comm.xml topic
(Pub)
M Published the resources that the component is using at the moment.
/hrim_actuator_rotaryservo_<instance_id>/module_3d generic/module_3d.xml topic
(Pub)
M Ask for the 3D model of the HRIM component.
/hrim_actuator_rotaryservo_<instance_id>/module_urdf generic/module_urdf.xml topic
(Pub)
M Ask for the information of the HRIM component's 3D model.
/hrim_actuator_rotaryservo_<instance_id>/specs actuator/servo/topics/specs.xml topic
(Pub)
M Device features.
/hrim_actuator_rotaryservo_<instance_id>/goal actuator/servo/topics/goal.xml topic
(Pub)
M Control the position, velocity or/and effort.
/hrim_actuator_rotaryservo_<instance_id>/state actuator/servo/topics/state.xml topic
(Pub)
O Motor condition and the reason in case of error.
/hrim_actuator_rotaryservo_<instance_id>/acceleration actuator/servo/topics/acceleration.xml topic
(Pub)
O Control the acceleration of the servomotor. The integration of the acceleration characteristic is needed.
/hrim_actuator_rotaryservo_<instance_id>/temperature actuator/servo/topics/temperature.xml topic
(Pub)
O Motor internal temperature. Also informs if there is temperature error. The integration of a temperature sensor is needed.
/hrim_actuator_rotaryservo_<instance_id>/reconfiguration actuator/servo/topics/reconfiguration.xml topic
(Pub)
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
origin float rad M Zero/Started point.
joint_name string M Name of the joint, usefull to control robotic arms.
publish_rate int Hz O Related to state topic
Publishing rate of the state topic.
NOTE: Mandatory if status topic is added.
min_temperature float ºC O Related to temperature topic
Minimum operating temperature.
NOTE: Mandatory if temperature topic is added.
max_temperature float ºC O Related to temperature topic
Maximum operating temperature.
NOTE: Mandatory if temperature topic is added.

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="rotaryservomotor" type="actuator" description="defines the messages to interact with a servomotor">
  <mandatory>

    {BASE}

    <topic name="specs" type="publish" description="device features" fileName="SpecsRotaryServo">
      <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="control_type" type="uint8" unit="enum" enum='{"CONTROL_TYPE_NONE": 0, "CONTROL_TYPE_POSITION": 1, "CONTROL_TYPE_EFFORT": 2, "CONTROL_TYPE_VELOCITY": 3, "CONTROL_TYPE_POSITION_VELOCITY": 4, "CONTROL_TYPE_POSITION_EFFORT": 5, "CONTROL_TYPE_VELOCITY_EFFORT": 6, "CONTROL_TYPE_POSITION_VELOCITY_EFFORT": 7}' description="rotary servomotor control type">
        <value></value>
      </property>
      <property name="range_min" type="float64" unit="radian" description="minimum work range">
        <value></value>
      </property>
      <property name="range_max" type="float64" unit="radian" description="maximum work range">
        <value></value>
      </property>
      <property name="precision" type="float64" unit="radian" description="angular precision">
        <value></value>
      </property>
      <property name="rated_speed" type="float64" unit="radians per second" description="servomotor speed">
        <value></value>
      </property>
      <property name="reachable_speed" type="float64" unit="radians per second" description="maximum speed">
        <value></value>
      </property>
      <property name="rated_torque" type="float64" unit="newtons per metre" description="servomotor torque">
        <value></value>
      </property>
      <property name="reachable_torque" type="float64" unit="newtons per metre" description="peak torque">
        <value></value>
      </property>
      <property name="temperature_range_min" type="float64" unit="celsius" description="minimum operational temperature">
        <value></value>
      </property>
      <property name="temperature_range_max" type="float64" unit="celsius" description="maximum operational temperature">
        <value></value>
      </property>
    </topic>

    <topic name="goal" type="publish" description="control the position, velocity or/and effort" fileName="GoalRotaryServo">
      <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="control_type" type="uint8" unit="enum" enum='{"CONTROL_TYPE_NONE": 0, "CONTROL_TYPE_POSITION": 1, "CONTROL_TYPE_EFFORT": 2, "CONTROL_TYPE_VELOCITY": 3, "CONTROL_TYPE_POSITION_VELOCITY": 4, "CONTROL_TYPE_POSITION_EFFORT": 5, "CONTROL_TYPE_VELOCITY_EFFORT": 6, "CONTROL_TYPE_POSITION_VELOCITY_EFFORT": 7}' description="rotary servomotor control type">
        <value></value>
      </property>
      <property name="position" type="float64" unit="radian" description="goal position">
        <value></value>
      </property>
      <property name="velocity" type="float32" unit="radians per second" description="movement velocity">
        <value></value>
      </property>
      <property name="effort" type="float32" unit="newtons per metre" description="movement torque">
        <value></value>
      </property>
    </topic>

    <param name="origin" type="float" unit="radian" description="zero/starting point">
      <value></value>
    </param>

    <param name="joint_name" type="string" description="name of the joint">
      <value></value>
    </param>

  </mandatory>
  <optional>

    <topic name="state" type="publish" description="motor condition and the reason in case of error" fileName="StateRotaryServo">
      <property name="header" type="header" description="motor state is at this time" 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="goal" type="float64" unit="radian" description="commanded position">
        <value></value>
      </property>
      <property name="position" type="float64" unit="radian" description="current position encoder">
        <value></value>
      </property>
      <property name="error" type="float64" unit="radian" description="difference between current and goal positions">
        <value></value>
      </property>
      <property name="velocity" type="float64" unit="radians per second" description="current velocity">
        <value></value>
      </property>
      <property name="effort" type="float64" unit="newtons per metre" description="current effort of the actuator">
        <value></value>
      </property>
      <property name="load" type="float64" unit="radian" description="load imposed on the motor">
        <value></value>
      </property>
      <property name="moving" type="boolean" description="whether the motor is currently in motion">
        <value></value>
      </property>
      <property name="fault" type="uint8" unit="enum" enum='{"FAULT_NONE": 0, "FAULT_CURRENT": 1, "FAULT_TEMPERATURE": 2, "FAULT_BUS_VOLTAGE": 3, "FAULT_BRIDGE_DRIVER": 4}' description="fault cause">
        <value></value>
      </property>
      <property name="control_type" type="uint8" unit="enum" enum='{"CONTROL_TYPE_NONE": 0, "CONTROL_TYPE_POSITION": 1, "CONTROL_TYPE_EFFORT": 2, "CONTROL_TYPE_VELOCITY": 3, "CONTROL_TYPE_POSITION_VELOCITY": 4, "CONTROL_TYPE_POSITION_EFFORT": 5, "CONTROL_TYPE_VELOCITY_EFFORT": 6, "CONTROL_TYPE_POSITION_VELOCITY_EFFORT": 7}' description="rotary servomotor control type">
        <value></value>
      </property>
    </topic>

    <topic name="temperature" type="publish" description="motor internal temperature, also informs if there is temperature error" fileName="Temperature">
      <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="temperature" type="float64" unit="celsius" description="current temperature">
        <value></value>
      </property>
      <property name="temperature_error" type="boolean" description="whether current temperature is outside of the component's allowed range">
        <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>

    <topic name="acceleration" type="publish" description="control the acceleration" fileName="GoalAngularAcceleration">
      <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="acceleration" type="float32" unit="radians per second squared" description="angular acceleration">
        <value></value>
      </property>
    </topic>

    <param name="publish_rate" type="int" unit="hertz" description="publishing rate of the state topic">
      <value></value>
    </param>

    <param name="min_temperature" type="float" unit="celsius" description="minimum operating temperature">
      <value></value>
    </param>

    <param name="max_temperature" type="float" unit="celsius" description="maximum operating temperature">
      <value></value>
    </param>

  </optional>
</module>