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: http://infoscience.epfl.ch/record/114045 This module wasa used to perform reaching with the icub right arm and head tracking with the icub head.
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>
When actually controlling the robot, this accesses the velocityControl ports:
In order to do so, one must define ICUB_IS_HERE
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> <Children> <Segment> r_saa ... </Children> </Segment>
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
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 pointing jointControl part head nbDOFs 4 controlGains 2 1 1 1 maxVelocity 15 15 15 15
./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
CopyPolicy: Released under the terms of the GNU GPL v2.0.
This file can be edited at src/lasaBodySchema/include/ReachingModuleThread.h