Bonjour,
Je suis sur le poppy // wifi Version// je vudrais faire parler poppy et qu’il bouge les bras en même temps.
Dans le fichier demonstrator_server.py, je trouve le code:
@self.app.get('/play/<move>')
def play_move(move):
if move in custom_moves:
if move == 'Sit':
self.rest_prim = self.poppy.sit
elif move in ('Stand-Up', 'Walk'):
self.rest_prim = self.poppy.stand_up
# elif move == 'HeadTracking':
# self.poppy.turn_compliant.start()
# self.running_prim.append(self.poppy.turn_compliant)
prim = getattr(self.poppy, custom_moves[move])
# elif move == 'HeadTracking':
# self.poppy.head_tracking.start()
# self.running_prim.append[self.poppy.head_tracking]
else:
filename = os.path.join('moves', '{}.json'.format(move))
with open(filename, 'r') as f:
m = Move.load(f)
prim = MovePlayer(self.poppy, m)
prim.start()
self.running_prim.append(prim)
Je comprends que les mouvementes pre-enregistré dans l’interface web , sont joué grace à ce code.
Je voudrais reutiliser ce code, pour faire juste jouer une sequence tjs predefini (le nom du fichier ne change pas) et ceci depuis une commande line ! pas d’interface web
alors si je fais depuis un web ui: http://10.0.0.1:9999/play/macarena
et bien cela fonctionne!
pas contre je dois initialiser la GUI depuis le web, etc… c’est malheureusement peu fiable du au perte de connexion wifi,
il faudrait que je fasse un programme python qui lance vraiment une sequence de mouvement…
a suivre
De quoi? Tu veux faire quoi exactement?
Oui play/move permet de jouer des mouvements pré-enregistrés genre ceux que tu crées par l’interface de démo.
Si tu veux faire ça en code, le plus court c’est d’utiliser la primitive MovePlayer(), comme dans le code mais sans les trucs autour:
tu ouvres ton fichier de mouvement .json
tu le transformes en objet Move
tu crées une primitive MovePlayer
tu start la primitive
with open(filename, 'r') as f:
m = Move.load(f)
prim = MovePlayer(poppy, m)
prim.start()
Éventuellement prim.wait_to_stop() si tu veux que ce soit bloquant.
Genial ! je vais tester (mais plus tard).
j’imagine que mon prgramme python doit faire appel au début aux fonctions d’init du robot . non ?
je vais prendre les codes mis sur le forum (ex. le code pour faire tomber poppy dans le simulateur vrep-. Si tu as un bout de code déjà tout fait, je prends !
A++
(Ps: merci merci merci merci pour le temps que tu passes en ce dimanche!).
import os
import time
import poppytools
from pypot.robot import from_json
config_path = os.path.join(os.path.dirname(poppytools.__file__), 'configuration', 'poppy_config.json')
poppy = from_json(config_path)
poppy.start_sync()
move_filename = "/home/odroid/dev/poppy-software/demo/webdemo/moves/macarena.json"
from pypot.primitive.move import Move, MovePlayer
with open(move_filename, 'r') as f:
m = Move.load(f)
prim = MovePlayer(poppy, m)
prim.start()
python readmovement.py
Exception in thread Thread-get_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Thread-get_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Thread-set_compliance_margin (most likely raised during interpreter shutdown):Exception in thread Thread-set_compliance_slope (most likely raised during interpreter shutdown):Exception in thread Thread-set_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Primitive Manager (most likely raised during interpreter shutdown):Exception in thread Thread-1 (most likely raised during
interpreter shutdown):odroid@odroid:~/dev/poppy-software/demo/webdemo$ python readmovement.py
Exception in thread Thread-get_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Thread-set_pid_gain (most likely raised during interpreter shutdown):Exception in thread Thread-set_compliance_margin (most likely raised during interpreter shutdown):Exception in thread Thread-set_compliance_slope (most likely raised during interpreter shutdown):
Exception in thread Thread-get_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):Exception in thread Thread-set_pos_speed_load (most likely raised during interpreter shutdown):Exception in thread Primitive Manager (most likely raised during interpreter shutdown):
Celui là c’est un peu tricky… en fait le programme te dit simplement qu’il a planté APRES avoir exécuté ton programme (les threads ne sont pas clean dans le bon ordre, problème python 2.* connu).
Du coup, ton problème est simplement que ton programme se termine avant que tu ai eu le temps de faire quoi que ce soit. Avec un :
import os
import time
import poppytools
from pypot.robot import from_json
config_path = os.path.join(os.path.dirname(poppytools.__file__), 'configuration', 'poppy_config.json')
poppy = from_json(config_path)
poppy.start_sync()
move_filename = "/home/odroid/dev/poppy-software/demo/webdemo/moves/macarena.json"
from pypot.primitive.move import Move, MovePlayer
with open(move_filename, 'r') as f:
m = Move.load(f)
print move_filename
prim = MovePlayer(poppy, m)
prim.start()
time.sleep(5)
prim.wait_to_stop()
Le robot ne fait, il bloque sur le wait_to_stop
par contre, le programme de clement et pierre (making music) fonctionne, lepied bouge bien … grrrr!
en fait, j’ai rahouté cette instruction mais bizarrement, j’ai un autre souci qui apparait:
Traceback (most recent call last):
File "readmovement.py", line 13, in <module>
poppy = from_json(config_path)
File "/home/odroid/dev/pypot/pypot/robot/config.py", line 191, in from_json
return from_config(config)
File "/home/odroid/dev/pypot/pypot/robot/config.py", line 112, in from_config
port = find_port(ids, strict)
File "/home/odroid/dev/pypot/pypot/dynamixel/__init__.py", line 56, in find_port
raise IndexError('No suitable port found for ids {}!'.format(ids))
IndexError: No suitable port found for ids [31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 51, 52, 53, 54]!
Là comme tu le dis c’est qu’il y a un (ou plus) moteur qu’il ne trouve pas. Il faut peut être redémarrer le robot, si ça ne marche toujours pas, vérifie les fils. Il y’en a probablement un qui est détaché ou abimé.