Hi

As I tried to show in an example (https://www.youtube.com/watch?v=1OOPl9AN4Go) I am working on a self levelling hand for InMoov.

Thought that it would be best have a new function available in MRL like LeftHand.StayHorizontal(). This should do 2 things

a) set a digital output to inform my arduino nano to take over bend (new) and wrist(existing) control of the hand

b) prevent output of pwm signals from the main Arduino to the wrist servo as it will be controlled by the new Arduino nano.

Just had an issue with my new odroid and Ale pointed me to a jar at this location: http://mrl-bucket-01.s3.amazonaws.com/current/myrobotlab.jar

So my question - where can I get this source code to start experimenting with these additions and can somebody point me to a similar function I can use as a guideline (I am using eclipse).

Regards

Juerg

juerg

8 years 11 months ago

no coder to help me?

Thought I add variables into class InMoovHand like

private Boolean keep_horizontal = false;
private Integer keep_horizontal_outpin = 22;

Could not figure out from the mrl-code how to set the pin into output mode and how to perform a digital write.

Then I assume a 

public keep_horizontal_start() {
  keep_horizontal = true;
  <digital write> (1, keep_horizontal_outpin);
  wrist.detach();   // avoid output to wrist as it is handled by another arduino
}

and 

public keep_horizontal_stop() {
  keep_horizontal = false;
  <digital write> (0, keep_horizontal_outpin);
  wrist.atach();   
}

Will it need anything else to make the functions callable from the python-script?

thanks for any help

Ah .. I see what your doing .. it would be like this :

 

public keepHorizontalStart() {
  keepHorizontal = true;
  arduino.digitalWrite(keepHorizontalOutPin, 1);
  wrist.detach();   // avoid output to wrist as it is handled by another arduino
}

public keep_horizontal_stop() {
  keepHorizontal = false;

  arduino.digitalWrite(keepHorizontalOutPin, 0);

  wrist.atach();   
}

Hope this helps.

 

That is awesome!  In addition to the orientation control, I like the additional degree of freedom that you've added to the wrist!  

 

great work!

juerg

8 years 11 months ago

In reply to by kwatters

Thanks Kevin

Maybe you add the option that the eyes will follow the hand by themselfes? In my opinion it would add - like faceTracking and maybe in the future my levelling hands - some internal intelligence to InMoov. We might in the future then say "pass ball from left hand to right hand" without dozens of script adjustments and with greater accuracy?

Juerg

P.S. and don't forget the tuto about programAB, haha

GroG

8 years 11 months ago

Juerg !   Wow .. great Video !
I like your idea ...

LeftHand.StayHorizontal() ... I really impressed with the results you have achieved.

You have a transistor or switch to change the digital input from the (existing" control of the hand?  Can you give more detail and perhaps I can help.

As far a getting an Arduino from InMoov - you can get any service if you know its name :
Here is an example (in Java) of getting the right hand's arduino and turning pin 13 on:

InMoov i01 = (InMoov)Runtime.start("i01", "InMoov");
InMoovHand hand =i01.startRightHand("COM15");
Arduino arduino = (Arduino)Runtime.getService("i01.right");
arduino.pinMode(13,1);
arduino.digitalWrite(13, 1);

 

@GroG

thanks, I think I can add that to my source code.

For the PWM output of the 2 arduinos to my wrist servo I thought it would be good enough to provide common ground and avoid that both pins try to control the servo at the same time (detach wrist in MRL and a digital signal for the arduino nano that it has control now).

Not sure however, do you think I need an additional element for "or"ing the signals? 

Juerg

Yep, 

Pretty much anything in MRL  in Java can be done in Python too ... 
Here's a quick conversion (have not tested it)

i01 = Runtime.start("i01", "InMoov")
hand = i01.startRightHand("COM15")
arduino = Runtime.getService("i01.right")
arduino.pinMode(13,1)
arduino.digitalWrite(13, 1)

MaVo

8 years 11 months ago

this is a new very interesting approach ! Great work!

(One thing I'm worried about are the strings running to each finger as they will make a bending very hard.)

Hi MaVo, thanks for your interest.

Right, there have been 2 challenges to begin with (more came for adjusting and printing the revised parts).

1) how can I get a better pulling position for the strings
2) how can I reduce friction on the strings

for 1 I added an elevation on both sides of the hand as you can see here:

 

 

for 2 I have added 3 redirection axis with nails and spacers to redirect the strings and avoid sharp turns.

To get a 180 degree wrist I first experimented with wrench servos. They however are slow and in spite of using other gear relation did not work out well. I changed then to a 180 degree servo and modified the wrist gears to a 1:1 ratio which now runs quite nicely. A challenge is still the best form for the hand bending pulley because the upper/lower strings travel different lentgth's when bending.

There is a lot of experiencing involved so it will take me some time to publish a working solution and some instructions. The programming of the servos with arduino and the adafruit.bno055 was luckily a peace of cake with the provided software.

Juerg