Cours:SaéSBC : Différence entre versions
(→Ressources) |
(→Réseau local) |
||
Ligne 8 : | Ligne 8 : | ||
*Classes diverses à disposition :[[Media:FichiersEtudiantEvalPOO2.zip]] / [[Cours:DevoirPOO2_classes]] | *Classes diverses à disposition :[[Media:FichiersEtudiantEvalPOO2.zip]] / [[Cours:DevoirPOO2_classes]] | ||
− | = | + | =Contraintes communes= |
+ | |||
Vous devrez configurer un réseau local pour connecter les cartes / ordinateurs que vous utiliserez. | Vous devrez configurer un réseau local pour connecter les cartes / ordinateurs que vous utiliserez. |
Version du 14 octobre 2022 à 14:36
travail en trinôme
Sommaire
Ressources
- Cours:QtMqtt
- Cours:RessourcesReseau
- événements de périphérique evdev (clavier/souris) en mode console
- Classes diverses à disposition :Media:FichiersEtudiantEvalPOO2.zip / Cours:DevoirPOO2_classes
Contraintes communes
Vous devrez configurer un réseau local pour connecter les cartes / ordinateurs que vous utiliserez.
Nous donnerons à chaque groupe les caractéristiques du réseau à créer.
bras robotique
- les communications se feront avec le protocole mqtt
- télécommande
- affichage de la couleur de la balle sur des leds
- affichage déporté (angles des servos, détection de balle ...)
Objectif : déplacer le bras pour saisir une balle.
- Media:TestPca9685.zip
- Media:SourcesPixyCPP.zip
- utiliser pixymon pour configurer la caméra pixy
- Quelques références :
- RaspArm-S Kit for RPi : https://www.adeept.com/learn/detail-53.html (télécharger "Tutorials and Code" en particulier)
Exemple Pixy :
//fichier pro
LIBS += -L/opt/electronique/pi/sysroot/lib/arm-linux-gnueabihf -l:libusb-1.0.so -l:libudev.so.1
INCLUDEPATH += /opt/electronique/pi/sysroot/usr/include/libusb-1.0/
// sans doute dans un .h
...
#include "pixy/libpixyusb2/include/libpixyusb2.h"
...
Pixy2 pixy;
....
// sans doute dans un .cpp
...
int Result = pixy.init();
if (Result<0) qDebug()<<"pb initialisation pixy !!!";
....
pixy.ccc.getBlocks();
if (pixy.ccc.numBlocks)
{
qDebug()<<"Detected "<< pixy.ccc.numBlocks <<" block(s)\n";
for (int blockIndex = 0; blockIndex < pixy.ccc.numBlocks; blockIndex++)
{
qDebug()<<pixy.ccc.blocks[blockIndex].m_x<<" "<<pixy.ccc.blocks[blockIndex].m_y;
}
}
Robot mobile
- comportement dépendant de codes barre, ex de code barre :
- tourner à droite
- tourner à gauche
- 1/2 tour
- ...
- télécommande wifi par mqtt
- affichage sur des leds de la vitesse des moteurs
Pb de verrouillage numérique
Si lors de la lecture d'un code barre les chiffres n'apparaissent pas, il faut :
- ouvrir le fichier /etc/rc.local dans un éditeur:
- nano /etc/rc.local
- ajouter les lignes suivantes avant exit 0
for tty in /dev/tty[1-9]*; do setleds -D +num < $tty > /dev/null done
- sauvegarder : control+w
- quitter : control+x
- redémarrer la carte
- reboot
Lecture de fichier CSV
Classes à utiliser :
- QFile
- méthode readline
- QString
- méthode split
Documents
Conserver le focus clavier sur la zone de saisie
- Ajouter une zone de saisie dans l'interface : QLineEdit
- rendre active cette zone : ui->lineEdit->activateWindow();
- garder le focus sur cette zone : ui->lineEdit->setFocusPolicy(Qt::StrongFocus);
- empêcher la prise du focus clavier par d'autres widgets :
- sur chaque widget
- ui->unWidget->setFocusPolicy(Qt::NoFocus);
Domotique
- à minima
- 3 cartes rpi
- communication par mqtt
- carte capteurs (i2c/gpio)
- carte actionneurs (i2c/gpio)
MQTT pour Qt : https://doc.qt.io/QtMQTT/qtmqtt-index.html
MQTT pour Arduino : https://pubsubclient.knolleary.net
NanoPi avec NodeRed ou QT
Adresses IP pour cartes Arduino : 10.98.9.XXX avec XXX = 211, 212, 213, 214 ou 215. Changer également l'adresse MAC pour la différencier des autres cartes.
Adresse broker mosquitto : 10.98.35.245
Balancing Robot
- les communications se feront avec le protocole mqtt
- modifier avec une interface graphique les paramètres de l'asservissement
- télécommande avec boutons physique
- affichage de l'angle du robot sur un barregraphe
Indications pour démarrer
Projet QTCreator pour commencer : Media:balancingBot_Minimal.zip
Il faudra configurer un kit de cross-compilation :
- Appareil mobile : linux générique (ip=192.168.7.2, login=root, mdp=geii)
- Racine du système : /opt/electronique/bbBlue/sysroot
- Version de QT : pointer /opt/electronique/bbBlue/qt5/bin/qmake
- Compilateurs : pointer l'executable du compilateur situé dans l'arborescence de /opt/electronique/bbBlue/
Aide pour régulation PID : lire http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/
Guide de progression
- Configurer le projet pour qu'il compile et s'exécute sur la carte du robot
- Analyser le code - inutile de rentrer trop dans le détail, mais comprendre l'articulation des classes utilisées dans le main.
- Afficher la valeur d'angle du gyroscope en temps réel avec qDebug()
- Implémenter une classe pour un régulateur PID qui interviendra entre le gyroscope et les moteurs. Vous pourrez commencer par un régulateur proportionnel uniquement et compléter ensuite.
- Implémenter une application graphique PC communiquant en tcp avec le robot permettant
- d'afficher les valeurs du gyroscope,
- de démarrer/éteindre le PID,
- de modifier les valeurs du PID,
- ...