InMoov

javadoc

 

 

 

The InMoov service allows control of the InMoov robot.  This robot was created by hairygael.  It's an open source 3D printable robot.  All of the parts and instructions to build are on his blog (http://inmoov.blogspot.com/ and http://www.inmoov.fr/).

InMoov is a composite of servos, Arduinos, microphone, camera, kinect and computer.  The InMoov service is composed of many other peer services, and allows easy initialization and control of these sub systems.

Current Services of InMoov

Service Name Quantity Description
InMoov 1 A composite service to control and allow easy operation of other all of InMoov's subsystems
Arduino 2+ Arduino control of the left, right sides of InMoov
Servo 22+ A software servo service for motorized control and articulation of InMoov body parts
Tracking 1 A service which allows a pan / tilt camera system to track objects
Speech 1 A service to synthesise speech, basic multi-lingual capability
AudioFile 1 A service to play audio files
PID 2 An important service to implement a PID (proportional integral derivative) controller - e.g. allows smooth tracking of objects
OpenCV 2 The vision service which wraps opencv
Python 1 A python scripting IDE
GUIService 1 A Swing graphical user interface
Sphinx 1 speech recognition service

Future Services for InMoov

Service Name Quantity Description
       
PointCloud   Development to integrate Kinect or Xtion sensor to generated 3D point cloud for SLAM and internal mapping
 
Default Hardware Map
 
Although other boards and board configurations are possible the "default" one is 1 Arduino Mega (left side & Head) and 1 Arduino Uno (right side)
 
group part name Uno Mega default pin rest min max
               
hand thumb right left 2 0    
index right left 3 0    
majeure right left 4 0    
ringFinger right left 5 0    
pinky right left 6 0    
wrist right left 7 90    
               
arm bicep right left 8 0   90
rotate right left 9 90 40  
shoulder right left 10 30    
omoplate right left 11 10 10 80
               
head
 
neck   x 12 90 20 160
rothead   x 13 90 30 150
jaw   x 26      
eyeX   x 22 80 60 100
eyeY   x 24 90 50 100
 

Tutorials

The new InMoov now has 3 sub services
 

InMoovArm - service to control the InMoov robot
InMoovHand - service to control the InMoov robot
InMoovHead - service to control the InMoov robot

Sprints

  • 4 PID Eyes and Neck with Tracking and other Movements
  • Face Detection
  • Remote control - detach as part of Servo control and movement - detach created for I2C Servos
  • Inverse Kinectics - InMoov becomes aware of its 3D position
  • Mouth working
  • Search for Face
  • Point at Face Game
  • Cortex Memory
  • Face Recognition 
  • Integrate Kinect
  • Grab Recognized Objects Game - http://www.youtube.com/watch?v=v1TnfsyqPx0
  • Play Chess
  • I2C Enabled
  • Confirmation of voice commands
Here is a minimal script to test InMoov, starting a single hand:
 

#file : /service/InMoov.py edit raw
# a very minimal script for InMoov
# although this script is very short you can still
# do voice control of a right hand or finger box
# for any command which you say - you will be required to say a confirmation
# e.g. you say -> open hand, InMoov will ask -> "Did you say open hand?", you will need to
# respond with a confirmation ("yes","correct","yeah","ya")

rightPort = "COM8"

i01 = Runtime.createAndStart("i01", "InMoov")
# starting parts
i01.startEar()
i01.startMouth()
#to tweak the default voice
i01.mouth.setGoogleURI("http://thehackettfamily.org/Voice_api/api2.php?voice=Ryan&txt=")
##############
i01.startRightHand(rightPort)
# tweaking defaults settings of right hand
#i01.rightHand.thumb.setMinMax(55,135)
#i01.rightHand.index.setMinMax(0,160)
#i01.rightHand.majeure.setMinMax(0,140)
#i01.rightHand.ringFinger.setMinMax(48,145)
#i01.rightHand.pinky.setMinMax(45,146)
#i01.rightHand.thumb.map(0,180,55,135)
#i01.rightHand.index.map(0,180,0,160)
#i01.rightHand.majeure.map(0,180,0,140)
#i01.rightHand.ringFinger.map(0,180,48,145)
#i01.rightHand.pinky.map(0,180,45,146)
#################

# verbal commands
ear = i01.ear

