Failure During the Calibration
Launching the iCubInterface starts the kinematic calibration procedure. This procedure is delicate because of a know issue, described below. If the robot wasn't parked correctly (e.g. you had to press the fault button thus preventing the iCub from going to the correct parking position) or if the iCub was just installed in its podium, you have to carefully follow the procedure described here or have a look at the videos video1, video2 and video3.
Why do I have to put so much care in positioning the robot before launching the iCubInterface?
The standard start up procedure described here, requires the user to precisely position the robot arms before launching the iCubInterface. The reason for this additional care is a relatively old design solution, which relies on measuring the position of a specific joint (joint 2 in the left and right arm) by means of an absolute encoder positioned on a motor that can complete more than a complete revolution (actually 3 revolutions). This solution is suboptimal since it requires to measure the number of revolutions in order to be capable of measuring the current joint configuration. At the iCubInterface start up, it is assumed that the position of this motor is within a specified revolution and this can be achieved by means of positioning joint 2 within a range of motion. This range is quite large but when you are not 100% sure about the arm position the start up procedure should be carefully chosen.
Software update that reduces the failure probability
Some times ago there has been an improvement of the iCubInterface calibration phase that gratly reduces the problems at startup. This update is grately recommended and can be achieved by updating the entire iCub software repository (file iCubArmCalibratorJ8.cpp from svn release 7159. This update works only for iCub v1.1 or later but can be easily ported to previous versions of the iCub (write your request to the robotcub-hackers mailing list).
- How does the safe calibration work?
During the calibration the maximum PWM given to the motor is limited to a small value. This limit is stored in the .ini configuration file (MaxPWM, under [CALIBRATION] section) of the robot (e.g. icub_right_arm.ini). When the calibrator starts, the arm will try to reach its home position with the specified PWM limit. If the arm started the movement not in the correction position (wrong encoder turn), then it will be not able to reach the commanded home and it will (probably) move until one hard stop is reached. However the low PWM value will prevent the robot to break the tendons against the limit. If the home position is successfully reached in 20 seconds, then the calibration finishes and the limit on the PWM is released. On the contrary, if the home position in not reached, the motors will be disabled. In this case you will have to restart the iCubInterface after having corrected the arm initial position.
- What is the default limit on the PWM?
If the tag 'MaxPWM' is not present in the .ini file, the new calibrator will assume a default value of 60.
- The calibration always fails, even if the robot is starting from the correct position! Why?
It can happen that the dafault PWM limit (60) is too small, and the arm cannot reach the home position just because the gravity acting on the arm is stronger than the motor. This tipically happens if the power supply of the control boards is smaller that 40V. If this is your case and you want to run your iCub with lower power supply (i.e. 30V) , you will have to increase the PWM limit (a good choice is 100). Note that it's better not to increase the limit more than the strict necessary, otherwise the calibration procedure will not be safe anymore (e.g. a failure during the calibration will break the arm tendons!). Please note that the calibration can also fail because of real hardware problems (e.g. broken encoder). Always check with robotMotorGui if you are able to see all the encoders!