This is an old revision of the document!
Poppy Software
Poppy uses pypot for control. It is a python library : http://poppy-project.github.io/pypot/index.html On the top of pypot are libraries for Poppy creatures : https://github.com/poppy-project
Software setup
The quick install consists in:
- install pypot :
sudo pip install pypot
- install your popppy creature. For instance for poppy humanoid :
sudo pip install poppy_humanoid
- to check that the libraries are installed correctly, execute with python the code:
from poppy_humanoid import PoppyHumanoid poppy = PoppyHumanoid()
A good guide can be found here: https://github.com/HumaRobotics/poppy-examples/blob/master/doc/softwareGuide/softwareGuide.pdf. More technical details about pypot, you can look at installation of pypot.
++++ In detail, this is how I installed the software|
- install pip https://pip.pypa.io/en/latest/installing.html
- install the python pypot library :
sudo easy_install pypot
or
sudo pip install pypot
- install the poppy_humanoid library: download Poppy model
git clone https://github.com/poppy-project/poppy-humanoid.git
- then go to the where-you-downloaded-poppy-humanoid/software folder and install with the terminal command
python setup.py install
- To check if everything is installed correctly, you can run the following code from folder where-you-downloaded-poppy-humanoid/software. If it runs without raising an error, everything is probably installed correctly:
import time import math import json import pypot.robot ergo = pypot.robot.from_json('poppy_torso/configuration/poppy_torso.json')
++++
If you have trouble detecting your motors, you can follow the step 2 of https://forum.poppy-project.org/t/first-start-of-poppy and run in python
import pypot.dynamixel dxl_io_upper = pypot.dynamixel.DxlIO('PORT_UPPER_BODY') dxl_io_lower = pypot.dynamixel.DxlIO('PORT_LOWER_BODY') print dxl_io_upper.scan(range(60)) print dxl_io_lower.scan(range(60))
First program
- Simple motor command :
from poppy_humanoid import PoppyHumanoid import time import pypot.robot poppy = PoppyHumanoid() # or poppy = pypot.robot.from_config(poppy_config) poppy.head_z.compliant =False poppy.head_z.max_torque=20 poppy.head_z.goal_position=20 poppy.head_z.goto_position(-20,3) time.sleep(5) print "before moving" poppy.head_z.goto_position(40,3, wait=True) print "after moving"
- Make it reset to its standing position :
from poppy_humanoid import PoppyHumanoid import time import pypot.robot poppy = PoppyHumanoid() # or poppy = pypot.robot.from_config(poppy_config) for m in poppy.motors: m.compliant = False for m in poppy.motors: m.goto_position(0, 5) time.sleep(5)
- to record and replay a movement http://poppy-project.github.io/poppy-docs/pypot/doc/quickstart-primitive.html and https://poppy-project.github.io/pypot/move.html.
++++ code|
importer des fonctions import time import math import json import pypot.robot from pypot.primitive.move import MoveRecorder, Move, MovePlayer #se connecter au robot ergo = pypot.robot.from_json('poppy_torso/configuration/poppy_torso_broken.json') #on met le robot debout: tous les moteurs a 0 for m in ergo.motors: m.compliant=False m.goal_position=0.0 #imprimer tous les noms des moteurs for x in range(0,14): print "motor ",x," is ", ergo.motors[x].name #indiquer quels moteurs on relache indices=[10,11,12,13] for m in [ergo.motors[x] for x in indices]: m.compliant=True #commencer l'enregistrement move_recorder = MoveRecorder(ergo, 50, ergo.motors) move_recorder.start() print "start" #duree de l'enregistrement time.sleep(6) #arreter l'enregistrement print "stop" move_recorder.stop() for m in range(0,14): ergo.motors[m].compliant=False #sauvegrader le fichier sous le nom 'my_nice_move.txt' with open('my_nice_move.txt', 'w') as f: move_recorder.move.save(f) #rejouer le mouvement sauvegarde sans le fichier with open('my_nice_move.txt') as f: m = Move.load(f) ergo.compliant = False move_player = MovePlayer(ergo, m) move_player.start()
++++
Other examples can be tested from https://github.com/HumaRobotics/poppy-examples