Need Ideas on how to Map/Calibrate


initial - geometries "initially" loaded from j30 files - no movement applied

Ahoy !

I need some ideas on how to calibrate the new JME Virtual InMoov.

MRL has servo names which should be in Gael's source blender file.
We still have a few mis-alignments to fix :

I think the right hand has a lot of 001 added to the names

 
these are missing the "torso" part .. 
 
This would be correct :
 
I can create "renaming" entries in mrl, but if they ever get corrected in blender it will break again - so they should be fixed as far upstream as possible - preferrably in the source blender file.
However - if part of the process of updating the original source is copy "left" to  a new "right" and blender auto-appends 001 to all the nodes, then I could have rename entries in mrl like
 
jme.rename("i01.leftHand.majeur1.001", "i01.rightHand.majeur1")
 
and this might alleviate the work needed on the blender side when updates happen.
 
But the bigger challenge is calibration ...
I  did a little callibration work on rest since this was the easiest thing to start with.
It's not perfect - but its ok ..
 
i01.rest() - close but a little "tweaks" could make it better (no right hand control - 2 finger control on left hand)
 
These are the current mappings I've created that translate between the servo config and the jmonkey geometries ... They should allow for direction, attenuation, clipping and rotational diffrerences as all Mappers can :
      
      jme.setMapper("i01.head.neck", 0, 180, -90, 90);
      jme.setMapper("i01.head.rollNeck", 0, 180, -90, 90);
      jme.setMapper("i01.head.rothead", 0, 180, -90, 90);
      jme.setMapper("i01.head.jaw", 0, 180, -10, 170);  // <- is this really supposed to be attenuated ?
      jme.setMapper("i01.head.rothead", 0, 180, -90, 90);
      jme.setMapper("i01.rightArm.bicep", 0, 180, 0, -180);
      jme.setMapper("i01.leftArm.bicep", 0, 180, 0, -180);
      jme.setMapper("i01.rightArm.shoulder", 0, 180, -30, 150);
      jme.setMapper("i01.leftArm.shoulder", 0, 180, -30, 150); // 124 = 29  & rest = 30
      jme.setMapper("i01.rightArm.rotate", 0, 180, 90, 270);      
      jme.setMapper("i01.leftArm.rotate", 0, 180, -90, 90);

The next challenge is moving too the 2nd gesture .. the most familiar one I know is daVinci.py - but it doesn't look good at all :(
 
I suspect after figuring out the the differences from 2 different gestures, its possible that most other differences in the remaining gestures will potentially be small.
 
I started trying to figure out the differences, but was a bit shocked to see shoulder values for daVinci 29 and "rest" values 30 ... Is this correct ? It seems very "odd"
 
Any ideas ?
 
Update - looks better, I had shoulders confused with omoplates, and omoplates mapped on the wrong axis (they need to be on "z")
 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
hairygael's picture

Hello Grog,Great

Hello Grog,

Great progress!!

I have sent you an email with corrected Blender files so you shouldn't have to rename through MRL.

They should match the correct servo names for the i01.torso.midStom, i01.torso.lowStom,  i01.torso.topStom.

Somehow, I had forgotten to add "torso" to three Stom parts.

I renamed the finger "empty" to match the servo name, but it means it's the whole finger that will move at once. i01.leftHand.index will now move the whole finger (instead of i01.leftHand.index1)
 
Renamed also i01.leftHand.ringfinger to i01.leftHand.ringFinger and i01.rightHand.ringfinger to i01.rightHand.ringFinger.

Here below are the servo angles,

it's important to note that my Blender files already set VinMoov at "rest" position.

You can see VinMoov is already in "rest" position just after the import into JMonkey:

Cercled in red the name changed fro the torso parts.

I hope this will be okay for you.

:)