Need more speed !
 
Both wrists now are reversed in software...  looks closer but they both look about 90 degrees out of phase clockwise. We need to know for both the wrists.  Moving the servo from 0 to 180 does it turn the hand's palm towards the body or away.
 
Reversed the right wrist in software - left wrist looks "not good"
 
Attempt of side by side ... used keyboard service script to try to keep them in sync
 
 
The latest from Dr. Gareth bone doctor .... Looks Great !
 
Closer ! .. thanks to Dr. Gareth the patient now has working fingers 
 
 
Left my heart in San Francisco .. and my arms in Venezuela ...
I seem to have a very worky script - gets stuff attached and its relatively small - takeBall.py
fingers don't appear to be attached yet .. i01.leftArm.bicep
 

 

 

 

 

Starting with bhoustons video of counting fingers. VInMoov uses Gael script as is with only virtual ports added.  Bhouston's servo mappings & Gaels may be different, VInMoov uses Gaels mappings.

 

 

 

Starting with a video of the master and some basic calisthenics

 

 

Ran Ginormous Script  this was madeby method .. some things I noticed.

  • torso is 90 degrees out of phase
  • shoulders are 180 degrees out of phase
  • sound is out of phase with mouth movement - should use realtime sound filter with events to move jaw
  • neck is inverted
  • no finger bones
  • But it Sort Of Worky ! :D

 


i01.victory()

moveHead(114, 90);
moveArm("left", 90, 91, 106, 10);
moveArm("right", 0, 73, 30, 17);
moveHand("left", 170, 0, 0, 168, 167, 0);
moveHand("right", 98, 37, 34, 67, 118, 166);


i01.lookAtThis()
 

moveHead(66, 79);
moveArm("left", 89, 75, 78, 19);
moveArm("right", 90, 91, 72, 26);
moveHand("left", 92, 106, 133, 127, 107, 29);
moveHand("right", 86, 51, 133, 162, 153, 180);

i01.hello()
setHeadSpeed(1.0f, 1.0f);
setArmSpeed("left", 1.0f, 1.0f, 1.0f, 1.0f);
setArmSpeed("right", 1.0f, 1.0f, 1.0f, 1.0f);
setHandSpeed("left", 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
setHandSpeed("right", 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
moveHead(105, 78);
moveArm("left", 78, 48, 37, 10);
moveArm("right", 90, 144, 60, 75);
moveHand("left", 112, 111, 105, 102, 81, 10);
moveHand("right", 0, 0, 0, 50, 82, 180);


i01.giving()

moveHead(44, 82);
moveArm("left", 15, 55, 68, 10);
moveArm("right", 13, 40, 74, 13);
moveHand("left", 61, 0, 14, 0, 0, 180);
moveHand("right", 0, 24, 24, 19, 21, 25);


i01.armsUp()

 

moveHead(160, 97);
moveArm("left", 9, 85, 168, 18);
moveArm("right", 0, 68, 180, 10);
moveHand("left", 61, 38, 14, 38, 15, 64);
moveHand("right", 0, 0, 0, 50, 82, 180);
 
 


i01.rest()

new rest picture with hands attached - can't find dem finger bones !

I found out atEase() is rest() + detach() .. I'll get rest coordinates shortly...


i01.fistHips()

MAKE NOTE - this is a arm breaker for Azule !

moveHead(138, 80);
moveArm("left", 71, 41, 20, 39);
moveArm("right", 71, 40, 14, 39);
moveHand("left", 161, 151, 133, 127, 107, 83);
moveHand("right", 99, 130, 152, 154, 145, 180);


i01.armsFront() - I think ?

??

need to check

moveHead(99, 82);
moveArm("left", 9, 115, 96, 51);
moveArm("right", 13, 104, 101, 49);
moveHand("left", 61, 0, 14, 38, 15, 0);
moveHand("right", 0, 24, 54, 50, 82, 180);

 


i01.daVinci()

moveHead(75, 79);
moveArm("left", 9, 115, 28, 80);
moveArm("right", 13, 118, 26, 80);
moveHand("left", 61, 49, 14, 38, 15, 64);
moveHand("right", 0, 24, 54, 50, 82, 180);

Here are some screen shots from the virtual InMoov - I found some embedded poses which I thought would be more stable to calibrate a real Inmoov with it's virtual cousin.  Theoretically - position of a real camera and the virtual camera should be the same, but before the detailed work - some things are very out of whack. The rotation of the shoulders are 180 degree off.  Small differences I can compensate with Servo.map methods - but I have issue if I need to go past a 0 origin. a 90 degree flip will happen.

I think some servos need reversing too, but I do not know the direction of each servo...

Many thanks to Gareth for all the rigging, tweaking and his amazing Blender-Fu.  And of course thanks to Gael and the artistry of InMoov !

Left is Right and Right is Left ?  Is this the "Right" way of a real InMoov (are the servo values to rotation correct?)

 

 

Gareth

9 years ago

Nice.... ohoh.hooooo.

I kinda calculated the arm reverse, it was a 50/50 guess if i had it correct.... and also not sure if 90°>110° should "supernate" or "Pronate" the hands&arms or 110°>90° ....  and if 90°>110° was mirrored to the other side or reversed. (I have it "in hand"..... pun intended).

No worries now that I have the virtual Uarts running with Eclipse it will be simple task to tweak... thanks Serial_Fu Grog.

I think we need 2 parameters per servo to calibrate the inmoov

 

1. the initial joint offset. 

2. rotation gain

 

this can adjust for gearing ratio differences and can also provide the inversion. 

The resulting angle  could then be a matter of "gain and phase shift"  

Theta(out) = Gain * Theta(in) + Offset

or Maybe

Theta(out) = Gain * (Theta(in) + Offset)

Or something like that...  

 

For servos that are inverted, the gain can be -1.0

 

If all real world inmoovs compute those 2 parameters for each servo, I think all movement can be calibrated.

 

thoughts?

 

This is the current calculation for given maps

public int calc(float s) {
return Math.round(minY + ((s - minX) * (maxY - minY)) / (maxX - minX));
}
 
I believe it does gain & offset - expressed as the range of one scalar to another
e.g.
map(0, 180, 0, 180)   - represents for a servo 0 offset and no gain
 
map(0, 180, 180, 0)  - is inversed no gain
 
map(0, 180, 90, 270) - is +90 offset no gain
 
map(0, 180, 0, 360) - is x 2 gain no offset
 
min & max do clipping on the output

and just as a relevent parking space here to document... it was new syntax for me..

command :-

moveHand("left",92,106,133,127,107,29)

translates too :- move servo° to (thumb,index,majeure(middle),ring finger,pinky,wrist)

and

moveArm("right",13,118,26,80)     

= move servo° to (bicep,rotate arm,rotate shoulder,omoplate)

GroG

9 years ago

Making Progress !

I posted the "real" photo shoot thanks to Harland & Azule ..
and the coordinates of most of the gestures

naming finger joints needs to be done .. would be glad to do it .. but was wondering Gareth's input on the 3 joint to string problem...

SERVO_WRITE [2, 2] ERROR can't find bone i01.rightHand.majeure Arduino Msg Method # -> 31 SERVO_WRITE [3, 2] ERROR can't find bone i01.rightHand.ringFinger Arduino Msg Method # -> 31 SERVO_WRITE [4, 2] ERROR can't find bone i01.rightHand.pinky Arduino Msg Method # -> 31 

mebbe I'll try a simple 1st joint = servo to start with...

I think its possible to use a blender IK linkage to bind them together.... its "on my list"....

Gareth

9 years ago

Think i have dialed in left Arm .... here is my daVinci now....