Mobile base

Work in progress

There are some different types of robotic mobile bases categorized by their mechanical structure:

  • Legged robot: use mechanical limbs for movement. They are more versatile than wheeled robots and can traverse many different terrains, though these advantages require increased complexity and power consumption. Legged robots often imitate legged animals, such as humans or insects. The numbers of legs varies depending the robot, for example one-legged SALTO robot inspired by jumping robots, 2 legged robot like a humanoid, quadrupedal robot, hexapod etc.
  • Wheeled robot: are robots that navigate around the ground using motorized wheels to propel themselves. This design is simpler than using treads or legs and by using wheels they are easier to design, build, and program for movement in flat, not-so-rugged terrain. Most wheeled robots use differential steering, which uses separately driven wheels for movement. They can change direction by rotating each wheel at a different speed. There may be additional wheels that are not driven by a motor these extra wheels help keep it balanced. Look different types.
  • Tracked vehicle: also called track-type tractor, tractor crawler, or track-laying vehicle, is a vehicle that runs on continuous tracks instead of wheels. This kind of mobile robot also has varieties, for example there are tracked robot with flipper-stabilizer arm used to climb stairs among other things.
HRIM defines a mobile base as
An automatic machine that is capable of locomotion.

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 mobile bases will contain a topic referring a movement around its environment.

HRIM component model: MobileBase
URI XML MODEL ABSTRACTION CLASS
M/O
SHORT DESCRIPTION
/hrim_composite_mobilebase_<instance_id>/id generic/id.xml topic
(Pub)
M Component identification.
/hrim_composite_mobilebase_<instance_id>/status generic/status.xml topic
(Pub)
M How the module is working.
/hrim_composite_mobilebase_<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_mobilebase_<instance_id>/specs_comm generic/specs_comm.xml topic
(Pub)
M Published the capabilities in term of communicaction that the component offers.
/hrim_composite_mobilebase_<instance_id>/state_comm generic/state_comm.xml topic
(Pub)
M Published the resources that the component is using at the moment.
/hrim_composite_mobilebase_<instance_id>/module_3d generic/module_3d.xml topic
(Pub)
M Ask for the 3D model of the HRIM component.
/hrim_composite_mobilebase_<instance_id>/module_urdf generic/module_urdf.xml topic
(Pub)
M Ask for the information of the HRIM component's 3D model.
/hrim_composite_mobilebase_<instance_id>/specs composite/mobilebase/topics/specsLegged.xml
composite/mobilebase/topics/specsWheeled.xml
composite/mobilebase/topics/specsTracked.xml
topic
(Pub)
M Device features.
/hrim_composite_mobilebase_<instance_id>/goal composite/mobilebase/topics/goal.xml topic
(Sub)
M Movement orders.
/hrim_composite_mobilebase_<instance_id>/rc composite/mobilebase/topics/rc.xml topic
(Sub)
O Connect to remote control.
/hrim_composite_mobilebase_<instance_id>/reconfiguration composite/mobilebase/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
rc_max_velocity double m/s O Related to rc topic
Maximum linear velocity value through joystick control.
NOTE: Mandatory if rc topic is added.
rc_max_yaw double rad/s O Related to rc topic
Maximum vehicle turning angle through joystick control.
NOTE: Mandatory if rc 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="mobilebase" type="composite" description="defines the messages to interact with a composite H-ROS mobile base">
  <mandatory>

    {BASE}

    <topic name="specs" type="publish" description="device features" fileName="SpecsWheeled">
      <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="max_wheeled_velocity" type="float32" unit="" description="maximum vehicle velocity">
        <value></value>
      </property>
      <property name="number_wheel" type="uint16" unit="" description="how many weels the base has">
        <value></value>
      </property>
      <property name="number_motor" type="uint16" unit="" description="how many motors the base has">
        <value></value>
      </property>
    </topic>

    <topic name="specs" type="publish" description="device features" fileName="SpecsTracked">
      <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="max_tracked_velocity" type="float32" unit="" description="maximum vehicle velocity">
        <value></value>
      </property>
      <property name="flipper_stabilizer" type="boolean" unit="" description="True: it contains this characteristic/False: do not">
        <value></value>
      </property>
    </topic>

    <topic name="specs" type="publish" description="device features" fileName="SpecsLegged">
      <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="max_legged_velocity" type="float32" unit="" description="maximum vehicle velocity">
        <value></value>
      </property>
      <property name="number_legs" type="uint16" unit="" description="how many legs the base has">
        <value></value>
      </property>
      <property name="number_dof" type="uint16" unit="" description="how many degrees of freedom">
        <value></value>
      </property>
    </topic>

    <topic name="goal_position" type="publish" description="movement orders" fileName="GoalMobileBase">
      <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="velocity" type="float32" unit="metres per second" description="vehicle velocity, negative = backwards">
        <value></value>
      </property>
      <property name="direction_angle" type="float32" description="turning angle, positive = right, negative = left">
        <value></value>
      </property>
    </topic>

  </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="meters per second" description="maximum linear velocity value through joystick control">
      <value></value>
    </param>

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

  </optional>
</module>