Arm

Work in progress

There are many different types of robotic arm categorized by their mechanical structure:

  • Cartesian robot / Gantry robot: robots have three joints that are coincident with the standard X-Y-Z Cartesian axes. (brigde crane is included)
  • Cylindrical robot: have any number of joints that operate on a cylindrical axis, normally rotating about one fixed rod.
  • Spherical robot / Polar robot: are those with joints that allow it full rotation throughout a spherical range.
  • SCARA robot: have two parallel rotary joints to allow full movement throughout a plane, typically for pick-and-place work.
  • Articulated robot: are used for complex assembly operations, and consist of three or more rotary joints.
  • Parallel robot:have three concurrent prismatic or rotary joints, and allow for tilting of heavy or sensitive platforms.
  • Anthropomorphic robot: It is shaped in a way that resembles a human hand, i.e. with independent fingers and thumbs.
HRIM defines an arm as
A mechanism with similar functions to a human arm.

Although there are different types, they all have the same objective, so, apart from the common requirements (ID, Status, Power, Specs and Simulation, detailed in HRIM component model section), all the arms will contain a topic referring to reach a point regarding its own origin.

  • Fix the origin: The standarization requires that all the arms has the same started point. Discover the defined point of origin for each type of robot. As each manufacturer fix a origin point wherever he want, the first step that the user has to do is verify the origin on the specifications. In case they are different from those proposed by us, the user will has to change it using the mandatory parameters, to understand it better see fix the origin example.
HRIM component model: Arm
URI XML MODEL ABSTRACTION CLASS
M/O
SHORT DESCRIPTION
/hrim_composite_arm_<instance_id>/id generic/id.xml topic
(Pub)
M Component identification.
/hrim_composite_arm_<instance_id>/status generic/status.xml topic
(Pub)
M How the module is working.
/hrim_composite_arm_<instance_id>/power generic/power.xml topic
(Pub)
M Describes the power supply type and give the information about the module power consumption.
/hrim_composite_arm_<instance_id>/specs_comm generic/specs_comm.xml topic
(Pub)
M Published the capabilities in term of communicaction that the component offers.
/hrim_composite_arm_<instance_id>/state_comm generic/state_comm.xml topic
(Pub)
M Published the resources that the component is using at the moment.
/hrim_composite_arm_<instance_id>/module_3d generic/module_3d.xml topic
(Pub)
M Ask for the 3D model of the HRIM component.
/hrim_composite_arm_<instance_id>/module_urdf generic/module_urdf.xml topic
(Pub)
M Ask for the information of the HRIM component's 3D model.
/hrim_composite_arm_<instance_id>/specs composite/arm/topics/specs.xml topic
(Pub)
M Device features.
/hrim_composite_arm_<instance_id>/goal_end composite/arm/topics/goalEnd.xml service M End-effector position.
/hrim_composite_arm_<instance_id>/joint_states composite/arm/topics/jointStates.xml topic
(Pub)
M State of the joints
/hrim_composite_arm_<instance_id>/joint_movement composite/arm/topics/jointMovement.xml service M Move the joints.
/hrim_composite_arm_<instance_id>/joint_trajectory composite/arm/topics/jointTrajectory.xml service M Create a joint trajectory.
/hrim_composite_arm_<instance_id>/rc composite/arm/topics/rc.xml topic
(Sub)
O Remote control.
/hrim_composite_arm_<instance_id>/reconfiguration composite/arm/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
arm_name string - M The name of the arm.
joint_names string[] - M Names of the joint of the arm.
x_angle_y_direction float64 rad M Related to fix the origin
Turn the X axis in the direction where the Y axis is.
x_angle_z_direction float64 rad M Related to fix the origin
Turn the X axis in the direction where the Z axis is.
y_angle_x_direction float64 rad M Related to fix the origin
Turn the Y axis in the direction where the X axis is.
y_angle_z_direction float64 rad M Related to fix the origin
Turn the Y axis in the direction where the Z axis is.
z_direction bool [0/1] M Related to fix the origin
True: the z-axis direction is okey/ False: reverse direction.
x_position double m M Related to fix the origin
X axis position according to the marked origin
y_position double m M Related to fix the origin
Y axis position according to the marked origin
z_position double m M Related to fix the origin
Z axis position according to the marked origin
rc_max_velocity double rad/s O Related to rc topic
Maximum angular velocity value through joystick control.
NOTE: Mandatory if rc topic is added.
rc_max_yaw double rad/s O Related to rc topic
Maximum turning angle through joystick control.
NOTE: Mandatory if rc topic is added.

