Aller au contenu


Mike118

Inscrit(e) (le) 26 janv. 2012
Déconnecté Dernière activité aujourd'hui, 21:41
*****

Sujets que j'ai initiés

Comment configurer mon robot vigibot pour piloter Moteurs, Relais et Leds?

09 octobre 2020 - 12:07

Votre robot connecté à vigibot peut être configurer pour piloter de nombreux éléments directement depuis les GPIO de la raspberry pi ou derrière un module expander de GPIO 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 : 

Fichier joint  pwmdirdir.JPG   23,21 Ko   35 téléchargement(s)

 

Fichier joint  pwmdirdir2.JPG   22,72 Ko   26 téléchargement(s)

 

voilà!


First Flying Vigibot Drone!

14 septembre 2020 - 05:25

Fly a Tello drone over the Internet with Vigibot.com!
 
The First Vigibot flying drone is made by Adibou88 / Blafy (Banban) connecting is Tello drone to Vigibot.com by using a Raspberry Pi 3B+ as a ground station bridge.
Github to do the same : https://github.com/Blafy/Telloclient
 
Contrôlez un drone volant Tello par Internet avec Vigibot.com!

Le premier Vigibot volant a été réalisé par Adibou88 / Blafy (Banban). Il a connecté son drone Tello à Vigibot en passant par une raspberry pi 3B° en tant que station relais au sol.
Github pour faire la même chose : https://github.com/Blafy/Telloclient

 

 


Serial troubleshooting for titi

08 septembre 2020 - 08:57

First step : check that the raspberry pi provide serial outputs as expected :

 

To activate this in hardware config activate " WRITEUSERDEVICE " . 

 

Fichier joint  activeSerial.JPG   15,73 Ko   24 téléchargement(s)

 

Nothing more is needed for this first step. 

 

By default Raspberry serial0  is selected, this is connected to GPIO 14 (TX ) and GPIO 15 (RX ) 
And default baudrate is 115200 Baud. 

 

 

 

You should check that the data is available on the TX pin ( GPIO 14 )  with an oscilloscop or just a led.

Note refer to this to double check that you are using the correct raspberry pi GPIO : 
 

GPIOPinout.png


 

You can also use simple this arduino sketch: 

// Connect RX arduino pin digital 0   to Raspberry Pi Tx Pi Gpio 14
// Connect Arduino GND and Raspberry Pi GND 
// Either connect Arduino 5V to Raspberry pi 5V or connect Arduino USB on your computeur. 
// If some data is received, the led will be on and text will be display on Serial monitor if arduino is connected with USB
// If no data the led will stay off. 

#define LED 13

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);  
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available()) {  // Data received
    digitalWrite(LED, HIGH);
    int incomingByte = Serial.read();
    Serial.print("I received: ");  // Display received data
    Serial.println(incomingByte, DEC);
    
  } else {
    digitalWrite(LED, LOW);
  }
 
}




 


Nouvel ouvrage de Nulentout sur la fabrication d'un cube de led 8x8x8 avec Arduino

17 juillet 2020 - 03:58

Si vous aimez les ouvrages de Nulentout, j'ai (enfin!  Et après plusieurs mois de retard ...) publié le dernier ouvrage de Nulentout concernant la fabrication d'un cube de led RGB 8x8x8 avec une arduino nano. 

Lien vers l'ouvrage :  Réaliser un cube de led 3D 8x8x8 par Nulentout 
 

 

Pour rappel les ouvrages c'est par ici : Liste des ouvrages  

Vous y retrouverez de nombreux ouvrages majoritairement rédigés par Nulentout ( mais pas que ;) ) . 
 


Bases de la modélisation et des robots de la des robots-manipulateurs de type série com...

23 juin 2020 - 05:18

Pdf exposant les mathématiques mis en oeuvre pour la modélisation et la commande de bras robots manipulateurs à configuration série : 

Fichier joint  Khalil-Dombre_Modelisation.pdf   2,72 Mo   79 téléchargement(s)

 

Ce document constitue un support de cours (une vingtaine d'heures) pour des étudiants en Master ou en Ecole d'Ingénieurs qui cherchent à acquérir les bases de la modélisation, de la génération de mouvement et de la commande des robots manipulateurs de type série. 

 

Au programme : 
Des schémas de modélisation, des matrices, des équations, des modèles directe et inverse, des méthodes de résolutions, des lois de commandes en vitesse , de la cinématique et de la dynamique. 

 

Bref tout ce qui est souvent boudé par les makers ... Car pas " indispensable " pour réaliser une bras robot, mais qui permet d'aller plus loin dans ses réalisations ... Afin d'améliorer aussi bien sa mécanique que ses programmes...