Control Modes

From Wiki for iCub and Friends
Jump to: navigation, search

Latest updates (Friday 25, July 2014)

The information of this page applies to:

  • Yarp version > 2.3.63
  • icub-main version > 1.1.15
  • firmware of motor control board build >= 80 (can protocol 1.2)

iCub Control Modes and Interaction Modes

Yarp 2.3.63 and the new iCub firmware (build 80) introduces some major changes in the iCub control policy. The most important are:

  • automatic switching of joint control mode is no more supported[1]. In the past, user was allowed to send position and velocity commands to a joint, regardless its current status (the control mode of the joint was automatically updated on the reception of the new command). Now user is required to explicitly set the control mode of the joint before sending a command. If a joint a velocity command while being in position control mode, the command will be rejected.
  • the control modes ImpedancePositionMode and ImpedanceVelocityMode are no more supported by Yarp [1]. A new interface has been introduced yarp::dev::iInteractionMode (, which allows to set the joint in stiff mode or compliant mode. The interaction mode of joint is not affected by the selection of the control mode: so multiple combinations of control modes and interaction modes are possible (e.g. stiff-position, compliant-position, compliant-velocity etc). The interaction mode of a joint is also persistent if the joint is disabled by the user and then enabled again.
  • new control modes have been introduced: the mixed control (VOCAB_CM_MIXED) mode allows the user to send position and velocity commands on the same joint (to perform saccadic movement, for example), while the position direct mode (VOCAB_CM_POSITION_DIRECT) allows the user send step position commands which bypass the internal minimum jerk trajectory generator.
  • a new status 'hardware fault' is now implemented in the firmware. The fault status can be cleared only with a yarp::dev::IControlMode::setControlMode(j, VOCAB_CM_FORCE_IDLE) command.
  • yarp::dev::IAmplifierControl::enableAmp()/disableAmp() and yarp::dev::IPidControl::enablePid()/disablePid() methods have been deprecated. User can now turn on/off the motor by using the iControlMode interface (e.g. yarp::dev::IControlMode::setControlMode(j, VOCAB_CM_IDLE) to turn off a motor, yarp::dev::IControlMode::setControlMode(j, VOCAB_CM_POSITION) to turn it on again).

[1] since the final behavior of the robot may be affected by these changes, users are very recommended to update their modules a soon as possible in order to comply with this new control policy. The system will display a warning message if the old ImpedancePositionMode is used or if a command is rejected by a joint set in the wrong control mode.