[Body Schema Modules]

Performs reaching movements with any serial manipulator. More...

Performs reaching movements with any serial manipulator.


This module performs reaching movements with a serial manipulator of arbitrary geometry and number of degrees of freedom. The target of the reaching movement can be a given position or a given position and orientation. The algorithm used is the dynamical systems - based, hybrid joint angle and end-effector location controller, described in this paper: This module wasa used to perform reaching with the icub right arm and head tracking with the icub head.




Optional parameters

The following parameters are needed when controling the actual robot (and not a simulator).

--part <part_name>: name of the part you ar controlling (default is right_arm). For now, the module cannot control more than one part

All those parameters can be specified through a configuration file <config>

Ports Accessed

When actually controlling the robot, this accesses the velocityControl ports:

In order to do so, one must define ICUB_IS_HERE

Ports Created

input ports:

output ports:

Input Data File

The file <struct_file> specifes the kinematic structure of the manipulator. Typically, this file describes the kinematic structure of the entire robot, but the module can only control a particular kinematic chain withing this robot (for example the arm or the head). The chain that is controlled for the reaching is specified by the --from and --to parameters. The robot can be described by a "kinematic tree", having (for example) the torso as root where edges represent rigid connections (translation) and nodes represent joints (rotations). (see my IJHR paper for more details) The file is an xml file with the following structure (see conf/icub_head_right_arm_tree.xml for the file describing the kinematics of the icub right arm and head.)

 <Segment> r_sfe
  <Axis> 1 0 0  </Axis>
   <Range> -90 90 </Range>
   <Position> -100 0 0 </Position>      
     <Segment> r_saa

In the example below r_sfe is the name of the proximal joint. The <Position> tag refers to the position of the joint with resect to the previous joint, when in the zero joint position. Similarly the <Axis> tag refers the the rotation axis, when all previous joints are in the zero position. <Range> provides the joint angle boundaries in degrees, and <Children> announce the next link. The tip of the manipulator is specified as an additional joint, but it has no <Axis> tag, only a <Position> tag

Output Data Files


Configuration Files

All the parameters can be written in a file given by the --file option on the command line. Here is an example for reaching with the right arm

 structure ./conf/icub_head_right_arm_tree_safe.xml 
 from r_sfe
 to r_hand
 part right_arm
 nbDOFs 7
 controlGains 3 3 3 3 3 3 3
 maxVelocity 10 10 10 10 10 10 10

Here is another example for reaching with the gaze, i.e. tracking the the head and eyes

 structure ./conf/icub_head_right_arm_tree_safe.xml 
 from neck_tilt
 to gaze
 part head
 part head
 nbDOFs 4
 controlGains 2 1 1 1
 maxVelocity 15 15 15 15

Tested OS


Example Instantiation of the Module

./reaching_module --file conf/config_reaching_right_arm.ini --name /arm

where conf/config_reaching_right_arm.ini is one of the files given in example in section Configuration Files See the example in the kinematic_simulator to see how to visualize the resulting motions in the simulator

Micha Hersch

CopyPolicy: Released under the terms of the GNU GPL v2.0.

This file can be edited at src/lasaBodySchema/include/ReachingModuleThread.h

 All Data Structures Functions Variables

Generated on Wed Sep 22 16:51:26 2010 for Body_Schema_Learning by  doxygen 1.6.1