Les travaux de cet été 2021 (1/2) - La supervision

 Le contexte

Quand j’ai choisi de re-participer à Eurobot, nous étions à quelques jours des finales. Alors j’ai choisi de re-travailler sur notre robot précédent. Deux points me chagrinaient, le premier étant les capacités de supervision du robot.

 La supervision

Ce qu’on peut faire avec une liaison série, un peu de python et de Qt.

  Les servomoteurs

Chaque année, le réglage des positions des servomoteurs se fait en entrant une valeur au hasard, compilant le code et testant. Il faut une petite quinzaine d’itérations pour affiner chaque position. Alors qu’il suffit de pas grand chose pour lier une commande de la liaison série à la commande d’un servomoteur.

Donc voilà, nous définissons une trame simple, qui permet de forcer la position d’une servomoteur. La trame est la suivante :
"Sxpppp"

  • S pour Servo
  • x pour le numéro du servomoteur à pilote
  • pppp pour la position à atteindre, en hexadécimal.

Sur l’interface graphique, 6 boutons, 3 pour avancer d’un petit pas, d’un pas moyen ou d’un grand pas, 3 pour reculer. Ces boutons sont un peu rigides, alors je rajoute un curseur horizontal (QSlider) qui permet d’atteindre une position approximative très rapidement. Enfin, un champ texte affiche la position actuelle.

Un dernier bouton permet de récupérer la position actuelle de tous les servomoteurs.


Supervision - servomoteurs

  La surveillance

Vient ensuite le problème du robot, très fréquent, du "mais qu’est-ce qu’il lui a pris de faire ça ?". Vous avez généralement le choix, pour comprendre ce qu’il se passe.

Soit vous banchez un débogueur sur votre robot, mais chez nous, ça ne marche pas génial. Les broches de debug sont utilisées pour autre chose, le débogueur Microchip n’aime pas trop les interruptions et rapidement, nous n’arrivons même pas à reproduire le bug avec le débogueur branché (alors que sans, c’était 100% reproductible).

Soit vous émettez un signal en fonction des états de votre programme (comme allumer une LED). C’est une solution simple, qui a le mérite de bien marcher dans des cas simples.

Avec la surveillance, le robot émet sur la liaison série toute une série de valeurs correspondant aux états du robot (position, orientation, distances des obstacles, etc...) à intervalles réguliers. Comme le robot émet un entête descriptif de ce qu’il va envoyer, nous pouvons modifier l’ordre des valeurs, en enlever ou en rajouter sans toucher au code de la supervision.

L’interface n’est pas très soignée, mais nous avons quand même deux panneaux.

Le premier affiche les valeurs actuelles :


Supervision - état actuel

Le second un graphique pour la valeur sélectionnée. Généralement en fonction du temps, mais afficher la position Y en fonction de la position X est tellement parlant que nous ne nous en sommes pas privé :


Supervision - graphique

  La communication

Enfin, toujours pour aider au debug, nous renvoyons sur la liaison série ce qui transite sur la liaison I2C. Soyons clair, ce ne serait pas adapté à de gros débit de communication. Mais dans notre cas ça marche !


Supervision - communication

 Les bonus

  La sauvegarde

Analyser à chaud, c’est bien. Pouvoir reprendre les logs précédents pour revoir un détail qui nous aurait échapper, c’est mieux. Chaque acquisition est enregistrée et peut être rechargée.

  Le Python

Le programme est développé en Python, avec PyCharm. PyCharm est puissant mais parfois un peu lent à lancer. Alors lorsque nous avons voulu lancer notre programme sans ouvrir PyCharm, nous avons rencontré deux erreurs :

$ python Supervision.py ... SyntaxError: invalid syntax

Sous Debian, notre Python est Python 2.7. Essayons avec Python3 :

$ python3 Supervision.py ... ModuleNotFoundError: No module named 'PyQt5'

Et pourtant, ça marche avec PyCharm.

Le secret réside dans les environnement virtuels. PyCharm utilise venv.

Activation $ source venv/bin/activate

Et là, un simple :
$ python3 Supervision.py
lance l’application.

Pour quitter l’environnement virtuel, utilisez la commande suivante :

Désactivation $ desactivate

Plus de détail sur les environnements virtuels pour le Python, je vous conseille cet article de Linuxfr.

Commentaires

Il n'y a pas de commentaires

Ajouter un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?

Copyright "POIVRON" 2011-2021, tous droits réservés
Administration du site