Origin setting related parameters are affected by the previous ones

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="arm" type="composite" description="defines the messages to interact with an H-ROS arm">
  <mandatory>

    {BASE}

    <topic name="specs" type="publish" description="device features" fileName="SpecsArm">
      <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="arm_type" type="uint8" unit="enum" enum='{"ARM_TYPE_CARTESIAN": 0, "ARM_TYPE_CYLIDRICAL": 1, "ARM_TYPE_SPHERICAL": 2, "ARM_TYPE_SCARA": 3, "ARM_TYPE_ARTICULATED": 4, "ARM_TYPE_PARALLEL": 5}' description="robotic arm type">
        <value></value>
      </property>
      <property name="dof" type="uint32" description="amount of degrees of freedom">
        <value></value>
      </property>
      <property name="max_payload" type="float32" unit="kilogram" description="maximum payload">
        <value></value>
      </property>
      <property name="x_axis" type="boolean" description="whether the robot can move in the x axis">
        <value></value>
      </property>
      <property name="y_axis" type="boolean" description="whether the robot can move in the y axis">
        <value></value>
      </property>
      <property name="z_axis" type="boolean" description="whether the robot can move in the z axis">
        <value></value>
      </property>
      <property name="max_x_reach" type="float32" unit="metre" description="x maximum position relative to the origin">
        <value></value>
      </property>
      <property name="max_y_reach" type="float32" unit="metre" description="y maximum position relative to the origin">
        <value></value>
      </property>
      <property name="max_z_reach" type="float32" unit="metre" description="z maximum position relative to the origin">
        <value></value>
      </property>
    </topic>

    <topic name="goal_end" type="service" description="end-effector position" fileName="GoalEndPosition">
      <property name="goal_x" type="float32" description="x position goal relative to origin">
        <value></value>
      </property>
      <property name="goal_y" type="float32" description="y position goal relative to origin">
        <value></value>
      </property>
      <property name="goal_z" type="float32" description="z position goal relative to origin">
        <value></value>
      </property>
      <property name="velocity" type="float32" unit="meters per second" description="velocity of the movements">
        <value></value>
      </property>
      <response>
        <property name="success" type="boolean">
          <value></value>
        </property>
      </response>
    </topic>

    <topic name="joint_states" type="publish" description="state of the joints" fileName="JointStates">
      <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_VELOCITY" : 2 , "CONTROL_TYPE_EFFORT" : 3 , "CONTROL_TYPE_POSITION_VELOCITY" : 4 , "CONTROL_TYPE_POSITION_EFFORT" : 5 , "CONTROL_TYPE_VELOCITY_EFFORT" : 6 , "CONTROL_TYPE_POSITION_VELOCITY_EFFORT" : 7}' description="arm control type">
        <value></value>
      </property>
      <property name="joint_names" type="string[]" description="parameter that each servomotor has">
        <value></value>
      </property>
      <property name="position" type="float64[]" unit="radian" description="servomotor position">
        <value></value>
      </property>
      <property name="velocity" type="float64[]" unit="radians per second" description="servomotor velocity">
        <value></value>
      </property>
      <property name="effort" type="float64[]" unit="newtons per metre" description="servomotor torque">
        <value></value>
      </property>
    </topic>

    <topic name="joint_movement" type="service" description="move the joints" fileName="GoalJointMovement">
      <property name="control_type" type="uint8" unit="enum" enum='{"CONTROL_TYPE_NONE" : 0 , "CONTROL_TYPE_POSITION" : 1 , "CONTROL_TYPE_VELOCITY" : 2 , "CONTROL_TYPE_EFFORT" : 3 , "CONTROL_TYPE_POSITION_VELOCITY" : 4 , "CONTROL_TYPE_POSITION_EFFORT" : 5 , "CONTROL_TYPE_VELOCITY_EFFORT" : 6 , "CONTROL_TYPE_POSITION_VELOCITY_EFFORT" : 7}' description="arm control type">
        <value></value>
      </property>
      <property name="joint_names" type="string[]" description="parameter that each servomotor has">
        <value></value>
      </property>
      <property name="position" type="float64[]" unit="radian" description="servomotor position">
        <value></value>
      </property>
      <property name="velocity" type="float64[]" unit="radians per second" description="servomotor velocity">
        <value></value>
      </property>
      <property name="effort" type="float64[]" unit="newtons per metre" description="servomotor torque">
        <value></value>
      </property>
      <response>
        <property name="success" type="boolean">
          <value></value>
        </property>
      </response>
    </topic>

    <topic name="joint_trajectory" type="service" description="create a joint trajectory" fileName="GoalJointTrajectory">
      <property name="joint_names" type="string[]">
        <value></value>
      </property>
      <property name="points" type="jointTrajectoryPoint[]" fileName="JointTrajectoryPoint">
        <property name="positions" type="float64[]" unit="radian">
          <value></value>
        </property>
        <property name="velocities" type="float64[]" unit="radians per second">
          <value></value>
        </property>
        <property name="accelerations" type="float64[]" unit="radians per second squared">
          <value></value>
        </property>
        <property name="effort" type="float64[]" unit="newtons per metre">
          <value></value>
        </property>
        <property name="time" type="float32" unit="second">
          <value></value>
        </property>
      </property>
      <response>
        <property name="success" type="boolean">
          <value></value>
        </property>
      </response>
    </topic>

    <param name="arm_name" type="string" description="The name of the arm.">
      <value></value>
    </param>

    <param name="joint_names" type="string[]" description="Names of the joint of the arm.">
      <value></value>
    </param>

    <param name="x_angle_y_direction" type="float64" unit="rad" description="Related to fix the origin: Turn the X axis in the direction where the Y axis is">
      <value></value>
    </param>

    <param name="x_angle_z_direction" type="float64" unit="rad" description="Related to fix the origin: Turn the X axis in the direction where the Z axis is">
      <value></value>
    </param>

    <param name="y_angle_x_direction" type="float64" unit="rad" description="Related to fix the origin: Turn the Y axis in the direction where the X axis is">
      <value></value>
    </param>

    <param name="y_angle_z_direction" type="float64" unit="rad" description="Related to fix the origin: Turn the Y axis in the direction where the Z axis is">
      <value></value>
    </param>

    <param name="z_direction" type="bool" unit="[0/1]" description="Related to fix the origin: True: the z-axis direction is okey/ False: reverse direction">
      <value></value>
    </param>

    <param name="x_position" type="double" unit="m" description="Related to fix the origin: X axis position according to the marked origin">
      <value></value>
    </param>

    <param name="y_position" type="double" unit="m" description="Related to fix the origin: Y axis position according to the marked origin">
      <value></value>
    </param>

    <param name="z_position" type="double" unit="m" description="Related to fix the origin: Z axis position according to the marked origin">
      <value></value>
    </param>

  </mandatory>
  <optional>

    <topic name="rc" type="subscribe" description="remote control" fileName="RC">
      <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="axes" type="float32[]" description="axis measurements from a joystick">
        <value></value>
      </property>
      <property name="buttons" type="int32[]" description="buttons from a controller">
        <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="rc_max_velocity" type="double" unit="radians per second" description="maximum angular velocity value through joystick control">
      <value></value>
    </param>

    <param name="rc_max_yaw" type="double" unit="radians per second" description="maximum turning angle through joystick control">
      <value></value>
    </param>

  </optional>
</module>