iCub supporting joint level torque control
Joint level torque control as will be reported below can be achieved with iCub from version 1.2 to 1.x. Version 1.1 of the iCub has not *.ini files properly configured.
Torque Control in iCub v1.x
The version of the iCub robot starting from v1.1, are not provided with joint level torque sensing (this will be a feature of iCub v2.x). The robots from version 1.1 are equipped with proximal 6-axis force/torque (F/T) sensors.
For these robots it is possible to compute joint torques exploiting a model-based approach based on a modified Newton-Euler algorithm. These computation are performed by the wholeBodyTorqueObserver module, running on a blade. A possible rate the module should run is 10ms. This rate has been tested to give good results in terms of performances of the controller. The more the rate, the more the delay. It is a good attitude to check the time intercurring between the actual measurement of the F/T sensors and the corrisponding torque measurements that are sent to the firmware. Unfortunately, a tool performing this check is not available yet, but at least be sure that the computations are performed within the time your thread should work.
wholeBodyTorqueObserver takes measurementsfrom the 3DOF orientation tracker placed on the head and the four F/T sensors of the limbs to make a model-based estimation of joint torques, with the hypotesis that an external force is working on the end-effector.
iCubInterface provides ports for the communication with wholeBodyTorqueObserver and send "virtual" torque measurements to the DSP boards which perform joint level torque control at 1ms rate.
Datas and Ports
wholeBodyTorqueObserver and iCubInterface communicate through yarp ports the datas necessary to achieve joint level torque control.
iCub ports are:
- /icub/inertial provides 3DOF orientation tracker measurements
- /icub/<part>/analog:o provides calibrated F/T measurements (an offset is present, due to the stresses of mounting)
- /icub/joint_vsens/<part>:i acquires joint torque estimation from wholeBodyTorqueObserver module
wholeBodyTorqueObserver ports are:
- /wholeBodyTorqueObserver/inertial:i receive inertial datas
- /wholeBodyTorqueObserver/<part>/FT:i reads F/T data from the analog ports
- /wholeBodyTorqueObserver/<part>/Torques:o provides joint torque measurements
How to torque control
The first and necessary step to achieve joint level torque control, playing with torque and impedance interfaces or running the demoForceControl is to be sure the wholeBodyTorqueObserver is runnung, and ports are connected.
To run wholeBodyTorqueObserver, be sure iCubInterface is running. If so, open the wholeBodyTorqueObserver manager, which is in
using the manager.py
click on the Start Modules button. After this, be sure the robot is not touching or interacting with anything or anyone, and click on the Connect button. In this phase, the F/T measurements are alligned to the model of the robot. Do not touch the robot until this procedure has finished (almost 5 seconds after the Connect button has been pressed)