Darwinoppy : Comment apprendre à créer une nouvelle Creature?

La discussion a bien fait avancer les choses et du code est disponible sur le projet Darwinoppy.
Il est peut être temps de créer un topic dédié et je laisse ici les derniers détails autour du Sync_Read en fin de discussion.


maintenant que j’ai moyen de tester pypot sur mon Darwin mini, j’aimerai apprendre à créer une Creature qui lui serait dédiée.
Le repo Github de l’abstract me semble être celui ci mais pour ce qui est de comment s’attaquer à cette nouvelle construction… c’est maigre en indices.

Ais je raté une documentation ailleurs ?

Cela fait partie des choses qui ne sont pas bien documentés, par manque de temps malheureusement. J’ai commencé à travailler sur un exemple pour faire ça ici (attention c’est encore du WIP !) :

1 Like

je vais faire de mon mieux et les discussions qui auront lieu sur ce fil pourront contribuer à la documentation :wink:
merci

1 Like

Si en plus de la doc. fourni par Pierre, tu veux voir des exemples de créature autre que poppy mais qui utilise pypot tu peux t’inspirer du code :

Et je maîtrise à peu près le truc, donc je pourrai te répondre.

une première lecture me fait dire que les mentions à des steps numérotées c’est bien, avoir autre chose que 1) c’est mieux :wink:

Est ce que par exemple les step décrivant les renommages nécessaires sont en fait les bullet points qui suivent ?

Désolé ! Problème de différence entre le markdown et le github markdown. Ca devrait être plus clair maintenant !

ne soit pas désolé à chaque fois, je fais les remarques pour aider à améliorer, c’était compréhensible malgré tout. :wink:

Comme tu l’as bien dit :wink:

vu que finalement j’ai une Pixl magique qui fonctionne, vu que j’ai reçu mon alimentation 7.5V, je vais m’y remettre.
le script rename-robot.py a un petit hoquet :

Working in directory “/home/thierry/projects/darwinoppy”…
Rename folder “software/darwinoppy” to “software/darwinoppy”
Traceback (most recent call last):
File “rename-robot.py”, line 35, in
os.rename(od, nd)
OSError: [Errno 2] No such file or directory

On dirait qu’il cherche à renommer… en utilisant le nouveau nom pour l’ancien…

OK, je m’auto répond: j’avais déjà renommé mon projet, vu que j’ai renommé depuis le fork (je ne pense pas qu’il y ait le moindre besoin de synchro avec le projet initial)

Je suis reparti d’un répertoire poppy-skeleton et le renommage s’est bien déroulé.

1 Like

ça avance tout doucement mais sûrement.
J’ai commencé à pousser dans un repo Github pour partager mes joies et mes peines :wink:

tout ça à cause de @juju :slight_smile:

Je vais sagement définir des motors et motor group mais j’avoue que je n’ai pas compris l’usage que je pourrais faire des group.
Il y a des fonctions dédiés par groupe dans pypot ?

Fait attention, quand on commence, on peut plus s’arréter :slight_smile:
Oui les groupes servent à faire des choses comme :

for m in robot.group:
m.goal_position = 0

@titimoby

Je repense à une commade qui permet de créer un fichier de conf automatiquement :

from pypot.dynamixel import autodetect_robot
my_robot = autodetect_robot()
my_robot.to_config()

Ton robot est automatiquement créé. C’est un peu minimaliste comme config mais je crois que cela fonctionne.

1 Like

le fichier généré n’est pas du Json des plus valide.
Les clés sont entourés de simple quote au lieu de guilllemets et les valeurs de limites sont entre parenthèses au lieu de crochet.
Après, c’est peut être utilisable par pypot quand même, mais les projets existants sont en Json valide.

Bref, ça avance quand même :slight_smile:

2 Likes

Tiens tu t’en sors toujours avec la Pixel ?

Pourquoi toujours ?
Je n’ai la Pixel de Roboticia que depuis peu mais ça marche super bien

Du coup, quand on a un fichier de configuration, on le teste comment ?
J’avoue que j’aime bien python, mais c’est pas un langage que j’ai peu manipulé ces dernières années, je suis rouillé. :slight_smile:
Je peux lire une doc aussi si on me pointe dans la bonne direction.

une idée @juju ? ou @Pierre ?

Ici tu devrais trouver de quoi faire : http://poppy-project.github.io/pypot/controller.html#writing-the-configuration

Ce truc là devrait faire l’affaire :

from pypot.robot import from_json

my_robot = from_json(‘my_robot.json’)

ça avance, j’ai listé, nommé et fait une première passe des limite d’angle.
mais si j’utilise un from_json pour créer ma creature, j’ai une série d’erreur :

Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

from pypot.robot import from_json
my_robot = from_json(‘darwinoppy.json’)
Exception in thread Thread-3:
Traceback (most recent call last):
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/controller.py”, line 152, in setup
positions, speeds, loads = list(zip(*values))
ValueError: need more than 0 values to unpack

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3.4/threading.py”, line 920, in _bootstrap_inner
self.run()
File “/usr/lib/python3.4/threading.py”, line 868, in run
self._target(*self._args, **self._kwargs)
File “/usr/local/lib/python3.4/dist-packages/pypot/utils/stoppablethread.py”, line 121, in _wrapped_target
self._setup()
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/controller.py”, line 154, in setup
raise DxlError(“Couldn’t initialize pos/speed/load sync loop!”)
pypot.dynamixel.io.abstract_io.DxlError: Couldn’t initialize pos/speed/load sync loop!

Exception in thread Thread-1:
Traceback (most recent call last):
File “/usr/lib/python3.4/threading.py”, line 920, in _bootstrap_inner
self.run()
File “/usr/lib/python3.4/threading.py”, line 868, in run
self._target(*self._args, **self._kwargs)
File “/usr/local/lib/python3.4/dist-packages/pypot/utils/stoppablethread.py”, line 121, in _wrapped_target
self._setup()
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/syncloop.py”, line 22, in setup
[c.start() for c in self.controllers]
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/syncloop.py”, line 22, in
[c.start() for c in self.controllers]
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/controller.py”, line 25, in start
self.wait_to_start()
File “/usr/local/lib/python3.4/dist-packages/pypot/utils/stoppablethread.py”, line 86, in wait_to_start
‘for details.’.format(self._thread.name))
RuntimeError: Setup failed, see Thread-3 Tracebackfor details.

Traceback (most recent call last):
File “”, line 1, in
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/config.py”, line 272, in from_json
return from_config(config, sync=sync, strict=strict, use_dummy_io=use_dummy_io, **extra)
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/config.py”, line 79, in from_config
robot = Robot(motor_controllers=controllers, sync=sync)
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/robot.py”, line 49, in init
self.start_sync()
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/robot.py”, line 64, in start_sync
[c.start() for c in self._controllers]
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/robot.py”, line 64, in
[c.start() for c in self._controllers]
File “/usr/local/lib/python3.4/dist-packages/pypot/robot/controller.py”, line 25, in start
self.wait_to_start()
File “/usr/local/lib/python3.4/dist-packages/pypot/utils/stoppablethread.py”, line 86, in wait_to_start
‘for details.’.format(self._thread.name))
RuntimeError: Setup failed, see Thread-1 Tracebackfor details.

Le fichier de config est dans mon github
J’en déduis qu’il me manque des définitions (j’étais parti d’un fichier généré par l’autodetect de pypot)

La suite bientôt j’espère :slight_smile: