|
|
(21 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| ==Introduction==
| |
|
| |
|
| The Cartesian Interface used with Vizzy to reach a XYZ point using its inverse kinematics is based in the tutorial "Customizing the Cartesian Interface for a Generic Robot"[http://eris.liralab.it/iCub/main/dox/html/icub_anyrobot_cartesian_interface.html] by Ugo Pattacini. Reading Ugo's tutorial is strongly advised.
| |
|
| |
| For the Cartesian Interface to work the iCubInterface (Vizzy adapted version) needs to be running, and the desired arm, shoulders and torso ports open.
| |
|
| |
| The interface makes use of three distinct modules. A '''solver''' which solves the motors position for a desired XYZ position given a kinematic chain. A '''server''' which controls the motors directly while it tries to confer human like movements to the robot. Finally a '''client''' which calls the server and solver methods through a defined interface.
| |
|
| |
| The modules used for the Vizzy robot are based and very similar to the ones available in the tutorial "Customizing the Cartesian Interface for a Generic Robot". The most important differences are in the ini files.
| |
|
| |
| ==Solver==
| |
|
| |
| The solver ini file for the Vizzy robot has two extra paramaters besides the ones presented in the original tutorial. The 'kinematics_file' and 'part' parameters.
| |
| * kinematics_file: indicates the path and name of the file with the kinematic chain description.
| |
| * part: indicates which part of the robot is going to be solved, the right_arm or left_arm part. The selected part does not only affect the part referred but also the respective shoulder and torso.
| |
|
| |
| If there is an interest in blocking a motor the dof parameter can be used to do that, this can be set through the ini file or dynamically.
| |
|
| |
| In the original tutorial the robot was constituted of only one part, in the Vizzy case each arm can be constituted of three parts: arm, shoulder, and torso. In the code a function was added just to simplify the part properties definition the "newPartProperties()", and the three part properties objects were added to the PartDescriptor:
| |
| PartDescriptor *p=new PartDescriptor;
| |
| p->lmb=limb; // a pointer to the iKinLimb
| |
| p->chn=limb->asChain(); // the associated iKinChain object
| |
| p->cns=NULL; // any further (linear) constraints on the joints other than the bounds? This requires some more effort
| |
| p->prp.push_back(optTorsoPart);
| |
| p->prp.push_back(optShoulderPart);
| |
| p->prp.push_back(optArmPart);
| |
| p->rvs.push_back(true);
| |
| p->rvs.push_back(true);
| |
| p->rvs.push_back(true);
| |
| p->num=3;
| |
|
| |
| ==Server==
| |
|
| |
| ==Client==
| |
|
| |
|
| |
| [[Vizzy|<< Back to Vizzy wiki homepage]]
| |
|
| |
|
| |
| [[Category:Robots]]
| |
| [[Category:Vislab]]
| |