InMoov 2.0

This post is to coordinate efforts to get InMoov 2.0 working.
List of work 

  • OpenCV 2.4.6 on all platforms in MRL Win64 Win32 Mac64 Linux64 Linux32 Arm BBB MK808 still untested / Odroid repo items inserted - readelf id
  • 2 X Trackinfa dropped in favor of (N) dimensional Tracking
  • Normalize the 2 different web servers in MRL (HTTP server & Web Socket server)
  • New ServoController interface - provides control of Servos through I2C, Arduino, or Serial(Maestro) controller
  • (N) dimensional Tracking where a controller is mapped to a PID which is mapped to an axis
  • I2C or direct Servo based eyes - needs to be easy change in DNA to use either !
  • Verify other parts are working Hand / Arm / Head 
  • Make default keyboard map for movement (Chuck Fletcher might have suggestions)
  • New OpenNi in MRL
  • Errors verbally spoken (needs testing I believe this is done)
  • System check
  • startGestureLoop - function which goes through all the gestures
  • Simon says game - gesture copy with kinect
  • Added to XMPP Robot Pool
  • Security for any external/remote connection (XMPP, RemoteAdapter, WebGUI)
  • Pick up object !  starts with voice command - pick up strawberry - InMoov finds strawberry uses (N) PID ? and picks up object
  • LeapMotion service
  • Get all of InMoov working on a RasPi (This will need new Julius, eSpeak, and / or PocketSphinx services)
  • Trim method to adjust for differences between service gestures and deviations in InMoov builds
  • Verify all scripts are worky - As scripts are tested someone should be making Tutorial Video !!!
  • Add http://www.openimaj.org/ OpenImaj service
  • Add WebCam capture service http://webcam-capture.sarxos.pl/
  • Wizard for InMoov setup to help compensate for the differences in hardware.. such as servos which do 90 degrees and other servos which do 180...  Something which goes through a series of interactive adjustments to save min max values and other configurations.
  • 240 Years - wow! .. need a tribute for - http://www.chonday.com/Videos/the-writer-automaton (it would be cool to show inmoov a physical drawing, and then ask inmoov to duplicate it)
  • Bhouston's system startup - with OpenCV topcode verification of expected parts (hands, arms, etc) in expected locations at expected times

 

Script added here - because it will take some refinement before its ready for repo
The following script will create a InMoovHead service add all "peer" services associated with the head.  Additionally, it will set all the default values, pins, and limits.

[[InMoov2.min.py]]

[[InMoov2.Tracking.min.py]]


[[InMoov2.full.py]]


[[InMoov2.Alessandruino.py]]


[[InMoov2.head.py]]


[[InMoov2.test.py]]

 

 


Comment viewing options

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

I just finally tested the

I just finally tested the InMoov 2.0 last night , started with the tracking set on the head. We had some work, but it finally turned to work!

Some refinement to do, I have no image return from the video device in OpenCV, unless I click to start the capture. The eyes are not responding to the PID, although they do respond with the servo sliders.

Alessandro explained how to raise the speed of PID movements by changing the Kp factor from 5.0 to 20.0.

Great feature, can't wait to see it working with the eyes.

GroG's picture

The slowness has to do with

The slowness has to do with too many threads I suspect...  I was concerned that your update to the bleeding edge was not working...  "current" bleeding edge is 1854 - and the threading issue is fixed in that build

GroG's picture

hmm Ale set Kp eyes to 10

hmm Ale set Kp eyes to 10 (fast eyes) & Kp head to 5 (slow???)

I'd like appropriate values then I can set them both to a reasonable default now that they are in the InMoovHead service.

Alessandruino's picture

34406 [Thread-6] ERROR

34406 [Thread-6] ERROR org.myrobotlab.logging.Logging - ------ Traceback (most recent call last): File "", line 10, in AttributeError: 'org.myrobotlab.service.InMoov' object has no attribute 'startLeftHand'

GroG's picture

startLeftHand typo fixed -

startLeftHand typo fixed - bleeding edge 1893
GroG's picture

Just a suggestion ...  I know

Just a suggestion ...  I know now it's a bit cumbersome with the long names (but its a good change,  because it adds structure) 

Anyway, 2 things :

1.  Field access has a high probability of going away so 

i01.head.headTracking.xpid.setPID(15.0,5.0,0.1)

will not work - you'll need getters and setters (awwwee.....)

i01.getHead().getHeadTracking().getXPID().setPID(15.0,5.0,0.1)

That's WORSE !

well - there's a reason - with a method the details are - and this allows us to improve the internals without breaking the method call 

But Wait - there's more !  You can simply set a reference to the thing you want to work with.. for example the eye...  do this

eyeY = i01.getHead().getEyeY()
eyeY.setMinMax(22,85)
eyeY.setRest(45)
eyeY.setInverted(True)
eyeY.moveTo(45)
GroG's picture

This is currently worky for

This is currently worky for me

#file : InMoov2.test.py
headPort = "COM15"
rightPort = "COM16"
#leftHandPort = "COM7"
 
i01 = Runtime.createAndStart("i01", "InMoov")
#rightArm = i01.startRightArm(rightArmPort)
rightHand = i01.startRightHand(rightPort)
#leftHand = i01.startLeftHand(leftHandPort)
 
head = i01.startHead(headPort)
 
I have manual control over thumb, rothead & neck
GroG's picture

This is currently worky for

This is currently worky for me

#file : InMoov2.test.py
headPort = "COM15"
rightPort = "COM16"
#leftHandPort = "COM7"
 
i01 = Runtime.createAndStart("i01", "InMoov")
#rightArm = i01.startRightArm(rightArmPort)
rightHand = i01.startRightHand(rightPort)
#leftHand = i01.startLeftHand(leftHandPort)
 
head = i01.startHead(headPort)
 
I have manual control over thumb, rothead & neck
GroG's picture

Adding right Arm .. I was

Adding right Arm .. I was pleasantly surprised that when I ran this (head & hand were already started) - it did not seem to adversely affect the already existing head & hand...

This is what we want - "re-entrant code - code you can run again and again and not have it do bad things - like stop working.

 

#file : InMoov2.test.py
headPort = "COM15"
rightPort = "COM16"
#leftHandPort = "COM7"
 
i01 = Runtime.createAndStart("i01", "InMoov")
rightArm = i01.startRightArm(rightPort)
rightHand = i01.startRightHand(rightPort)
#leftHand = i01.startLeftHand(leftHandPort)
 
head = i01.startHead(headPort)
 
BUT !!! - THE ARM SERVOS DID NOT CONNECT - this needs to be fixed
GroG's picture

The current default PID of

The current default PID of Tracking service is currently

5.0, 5.0, 0.1

Ale, you have  15.0,5.0,0.1  except for 1(slow?) servo

Should the new default of tracking be Kp = 15 ?  
I assume that since you are one of the most active testers you found 5.0 too slow?

 

 

 

Alessandruino's picture

Ya... 5.0 is too slow... you

Ya... 5.0 is too slow... you can found there my pid values... but i would not put them as default...i would put gael's... because i use std servos for neck instead of hs805bb... so they have lower torque and i power my servos using AA batteries instead of big 6V 12ah batteries..

If you want i have gael's pid values  (INMOOV 2.0)

JCInMoov's picture

new javadoc?

i noticed some stuff changed for this new update such as the inmoov.moveArm("left",etc)

is there documentation of this so i can try and make my old code compatible with this version?