Exemple d'instanciation d'un poppyrate tel qu'il pourrais être lancé comme service, avec un serveur snap, http et remote(rpc).
Ce notebook peut servir de base à dupliquer pour instancier le robot et l'utiliser directement.
import logging
import logging.handlers
from poppy_rate import PoppyRate
import poppy_rate
import poppy_rate.primitives as pp
Activation des logs en info dans le fichier [logs//poppyrate.log](./[poppyrate] logs.ipynb)
handler = logging.handlers.TimedRotatingFileHandler('logs/poppyrate.log', when="midnight", backupCount=10)
formatter = logging.Formatter('\033[1;30m%(asctime)s \033[0;33m%(levelname)s \033[1;32m%(threadName)s \033[0m%(module)s:%(lineno)-4s \033[0m%(message)s\033[0m')
handler.setFormatter(formatter)
handler.setLevel('INFO')
logging.root.handlers = []
logging.root.addHandler(handler)
logging.root.setLevel('INFO')
Création de l'objet robot avec les 3 services en tache de fond.
⚠ Attention pour couper ces services il faudra redemarrer le kernel ipython.
robot = PoppyRate(simulator = "vrep", use_snap=True, use_remote=True, use_http=True, start_services=True)
Bottle v0.12.8 server starting up (using TornadoServer())... Listening on http://0.0.0.0:8080/ Hit Ctrl-C to quit.
robot.play_sound.start()
robot.abs_x.goal_position = -10
robot.head_z.goal_position = 20
robot.dance_beat_motion.start()
robot.stand_position.start()
robot.say_hello.start()
import operator
# liste triée par t° de tuples (nom_moteur,t°)
temperatures =sorted([(m.name, m.present_temperature) for m in robot.motors], key=operator.itemgetter(1), reverse=True)
#affiche le tout
for m,t in temperatures:
print "{:>20}: {}°C".format(m,t)
robot.compliant = True
robot.close()
import os
directory = os.path.join(os.path.split(os.path.dirname(os.path.abspath(pp.__file__)))[0],'media','sounds')
[f[:-4] for f in os.listdir(directory) if f.endswith('.ogg')]
os.path.split?
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'media'
from types import MethodType
def say_something(something):
def fn(self):
print("hello %s" % something)
return fn
#def fn(self,):
# print("hello")
prim = robot.say_hello
for k in ['world', 'universe']:
setattr(prim, 'say_%s'%k, MethodType(say_something(k), prim, type(prim)))
prim.say_world()