Votre robot connecté à vigibot peut être configuré pour piloter de nombreux éléments directement depuis les GPIO de la raspberry pi ou derrière un module permettant "d'augmenter le nombre de GPIO" le PCA9685.
Peuvent ainsi être piloté des leds de manière tout ou rien ( valable aussi pour un relais par exemple ) ou avec plus ou moins de luminosité (valable aussi pour piloter un ventilateur plus ou moins vite en passant par un transistor) , des servomoteurs et différents drivers de moteurs CC.
Pour le faire vous devrez configurer la configuration " Hardware " de votre robot.
Cliquez sur l'icone " Engrenage " .
Si vous n'avez fait aucune modification vous allez arriver sur une fenêtre " vide " et c'est normal.
Si vous avez déjà effectué des modifications vous verrez toutes les tables dans lesquels vous avez modifié quelque chose.
Vous pouvez sélectionner l'onglet " Configuration effective " .
Vous verrez alors la configuration actuellement appliquée à votre robot. ( Vous vous rendrez compte que vous pouvez configurer pas mal de choses, mais tout ne sera pas présenté ici nous nous concentrons uniquement sur les " périphériques de sortie " : Leds, moteurs, etc ... )
Une des table Disponible est la table " OUTPUTS " . Cette table contient la configurations de tous vos périphériques de sortie. Led , moteurs etc... Pour chaque périphérique vous avez un OUTPUTS. Votre configuration par défaut possède déjà de nombreux OUTPUTS.
Un "Output" possède les différents paramètres suivant :
NAME : Champs que vous pouvez remplir comme bon vous semble, ne sera pas affiché, c'est uniquement pour que vous vous rappeliez de quel outputs il s'agit.
TYPE : Champs pour indiquer quel type de matériel on va piloter : Vous ne pouvez mettre que des type pré défini qui sont les suivants :
=> Gpios : Pour tout ce qui est tout ou rien, 1 ou 0, On ou Off . Pilotage de Relais, de transistor , de leds ...
=> Servos : Pour tout ce qui se commande avec les même signal que les servomoteurs ( servomoteur, drivers de moteur ou tout autre périphériques utilisant le même genre de signal qu'un servomoteur classique )
=> Pwms : Pour piloter la luminositer d'une led ou bien la vitesse d'un moteur piloter par un transistor . ( Ne pas utiliser Pwms avec un Relais! )
Il existe aussi des type un peu plus spécialisé pour les drivers de moteurs:
=>PwmPwm : Driver de moteur avec deux fils par moteurs du genre du L9110 nécessitant deux pwm pour définir la vitesse et le sens de rotation d'un moteur
=>PwmDir : Driver de moteur nécessitant deux fils par moteurs du genre du MD10C cytron nécessitant un pin Pwm pour la vitesse et un pin Dir pour choisir le sens.
=>PwmDirDir : Driver de moteur nécessitant trois fils par moteurs du genre du L298 avec un pin PWM ( enable ) et deux pins de direction ( In)
ADRESSE : par défaut valeur à laisser à -1 utile que si vous souhaiter piloter un élément non pas avec les GPIO de la pi mais en passant par les GPIO sur un PCA. Dans ce cas précis remplacer -1 par le numéro de votre pca. 0 si vous n'avez qu'un seul PCA, 0 ou 1 si vous avez deux PCA etc ... Pour plus d'info sur le pca9685 : https://www.robot-ma...-leds/?p=111711
GPIOS : Contient les GPIOS auxquels seront connecté vos périphérique. Nombre compris entre 0 et 27 pour les gpio de la pi et entre 0 et 15 pour un pca.
Les type Gpios, Servos, Pwms, peuvent avoir plusieurs gpio si vous voulez " dupliquer un même signal " sur plusieurs GPIO, et à minima 1 gpio de défini.
Attention : les types spécifique PwmPwm et PwmDir, doivent absolument avoir deux GPIOS de spécifié, et le type PwmDirDir doit absolument avoir trois Gpios de spécifié. Pour les type PwmDir et PwmDirDir, le premier gpio est le pwm.
Attention bis : évitez d'utiliser des Gpios qui sont déjà utilisé par un autre Output. La présence de conflits peut provoquer des comportement erratique ne fonctionnant pas du tout comme souhaité.
SLEEPMODES : Défini dans quels états sont mis vos pins quand le robot est en mode sommeil.
Vous devez avoir autant de sleepmode que de GPIO.
4 valeurs de sleepmode possible : None High Low ou Floating.
None = On ne change pas l'état du Gpio quand le robot passe en mode sommeil , le gpio reste dans l'état dans lequel il était.
High Low ou floating = Le gpio sera à dans l'état spécifié lorsque le robot est en mode sommeil
INS : défini la plage d'entrée qui va commander votre système. Généralement à faire matcher avec les paramètres défini dans votre télécommande.
Généralement les ins sont défini entre -180 et 180 pour les servo ( commande en degré ) et -100 à 100 pour les moteurs ( commande de pourcentage de vitesse ) mais peut être paramétrer différemment pour d'autres unités si souhaité .
Attention, toujours respecter l'ordre croissant lorsque vous spécifiez vos "ins".
Il doit toujours y avoir à minima 2 Ins de paramétré mais vous pouvez en mettre plus en respectant toujours l'ordre croissant.
OUTS : défini la plage de valeur de sortie que va piloter votre système.
Pour le type Servos la plage des valeurs des OUTS est entre 500 ( µs ) et 2500 (µs )
Pour le type Gpios la plage des valeurs est 0 ou 1. ( traduit High ou Low )
Pour les autre types la plage de valeur est -100 à 100. ( pourcentage de pwm -100% à 100% , le signe servant pour les pins de direction )
Attention, Il doit absolument y avoir autant de OUTS que de INS ! Les tableaux INS OUTS servant à definir le comportement de sortie de votre périphérique en fonction de l'entré qu'il reçoit.
if ( INS[X] <= in && in <= INS[X+1] )
out = map (in, INS[X], INS[X+1], OUTS[X], OUTS[X+1] )
pour plus de détails vous pouvez regarder la fonction computeOut dans clientrobotpi.js
La configuration des INS et des Outs vous permet de faire des courbes de comportements de l'entré par rapport à la sortie " linéaire par morceaux ".
Vous pouvez par exemple pré calculer une approximation du comportement " au carré " avec la config suivante :
INS : -10 -7 -4 -2 0 2 4 7 10
OUTS: -100 -49 -16 -4 0 4 16 49 100
BACKSLASH : Valeur de rattrapage de jeu, utile uniquement pour corriger des servomoteurs ayant du jeu.
0 par défaut = pas de rattrapage.
Valeur assez faible à mettre entre 0 et 10 en général.
C'est une valeur en delta de PWM servo en µs ...
Pour ceux qui s'intéressent à son fonctionnement : cette valeur "s'ajoute ou se soustrait" a la sortie " out" avec changeant de signe en fonction de la dérivée de la consigne.
Pour plus de détails voir la fonction writeOutputs() dans clientrobotpi.js
Pour finir :
COMMANDS16
GAINS16
COMMANDS8
GAINS8
COMMANDS1
GAINS1
Cette triplette de paire, permet de définir quelles sont les commandes ( parmi les commandes définie dans votre télécommande) qui vont avoir un impacte sur votre périphérique avec quels gains.
in = Somme ( Commandes16[i] * Gains16[i] ) + Somme ( Commandes8[j] * Gains8[j] ) + Somme ( Commandes1[k] * Gains1[k] )
Pour plus de détails voir la fonction writeOutputs() dans clientrobotpi.js
Attention :Toujours mettre un numéro de commandes qui existe dans votre télécommande.
Pour le moment il y n'y a que 8 commandes1 N° 0 à 7 et 3 commandes 8 disponible n° 0 à 2 ( Vitesse en x = translation gauche droite , vitesse en y ) avance recule, et vitesse en z = rotation gauche droite )
Le nombre de commandes16 lui est paramétrables dans votre télécommandes.
C'est grâce à cette triplette de paire de configuration que vous pouvez mixer plusieurs commandes ensemble pour piloter un actionneur. C'est très utile pour le contrôle des moteurs de propulsions d'un robot par exemple, et permet de configurer aussi bien un déplacement différentiel en jouant avec les commandes8 1 et 2 que de configurer la commande de robots omnidirectionnel du type mecanum, omniwheel et même drone volant!
Cas d'application
Exemple concret :
Si j'ai un robot qui utilise un driver de moteurs de type L298 pour se déplacer (au lieu d'un driver de moteur qui se pilote comme un servomoteur, ce qui est configuré par défaut )
A ) Je regarde quelles sont les Outputs qui sont actuellements configuré dans la configuration effective, et je repère les OUTPUTS[4] et OUTPUTS[5] dont les noms sont "Left wheels" et "Right wheels". Ce sont donc uniquement ces deux outputs que nous allons modifier.
B ) Je choisis le type correspondant ( L298 => PwmDirDir )
C ) J'ajoute deux gpios dans la table GPIOS pour avoir les 3 gpio requis pour le type PwmDirDir , et je choisis les GPIOS parmis les gpios disponibles :
pour une config standard les Gpio disponible sont 0 , 1, 4 9 10 11 12 13 24 25 26 27. ( 26 et 27 sont utilisé pour les moteurs mais vous êtes en train de travailler sur les moteurs , donc ces deux Gpios sont aussi disponible ... )
Rappel : 2 et 3 sont utilisé par l'I2C, 14 et 15 sont pour l'UART 16 à 23 sont les 8 Gpio des interrupteurs, 5 à 8 sont utilisé pour la tête et la pince )
(Note :Pour ajouter des paramètre choisir le mode d'édition texte code ou encore le mode tree. )
D ) J'ajoute 2 sleepmode pour avoir autant de sleepmode que de gpios. Pour un driver de moteur mettre tous les sleepMode à Low est une bonne idée. ( Surtout ne pas mettre le PWM en sleepmode à High un de pins de direction à High et l'autre à Low sinon votre robot va se mettre à se déplacer en veille ! )
E ) Je modifie les valeurs de outs pour correspondre à la plage de -100 à 100 du mode PwmDirDir et je met autant de outs que de in.
Par default 4 ins sont configuré : -100 -1 1 100, c'est pour cela que j'ai 4 outs
En générale les deux extrémités des outs vous pourrez les mettre à -100 et à 100 pour aller à la vitesse max.
Et les deux valeurs centrales sont à régler pour que votre robot avance dès que vous envoyez une petite impulsion pour avancer.
Exemple de outs valable : -100 -10 10 100 mais -100 -1 1 100 est valable aussi, ça dépend de votre robot.
Si mon robot ne roule pas bien droit je peux ajuster les outs du moteur qui va trop vite pour corriger le défaut observer en réduisant la vitesse max par exemple..
Ce que ça donne comme configuration modifiée :
voilà!