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, shown below:
- automatic switching of joint control mode is no more supported. In the past, user was allowed to send position and velocity commands to a joint, regardless the current status of the board (the control mode of the board was automatically updated on the reception of the new command). Now user is required to explicitly set the control mode of the board 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 . A new interface has been introduced yarp::dev::iInteractionMode (http://wiki.icub.org/yarpdoc/namespaceyarp_1_1dev.html), which allows to set the joint in stiff or compliant. 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 control modes (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).
 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.
The introductory slides presented during the VVV'14 summer school.
The complete technical documentation