robotology-legacy / codyco-modules

Whole-body Compliant Dynamical Contacts in Cognitive Humanoids
www.codyco.eu
Other
19 stars 13 forks source link

[quaternionEKF] TODO List for preliminary implementation on iCub with palm skin patch #131

Closed jeljaik closed 7 years ago

jeljaik commented 9 years ago

TODO

a = (n  6.0  (a1  b1 t1 x1 y1 x1)   .... (an  bn tn xn yn xn))
ai = pos of sensor ... see enum type
bi = accel (1) or gyro (2)
enum { eoas_inertial_pos_offsetleft = 0, eoas_inertial_pos_offsetright = 24, eoas_inertial_pos_offsetcentral = 48 };
/** @typedef    typedef enum eOas_inertial_position_t
    @brief      contains a unique id for every possible inertial sensor positioned on iCub. So far we can host up to 63 different positions. The actual positions on iCub are documented on http://wiki.icub.org/wiki/Distributed_Inertial_sensing where one must look for the tags 10B12, 10B13 etc. The mapping on CAN for the ETH robot v3 is written aside.  **/

typedef enum
{
    eoas_inertial_pos_none                  = 0, 

...
    // left leg
    eoas_inertial_pos_l_foot_1              = 8+eoas_inertial_pos_offsetleft,       // label 10B12  canloc = (CAN2, 13)
    eoas_inertial_pos_l_foot_2              = 9+eoas_inertial_pos_offsetleft,       // label 10B13  canloc = (CAN2, 12)
    eoas_inertial_pos_l_lower_leg_1         = 10+eoas_inertial_pos_offsetleft,      // label 10B8   canloc = (CAN2,  8)
    eoas_inertial_pos_l_lower_leg_2         = 11+eoas_inertial_pos_offsetleft,      // label 10B9   canloc = (CAN2,  9) 
    eoas_inertial_pos_l_lower_leg_3         = 12+eoas_inertial_pos_offsetleft,      // label 10B10  canloc = (CAN2, 10)
    eoas_inertial_pos_l_lower_leg_4         = 13+eoas_inertial_pos_offsetleft,      // label 10B11  canloc = (CAN2, 11)
    eoas_inertial_pos_l_upper_leg_1         = 14+eoas_inertial_pos_offsetleft,      // label 10B1   canloc = (CAN1,  1)
    eoas_inertial_pos_l_upper_leg_2         = 15+eoas_inertial_pos_offsetleft,      // label 10B2   canloc = (CAN1,  2)
    eoas_inertial_pos_l_upper_leg_3         = 16+eoas_inertial_pos_offsetleft,      // label 10B3   canloc = (CAN1,  3)
   eoas_inertial_pos_l_upper_leg_4         = 17+eoas_inertial_pos_offsetleft,      // label 10B4   canloc = (CAN1,  4)
    eoas_inertial_pos_l_upper_leg_5         = 18+eoas_inertial_pos_offsetleft,      // label 10B5   canloc = (CAN1,  5)
    eoas_inertial_pos_l_upper_leg_6         = 19+eoas_inertial_pos_offsetleft,      // label 10B6   canloc = (CAN1,  6)
    eoas_inertial_pos_l_upper_leg_7         = 20+eoas_inertial_pos_offsetleft,      // label 10B7   canloc = (CAN1,  7)

    // right leg
    eoas_inertial_pos_r_foot_1              = 8+eoas_inertial_pos_offsetright,      // label 11B12  canloc = (CAN2, 13)
    eoas_inertial_pos_r_foot_2              = 9+eoas_inertial_pos_offsetright,      // label 11B13  canloc = (CAN2, 12)
    eoas_inertial_pos_r_lower_leg_1         = 10+eoas_inertial_pos_offsetright,     // label 11B8   canloc = (CAN2,  8)
    eoas_inertial_pos_r_lower_leg_2         = 11+eoas_inertial_pos_offsetright,     // label 11B9   canloc = (CAN2,  9)
    eoas_inertial_pos_r_lower_leg_3         = 12+eoas_inertial_pos_offsetright,     // label 11B10  canloc = (CAN2, 10)
    eoas_inertial_pos_r_lower_leg_4         = 13+eoas_inertial_pos_offsetright,     // label 11B11  canloc = (CAN2, 11)
    eoas_inertial_pos_r_upper_leg_1         = 14+eoas_inertial_pos_offsetright,     // label 11B1   canloc = (CAN1,  1)
    eoas_inertial_pos_r_upper_leg_2         = 15+eoas_inertial_pos_offsetright,     // label 11B2   canloc = (CAN1,  2)
    eoas_inertial_pos_r_upper_leg_3         = 16+eoas_inertial_pos_offsetright,     // label 11B3   canloc = (CAN1,  3)
    eoas_inertial_pos_r_upper_leg_4         = 17+eoas_inertial_pos_offsetright,     // label 11B5   canloc = (CAN1,  5)
    eoas_inertial_pos_r_upper_leg_5         = 18+eoas_inertial_pos_offsetright,     // label 11B4   canloc = (CAN1,  4)
    eoas_inertial_pos_r_upper_leg_6         = 19+eoas_inertial_pos_offsetright,     // label 11B6   canloc = (CAN1,  6)
    eoas_inertial_pos_r_upper_leg_7         = 20+eoas_inertial_pos_offsetright,     // label 11B7   canloc = (CAN1,  7)
} eOas_inertial_position_t;
jeljaik commented 9 years ago

Remove direct dependencies on XSens proprietary classes and substitute with xsens yarp plugin

It was pointed out to me that I could use the XSens plugin in YARP when attaching a single xsens IMU to my laptop. It is as simple as adding to my quaternionEKF application the following module:

yarpdev --device inertial --subdevice xsensmtx --name /externalxsens/data:o

Where:

Next, you will find a port called /externalxsens/data:o with a similar output to that of /inertial when using the real robot.

References:

  1. https://github.com/robotology/yarp/blob/5b0f8a4bfe22ba5bab1696b21438def6c92f21cd/src/libYARP_dev/src/modules/ServerInertial/ServerInertial.cpp#L233
  2. Yarp devices: http://people.csail.mit.edu/paulfitz/vvv/html/note_devices.html
  3. Documentation on class yarp::dev::ServerInertial http://wiki.icub.org/yarpdoc/classyarp_1_1dev_1_1ServerInertial.html#a699dac877ee2fca256025891fd9876a8

Simplification done in commit: https://github.com/robotology/codyco-modules/commit/53d630a3485dc8f81fbb727704517a78507014da

naveenoid commented 9 years ago

:+1: Maybe this can be someother place than an issue so that we can look it up without having an open issue?

jeljaik commented 9 years ago

Details on external inertial sensors installation

I guess the codyco-modules wiki might be appropriate. Moved here: https://github.com/robotology/codyco-modules/wiki/External-Inertial-Sensors-for-iCubGenova02 @prashanthr05 @naveenoid (Hope it's ok to put it there @traversaro. If you object, let me know)

traversaro commented 7 years ago

Closing for cleanup of old issues.