Vizzy Cartesian Interface

From ISRWiki
Revision as of 12:01, 17 November 2011 by Daragao (talk | contribs)
Jump to navigation Jump to search

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"[1] 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

<< Back to Vizzy wiki homepage