ear.addCommand("attach right hand", "i01.rightHand", "attach")
ear.addCommand("disconnect right hand", "i01.rightHand", "detach")
ear.addCommand("rest", i01.getName(), "rest")
ear.addCommand("open hand", "python", "handopen")
ear.addCommand("close hand", "python", "handclose")
ear.addCommand("capture gesture", ear.getName(), "captureGesture")
ear.addCommand("manual", ear.getName(), "lockOutAllGrammarExcept", "voice control")
ear.addCommand("voice control", ear.getName(), "clearLock")
 
ear.addComfirmations("yes","correct","yeah","ya")
ear.addNegations("no","wrong","nope","nah")

ear.startListening()

def handopen():
  i01.moveHand("left",0,0,0,0,0)
  i01.moveHand("right",0,0,0,0,0)

def handclose():
  i01.moveHand("left",180,180,180,180,180)
  i01.moveHand("right",180,180,180,180,180)
 
Here is a minimal script to test InMoov, starting just the head :
 

#file : /service/InMoovHead.py edit raw
#tweak these values to match the port of your Arduino!
headPort = "COM5"
mouthPort="COM5"

#starting the InMoov-service 
i01 = Runtime.createAndStart("i01", "InMoov")

#starting the mouth
i01.startMouth()
#set a custom voice
i01.mouth.setGoogleURI("http://thehackettfamily.org/Voice_api/api2.php?voice=Graham&txt=")

#start the (InMoov-)head(-service) 
head = i01.startHead(headPort)

#start the head- & eyes-tracking(-services)
headTracking = i01.startHeadTracking(headPort)
eyesTracking= i01.startEyesTracking(headPort)

#start the head- & eyes-tracking 
i01.headTracking.startLKTracking()
i01.eyesTracking.startLKTracking()

#custom smoothing values for the tracking-services 
i01.headTracking.xpid.setPID(10.0,5.0,0.1)
i01.headTracking.ypid.setPID(15.0,5.0,0.1)
i01.eyesTracking.xpid.setPID(15.0,5.0,0.1)
i01.eyesTracking.ypid.setPID(15.0,5.0,0.1)

#start the ear(-service)
i01.startEar()

############################################################
#min- & max-values for the servos
#i01.head.eyeY.setMinMax(22,85)
#i01.head.eyeX.setMinMax(60,85)
#i01.head.eyeY.setRest(45)
#i01-head.eyeX.setRest(45)
#i01.head.jaw.setMinMax(10,75)
#i01.mouthControl.setmouth(75,55)
############################################################
 

#verbal commands 
ear = i01.ear
 
ear.addCommand("attach", "i01", "attach")
ear.addCommand("detach", "i01", "detach")
ear.addCommand("track humans", "python", "trackHumans")
ear.addCommand("track point", "python", "trackPoint")
ear.addCommand("stop tracking", "python", "stopTracking")
ear.addCommand("rest position", "i01.head", "rest")
 
 
ear.addComfirmations("yes", "correct", "yeah", "ya")
ear.addNegations("no", "wrong", "nope", "nah")
 


def trackHumans():
  i01.headTracking.faceDetect()
  i01.eyesTracking.faceDetect()

def trackPoint():
  i01.headTracking.startLKTracking()
  i01.eyesTracking.startLKTracking()

def stopTracking():
  i01.headTracking.stopTracking()
  i01.eyesTracking.stopTracking()
  

# all commands MUST be before startListening  
ear.startListening()
 

If you are interested in helping - let me know !
Thanks,
GroG
hairygael's picture

Alright, there has been much

Alright, there has been much progress done with the service.

The left and right sides get correctly initiated and set to an initial position that avoid big arms movements.

Setting the speeds also works, which is a big step for to optimize movements and gestures.

Alessandruino's picture

Whooo hoo...inmoov has his

Whooo hoo...inmoov has his first "better faster stronger" repo script .... :D

GroG's picture

Giant script coming soon

Giant script coming soon (whole robot), with Alessandruino's new BETTER FASTER LIGHTER face tracking !

hairygael's picture

Oh wow this is going to be

Oh wow this is going to be awesome! Hope it's ready before saturday 25/05/13

bstott's picture

Where is InMoov?

I came into MRL - 8/20/2013. I upgraded all MRL files and started an InMoov service. Up comes a master tab, an ear and a mouth tab. There are no controls. There are no Arduino or other services associated or started. What happened?

nadia's picture

hi

hello

I`m new here and i want to ask questions.

i`m going to start my inmoov but I want to use just one arduino due for whole the project , is there any special reason that you used 2 arduinos?

and inmoov arm is not openning for me , is that post deleted or it is just me who can`t open it.

Thanks for everything that you did and share it with everyone.