There are curently two functions, in MyRobotLab, to create gestures.
-The first one is a voice command called “capture gesture” which lets you create any gestures you want.
-The second function is a service called InMoovGestureCreator (broken in Manticore version)
How to on the first function:
-Set the servos at the positions you like using the cursors in MRL.
-Click the python tab on MRL to open its window.
-Say in your microphone “capture gesture“.
-This will generate a text with all the positions of your servos in the lower python tab.
It should look like this:
i01.moveHead(90.0,90.0,90.0,90.0,0.0,90.0)
i01.moveArm("left",0.2,90.2,30.2,12.2)
i01.moveHand("left",0.0,0.0,0.0,0.0,90.2)
i01.moveArm("right",0.2,90.2,30.2,12.2)
i01.moveHand("right",0.0,0.0,0.0,0.0,90.2)
i01.moveTorso(90.2,90.2,90.0)
-In file, click on “new”, this will create a new python window.
-Copy/past the servo positions in it.
-Give it a name.
-In the below exemple, I called the gesture “handflat”
Below you can see also the various velocity and servos positions. “Capture gesture” currently doesn’t generate the velocity, you need to copy/paste them if you want to change the velocity in your gesture, if you don’t, your gesture will use the last velocity called with the previous gesture invoked.
def handflat():
i01.setHandVelocity("left", 43, 43, 43, 43, 43, 43)
i01.setHandVelocity("right", 43, 43, 43, 43, 43, 43)
i01.setArmVelocity("right", 31, 43, 23, 43)
i01.setArmVelocity("left", 60, 23, 31, 31)
i01.setHeadVelocity(43, 43)
i01.setTorsoVelocity(31, 16, -1)
i01.moveHead(90.0,90.0,90.0,90.0,0.0,90.0)
i01.moveArm("left",0.2,90.2,30.2,12.2)
i01.moveHand("left",0.0,0.0,0.0,0.0,90.2)
i01.moveArm("right",0.2,90.2,30.2,12.2)
i01.moveHand("right",0.0,0.0,0.0,0.0,90.2)
i01.moveTorso(90.2,90.2,90.0)
-In file, click on “save as”, select the directory mrl/myrobotlabXXXX/InMoov/gestures.
-Save it as: handflat.py.
-You are done for the gesture.
-Now we are going to create in the chatbot the function to call the gesture.
-Open in a text editor mrl/myrobotlabXXXX/RESOURCE/programAB/bots/en-US/aiml/_inmoovGestures.aiml
-Write at the bottom of the aiml file a new function like this:
<category><pattern>HANDS FLAT</pattern>
<template>I set my hands flat
<oob><mrl><service>python</service><method>exec</method><param>handflat()</mrl></oob></template>
</category>
-Save the aiml file.
-You are done.
Look out for indentation, python is very strict about that.
Hope this helps
How to on the second function:
Using the Gesture Creator is another very handy solution. Thanks to Ma.Vo for building that service into MyrobotLab.
NOTA: This service has issues in Manticore and is bound to be modified for the next releases.
Keep the power cord handy, altough normally with good min max settings shouldn’t get something wrong, but I don’t want to be responsible for broken servos! ; )
Explanation:
To connect to InMoov simply run your InMoov script, then start InMoovGestureCreator (or start it first, it’s the same). Now click on “Connect” – the Button will change into “Disconnect”, you are connected and can start making gestures (you can make them without InMoov-Connection, too, but you can’t test them directly).
In the list with the frame, you may sometimes want to use the arrow keys (UP / DOWN) to get to a frame that is under the edge.
And when you copy the generated code out, please use “STRG” + “A” to mark the whole text (and “STRG” + “C” to copy it).
The gesture list will sometimes use a “X” in front of a function, this means the function contains operations that aren’t supported by the editing/creating part, you can’t load it, but update and remove it.
When a gesture contains movements that don’t implement the whole section (e.g. “i01.moveHead(10,10)” instead of “i01.moveHead(10,10,10,10,10)”), it will take “90” for the servos that aren’t implemented. The same is with the speed, here it will take 1.0 for unimplemented servos.
Tabs:
main -> Switch sections ON/OFF (they are saved, but can’t be edited and displayed until it is switched ON again)
Right Hand/Right Arm/Left Hand/Left Arm/Head/Torso -> Edit the actual servo positions
Buttons:
Connect / Disconnect -> Connect to / Disconnect from InMoov
Load Scri -> Load the current script out of the Python service (has to be executed first)
Save Scri -> Save the script / Export the script (a new window will open)
Load Gest -> Load the selected gesture for editing
___ ___ Add Gest -> Add the loaded gesture to the script
___ ___Update Gest -> Update the selected gesture with the loaded one
Remove Gest -> Removes the selected gesture out of the script
Test Gest -> Test your created gesture (requires InMoov – connection)
_____Add -> Add a frame with servo movements
Add Speed -> Add a frame with speed settings
_____Add Sleep -> Add a frame with sleep
_____Add Speech -> Add a frame with speech
Import Min Rest Max -> Import the current InMoov min-/ rest-/ max-settings (requires InMoov – connection)
Remove -> Remove the selected frame (servo, sleep, speech or speed)
Load -> Load the selected frame (servo, sleep, speech or speed)
Update -> Update the selected frame (servo, sleep, speech or speed)
Copy -> Copy the selected frame (servo, sleep, speech or speed)
Up -> Move the selected frame up (servo, sleep, speech or speed)
Down -> Move the selected frame down (servo, sleep, speech or speed)
Test -> Test the selected frame (servo, sleep, speech or speed) (requires InMoov – connection)
CheckBoxs:
Move Real Time -> Move your robot when you adjust the sliders (requires InMoov – connection)