IMA4 2017/2018 P66 : Différence entre versions

De Wiki de Projets IMA
(Conception de la carte de contrôleur moteur TLE5206)
(Conception de la carte de contrôleur moteur TLE5206)
Ligne 363 : Ligne 363 :
 
les angles à 90° sont à éviter mais pas forcément à proscrire surtout si l'on ne se trouve pas à haute fréquence
 
les angles à 90° sont à éviter mais pas forcément à proscrire surtout si l'on ne se trouve pas à haute fréquence
 
les angles très aigus (inférieurs à 45° ) et ceux supérieurs à 135° sont à éviter autant que ceux à 90°. Il faut également essayer de garder le même angle entre des pins parallèle afin d'optimiser l'espace et les fraises.
 
les angles très aigus (inférieurs à 45° ) et ceux supérieurs à 135° sont à éviter autant que ceux à 90°. Il faut également essayer de garder le même angle entre des pins parallèle afin d'optimiser l'espace et les fraises.
[[Fichier:Piste pas parrallèle.PNG|200px|thumb|center|piste non parrallèle]]
+
[[Piste_pas_parrallèle.PNG|200px|thumb|center|piste non parrallèle]]
  
 
En effet en cas d'angle très aigus (comme ceux formés par une connexion en arc de cercle avec une ligne droite) la jonction entre les deux forment un angle très aigus que la fraiseuse va devoir usiner avec des fraises très spécifiques coûtant souvent plus cher que la machine. De plus il s'agit d'une "good practice" à garder si l'usinage des cartes est chimique car il peut favoriser une collection d'acide entraînant des "grignotage" sur la carte pouvant altérer son fonctionnement.
 
En effet en cas d'angle très aigus (comme ceux formés par une connexion en arc de cercle avec une ligne droite) la jonction entre les deux forment un angle très aigus que la fraiseuse va devoir usiner avec des fraises très spécifiques coûtant souvent plus cher que la machine. De plus il s'agit d'une "good practice" à garder si l'usinage des cartes est chimique car il peut favoriser une collection d'acide entraînant des "grignotage" sur la carte pouvant altérer son fonctionnement.

Version du 31 janvier 2018 à 14:19


Présentation générale

IMA4-1718-P68-illu.png

Description

La coupe de France de robotique est un événement où des équipes doivent créer un robot autonome afin de réaliser un maximum de tâches données au préalable dans un cahier des charges. Pour ce projet, nous nous concentrerons sur la réalisation de sa base mobile lui permettant de se déplacer ainsi que son “cerveau” qui lui permettra de le contrôler.

Objectifs

Analyse du projet

Positionnement par rapport à l'existant

On se limitera pour cette comparaison aux robots qui visent le même but que le nôtre (à terme) : marquer des points pour les matchs de la coupe de France de robotique. En effet, la robotique est omniprésente dans nos vies maintenant, et il y a un nombre incalculable de bases mobiles existantes, avec différentes caractéristiques : avec des moteurs pas à pas, asservies, rapides, puissantes, capables de se déplacer sur différents terrains… Et ne parlons pas des systèmes de contrôles.

Il y a approximativement 200 participants à l'événement, et donc presque autant de systèmes similaires au notre développés ou en train d’être développés. Cependant leur détails de conceptions sont jalousement gardés par les équipes. On fera donc notre études sur les robots de l’année dernière. On prendra le robot fait par Robotech Lille et celui fait par une autre équipe finaliste, Robotech Legends.

Analyse du premier concurrent

Pour progresser il faut apprendre de ses erreurs. C’est pourquoi regarder en quoi le robot de l’année dernière n’a pas été un franc succès nous paraît judicieux pour pouvoir faire quelques chose de plus performant cette année.

L’erreur qui nous avait été fatale l’année dernière était le manque de qualité du contrôleur moteur. Réalisé avec la graveuse numérique de Polytech et non verni, son ancienneté aura eu raison de lui. De plus, on peut constater quelques défauts d’optimisation : le driver L298 sur la carte peut supporter le contrôle de deux moteurs mais n’en contrôle qu’un seul à la fois. La fonction de freinage est rendue inaccessible par le design de la carte. La solution que nous proposons est simple : créer une nouvelle carte, qui sera vernie pour pouvoir tenir plusieurs coupes.

La carte de puissance avait été réalisée de la même façon, et était beaucoup plus grande que nécessaire. Elle risque de d’avoir le même sort que son congénère. La solution que nous proposons est la même que précédemment, refaire une nouvelle carte plus optimisée et vernie.

L’asservissement en position du robot était aussi dérisoire (heureusement, nous n’avions pas eu à l’utiliser). Seule un encodeur sur deux était utilisé, et seule une des deux sorties de l’encodeur était considérée. De plus le fonctionnement de l’Arduino récupérant les données pouvait parfois faire en sorte qu’un front pouvait être négligé. Pour pallier à ça, on utilisera un FPGA, qui permettra de faire tourner autant de processus en simultané que l’on désire sans qu’ils n’interfèrent entre eux.

De plus, l’utilisation seule des encodeurs n’autorise pas les dérapages (même légers). Pour pallier à ça, on utilisera une centrale inertielle comme seconde source pour récupérer la position du robot.

Enfin, un souci assez récurrent que l’on a rencontré est la difficulté à modifier un programme dans un des processeurs du robot. Il fallait pour cela rapprocher son ordinateur du robot, déplacer la carte de son logement, et la brancher (en prenant le risque de déloger un autre composant au passage). Pour améliorer le processus, on fera en sorte que le Raspberry Pi puisse être mis à jour via une communication sans fil et puisse mettre à jour les autres cartes (Arduino, FPGA) à son tour. Cela permettra d’éviter de perdre du temps à rebrancher des composants.

On remarquera que le choix du matériel n’étais pas tellement un problème l’année dernière, ce dernier se situant plutôt de la manière dont il a été utilisé. C’est pourquoi on peut se permettre d’améliorer sans pour autant trop changer ce qui nous est disponible au départ.

Analyse du second concurrent

Regardons désormais ce qui se fait chez le voisin. Nous avons choisi cette équipe parce qu’elle nous a parlé des méthodes qu’elle a utilisé tout en faisant un bon score.

Cette équipe utilisait un moteur pas à pas afin d’éviter d’avoir à utiliser des encodeurs. Cependant, le caractère discret de la rotation du moteur rajoute un phénomène de glissement, qu’il est difficilement possible de calculer. Pour réduire ce phénomène, nous utilisons des moteurs à courant continu, et nous récupérons leur rotation à l’aide d’encodeurs. Un régulateur PID permet alors de réduire les variations de vitesse trop brusques.

Ils avaient un système de LEDs pour pouvoir savoir où en était le robot dans son programme, et ainsi faciliter le débogage des programmes. Pour reprendre ce principe et l’améliorer, on enregistrera toutes les informations que le système puisse obtenir, et on les transmet par liaison sans fil pour un débogage encore plus simple.

Enfin, ils utilisaient des microcontrôleurs STMicroelectronics pour tout le contrôle du robot. Bien que ces cartes soient très puissantes, elles embarquent un système d’exploitation multi-tâches. Cela simplifie énormément l’étape de programmation, cependant le multi-tâche rajoute de la latence pour les entrées sorties, et perd donc en précision. À la place, nous utiliserons trois puces (deux micro-contrôleurs et un FPGA) plus ou moins complexes parfaitement adaptées à leur tâche. On pourra aussi se vanter d’avoir un robot totalement open-source. Ces puces seront chargées avec le strict minimum pour répondre aux contraintes du cahier des charges, ni plus, ni moins.

Certes, certaines de ces “améliorations” ne sont pas nécessaires pour l’accomplissement du cahier des charges et/ou du défi. Les autres méthodes que nous n’utilisons pas peuvent être “suffisantes”, preuve en est, cette équipe est arrivée en finale alors que d’autres équipes avec des techniques similaires aux nôtres sont arrivées bien plus bas. Mais où est le challenge si on se contente du fait que ça fonctionne ?

Scénario d'usage du produit ou du concept envisagé

Le scénario d’usage voulu serait de jouer et de remporter un match de la coupe de robotique. Cependant, cela ne pourra être atteint sans un travail hors contexte de ce projet, donc voici un scénario type utilisant toutes les éléments que nous aurons eu à réaliser pour ce projet.

Lorsque l’on appuie sur un bouton du robot, il doit se déplacer en suivant un trajet prédéfini ou aléatoire sur un terrain plat. Ce terrain peut être composé de différentes matières. Il possède des mur et des obstacles, si ces derniers se trouvent sur le trajet du robot, ce dernier émet un signal (sonore ou lumineux) et change de trajectoire. Il doit à terme revenir à sa position exacte de départ, avec une faible dérive même en étant passé sur sur des surfaces différentes. Des robots utilisant des capteurs similaires à ceux utilisés par le robot peuvent être disposés sur le parcours, ils doivent être évités mais ne pas faire de faux positifs liés aux interférences. L’utilisateur peut alors se connecter au robot via une communication sans fil et récupérer les journaux de fonctionnement du robot pendant son parcours.

Réponse à la question difficile

Nous n'avons pas eu de questions difficiles lors de la séance de présentation.

Préparation du projet

Cahier des charges

Le robot (du moins la partie du robot sur laquelle nous travaillons) devra répondre aux contraintes suivantes :

  • Se déplace en suivant un parcours. Sur une piste de 2m×3m en PVC (type bâche adhésive décorative pour sol).
  • Est capable de savoir où il est. On s'autorise une dérive de 1mm pour 5m de déplacements. Ces 5 mètres correspondent à la distance que parcourra le robot durant un match. Une précision de 1mm est nécessaire pour réaliser les actions.
  • Évite les obstacles à l’avant et à l’arrière. Le parcours à réaliser est statique, cependant une protection basique contre les imprévus (autres robots) est nécessaire.
  • Résiste aux interférences causées par d’autres capteurs de distance de même type. Il y aura d’autres robots présents sur la piste, et certains d’entre eux pourront utiliser les mêmes capteurs que nous utilisons. Il faudra donc faire en sorte que les interférences ne perturbent en rien le bon fonctionnement de notre robot.
  • Est facilement débugguable. Après la réalisation du robot dans le cadre du projet, il passera dans une longue phase de test pour s'assurer du bon fonctionnement des actions qu'il est censé réaliser. Afin de faciliter et accélerer cette phase, on aimerait plusieurs choses du système de contrôle du robot. Il devra démarrer rapidement, utiliser le minimum de ressources nécessaires, et pouvoir être mis à jour et débuggué via une communication sans fil.
  • Pouvoir interagir avec l'utilisateur. Une fois sur le chemin de compétition, le robot n'aura plus l'aide d'un ordinateur pour pouvoir communiquer avec l'utilisateur. L'utilisateur doit toutefois pouvoir effectuer des tâches simples (saisir la zone de départ, l'équipe, la stratégie...) et contrôler l'état du robot (batterie, calibrage...).
  • Est conforme au cahier des charges de la Coupe de France de Robotique 2018 en tant que robot principal. Disponible ici, il fixe entre autres des conditions sur les dimensions du robot et sur le type de matériel qu'il peut embarquer.
  • Réutilise le matériel disponible. La création depuis zéro d’un tel robot est largement hors-budget pour un projet IMA4. On utilisera au maximum le matériel mis à disposition par Robotech pour minimiser les dépenses.
  • Dispose une alimentation 9 V. Sera utilisé pour les actions du robot hors projet.

Choix techniques : matériel et logiciel

Matériel

Alimentation

  • Batterie Lipo 4S. Dans son sac inifugé.
  • Carte de puissance. Dimensionnée en fonction des éléments et imprimée à Polytech.

Déplacement

  • Support mécanique & Roues. Utilisées pour l'édition de l'année précédente.
  • 2 × Faulhaber MOTOR 3557K024CS. Moteur à courant continu.
  • Contrôleur moteur. Dimensionnée pour nos besoins et imprimée à Polytech.

Connaissance de l'environnement

  • 2 × HEDM-550X. Encodeur rotatif pour l'asservissemnt.
  • Capteur MinIMU-9 v3. Centrale intertielle utilisée en complément pour l'asservissement.
  • X × Capteurs ultrasons / infrarouges. Pour détecter les robots environnants.

Contrôle

La commande et le controle du robot sera géré par 3 puces différentes :

  • Xilinx Spartan-6 FPGA LX9 Microboard. Ce FPGA sera utilisé pour les tâches nécessitant une faible puissance de calcul mais un parrallélisme un une très grande réactivité. Entre autre, il récupèrera les valeurs des codeuses des moteurs et s'occupera des l'asservissement des roues à l'aide d'un régulateur PID.
  • Arduino MEGA 2560. Utilisé pour les tâches nécessitant une bonne réactivité mais une puissance de calcul un peu plus élevés. Il s'occupera de s'assurer du bon déroulement de l'action en cours (avancer, pivoter...). Il gèrera notamment les différents capteurs d'obstacles.
  • Raspberry Pi 3. Utilisé pour les tâches n'ayant pas besoin d'une grande réactivité mais d'une grande puissance puissance de calcul. Il s'occupera de garder l'état du robot dans sa mission et de décider de ses prochaines actions. Il sera aussi utilisé pour toutes les actions de débug, sauvegarde et mise à jour des autres puces.

Interface humain-machine

  • Écran LCD SPI. Pour afficher des informations à l'utilisateur.
  • X × Boutons. Pour laisser l'utilisateur choisir des paramètres.

Logiciel

Systèmes d'exploitation

  • Buildroot. Système d'exploitation à configurer et compiler pour le Raspberry Pi. Complètement customisable et permet donc une grande legerté et flexibilité pour les tâches requises.
  • FreeRTOS. Système d'exploitation temps réel pour l'Arduino Mega 2560. Choisi pour simplifier les choses étant donné qu'on l'a déjà vu en TP de temps-réel.

Asservissement

  • Régulateur PID. Asservissement encodeur → moteur à courant continu (direct).
  • Filtre de Kalman / Fusion de données. Asservissement encodeur + IMU → informations sur l'emplacement du robot sur le terrain.


Conception cartes électroniques

  • Eagle
  • Altium

Liste des tâches à effectuer

Optionnel

  • Concevoir contrôleur moteur avec transistor de puissance Electronique (Amaury)
  • Filtre de Kalman Arduino (Geoffrey)
  • Enlever le flag -D de avrdude Arduino (Geoffrey)
  • PID polaire (Geoffrey)
  • ⇑Buildroot 2018.02 Raspberry Pi (Geoffrey)
  • Buildroot en AArch64 Raspberry Pi (Geoffrey)
  • PID FPGA FPGA (Geoffrey)
  • Couche niveau 3 et TxD/RxD Arduino Raspberry Pi FPGA (Geoffrey)
  • Alléger noyau Linux (encore) Raspberry Pi (Geoffrey)
  • Wi-Fi direct ? Raspberry Pi (Geoffrey)

À faire

  • concevoir carte de puissance Electronique (Amaury)
  • Établir protocole communication entre appareils Wiki FPGA Raspberry Pi Arduino (Geoffrey)
  • Dépot git FPGA Arduino Raspberry Pi Electronique (Amaury, Geoffrey)
  • concevoir controleur moteur avec Lm 18200t sur eagle Electronique (Amaury)
  • commande matériel électronique de puissance Electronique Arduino (Amaury)
  • tester contrôleur moteur TLE 5206-2 e Electronique FPGA Arduino (Amaury, Geoffrey)
  • tester contrôleur moteur LM 18200T Electronique Arduino FPGA (Amaury, Geoffrey)
  • Tester l'IMU Arduino FPGA (Amaury, Geoffrey)
  • PID Arduino Arduino (Geoffrey)
  • Analyse interference capteurs Arduino (Amaury)
  • Gestion des liaisons séries par FreeRTOS Arduino (Geoffrey)
  • Afficheur & Boutons Raspberry Pi
  • Programme chef Raspberry Pi
  • Multi-ADC FPGA (Geoffrey)
  • correction V2 Mr Flamen Electronique (Amaury)
  • concevoir schematic carte de puissance Electronique (Amaury)
  • acheter composant carte de puissance Electronique (Amaury)
  • Script pour générer la feuille d'heure Wiki (Geoffrey)

En cours

  • concevoir schematic LMt18200T Electronique (Amaury)

À rédiger

  • Rajouter des illustrations Wiki (Geoffrey)
  • Travail prologue à documenter Wiki (Geoffrey)
  • OS Raspberry Pi Raspberry Pi (Geoffrey)
  • dimensionner tout les besoin carte de puissance Electronique (Amaury)
  • Upload Pi → Arduino Raspberry Pi Arduino (Geoffrey)
  • Upload Pi → FPGA Raspberry Pi FPGA (Geoffrey)
  • Rectifier le modèle de FPGA Wiki (Geoffrey)
  • Faire fonctionner Wi-Fi Raspberry Pi (Geoffrey)

Terminé

  • Liste de matériel Wiki (Amaury, Geoffrey)
  • Choix techniques Wiki (Geoffrey)
  • concevoir V0 contrôleur moteur avec TLE 5206-2 Electronique (Amaury)
  • Codeuses FPGA (Geoffrey)
  • Faire fonctionner la liaison série Raspberry Pi (Geoffrey)
  • Tenter sauvetage module Wi-Fi Raspberry Pi Raspberry Pi Electronique (Amaury)
  • Tester FPGA Robotech FPGA (Geoffrey)
  • tester moteur pour propulsion des balles --> caractérisation technique indispensable pour la carte de puissance Electronique (Amaury)
  • commande matériel contrôleur moteur Electronique Arduino (Amaury)
  • Base freeRTOS Arduino (Geoffrey)
  • prendre en compte recommandations Mr Flamen sur V0 Electronique (Amaury)

Calendrier prévisionnel

Réalisation du Projet

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Analyse du projet 0 14 7 (Amaury)

Prologue

Codeuses, Arduino & FPGA

Pour connaitre la rotation des roues du moteur pour l'asservissement, on utilise des codeuses de référence HEDM-550X. Chacune de ces codeuses disposent de deux sorties tout ou rien, nommées A et B, dont la sortie en fonction de la rotation de roue évoluent comme ci-contre.

IMA17-18P66-Codeuse.png

Pour un tour de roue, il y aura 1024 périodes du signal. On peut donc connaitre la rotation de la roue en comptant le nombre de fronts montant d'une des sorties, à condition que la roue tourne dans un sens. On peut s'affranchir de cette condition et connaitre le sens de rotation de la roue, en regardant l'état de B lors d'un front montant. Pour utiliser pleinement les capacités que nous propose les codeuses, on considèrera les différents fronts de chaque entrée, soit 4 fronts par périodes.

Faisons un rapide calcul. Les roues de nos moteurs font 4 cm de diamètre, et rouleront à un maximum de 10 km/h, soit un maximum de 11 tours par seconde, ce qui représente un maximum de 45270 fronts par seconde (pour une roue), ou une définition de 0,06 mm.

Cela représenterait une interruption toutes les 22 µs, ce qui fait beaucoup pour un Arduino. C'était ce que nous avions essayé lors de l'édition précédente de la coupe, en ne comptant que les fronts montants d'une seule sortie, le sens étant récupéré d'après l'ordre donné au moteur, et la seconde roue a été considérée mécaniquement symétrique à celle comptée. Autant vous dire que ni les performances de l'Arduino ni la précision de la mesure n'étaient au rendez-vous.

L'utilisation d'un FPGA en réponse à ce problème est donc totalement justifiée, ce dernier fonctionnant à 100 MHz, il peut largement gérer tous les fronts de la codeuse.

Semaine 1

Dimensionnement de la carte de puissance

Electronique de puissance Nous utiliserons comme source d'énergie une batterie Lipo 4s délivrant 14.8V. Voici l'ensemble des consommateurs constituants le robot :

Arduino MEGA:

  • consommant 500mA avec une tension d alimentation recommandé de 7 à 12V ou par USB de 5V mais cette option est peu recommandé car elle peut entraîner des manques de stabilité dans le fonctionnement du microcontroleur et dans la qualité du 5V données par les broches.

Raspberry Pi 3:

  • consommant 2.5A avec une tension d'alimentation de 5V.

Moteur déplacement:

  • consommant 3A chacun au maximum de leur utilisation nominal cependant ils s'avèrent surdimensionné pour notre usage. Empiriquement leur utilisation étaient plutôt de l'ordre de 1.5 maximum.

La tension nominal est de 24V nous pouvons donc les alimenter en 12V tout en maintenant une bonne qualité de pilotage. Cependant on choisira de garder l'alimentation du contrôleur moteur en 24V afin de laisser pour les années à venir le choix aux futurs équipes.

FPGA Spartan 6

  • Consommant au grand maximum 1A à une tension d'alimentation de 5V.

Moteur pour les actions du robot, les actions a proprement parlé n'ont pas encore toutes étaient parfaitement déterminé ce cahier des charges est donc amenés à évoluer dans les semaines à venir :

  • usage d'un moteur DC alimenté en permanence. Après avoir réalisés différents tests via une alimentation réglable et en mesurant le courant nous nous sommes arrêtés sur le wk-ws-20-002 qui est un motor brushless tournant jusque 3200tr/min pour une tension d'alimentation de 10V maximum et un courant de 1A.

Remarque : cette décision est à faire valider par le reste de l'équipe participant à Robotech, elle sera soumise à la réunion du jeudi suivant. référence : https://www.xheli.com/walkeramotor-180l.html

  • 1 moteur pas à pas faible puissance comme le Moteur 28BYJ-48-5 (probablement alimenté et contrôlé par l'arduino via une carte ULN2003)
  • 2 servomoteur ( piloté et alimenté par l'arduino), on parle ici probablement de Servomoteur HSR-1425CR Hitec et du Rs-901 mgbb

Dimensionnement du contrôleur moteur avec pont en H intégré

Caractéristiques demandées : - alimentation au moins en 12V minimum et 24V maximum - sortie en 24 V maximum avec 3A de courant par moteur (donc x2) - dimensions réduites - capacité à être réparé/remplacé facilement lors de la Coupe de France - optionnel: protection intégré contre les retours de courants et les courts circuits

Lors de nos recherches nous avons trouvés les 3 commposants suivants  : L298 - LM 18200T - LM 18201T - TLE 5206-2

Le L298 offre un courant de 4 A maximum donc il ne permet pas de contrôler les deux moteurs en même temps il est donc d'office éliminé les 2 LM offrent un courant de 6 A en pilotant deux moteurs, ils ne sont pas très différents l'un de l'autre à part un prix plus élevé pour le 01 alors qu'il ne possède pas de capteur de courant. De toute façon nous n'avons pas prévu d'utiliser cette fonctionnalité.

le TLE 5206-2 est bien plus simple de fonctionnement et offre moins de services que le LM18200T, il permet donc également une simplicité de routage et de modularité mais il ne permet de piloter qu'un seul moteur. Le LM18200T permet lui un pilotage plus précis des moteurs avec des capteurs de courants et de températures intégrés mais la densité des pins rend plus complexes le routage et les réparations de dernières minutes lors de la compétition.

Notre choix s'arrête donc sur la conception dans un premier temps du contrôleur avec les TLE 5206-2 en deux pcb isolés, puis du LM18200T qui pilotera les deux moteurs à lui tout seul.

Pour la suite nous réaliserons nos PCB sous eagle. TLE5206-2 réalisation du schématic :

    • insérer photo**

FreeRTOS pour Arduino

L'Arduino du robot doit gérer plusieurs tâches à la fois, telles que : la gestion de l'asservissement, des capteurs, l'envoi des données de déboguage... Pour cela, l'utilisation d'un ordonnanceur est inévitable. On aura probablement besoin de sémaphores pour (entre autres) la gestion des ports série et des variables communes aux taches (celles concernant la position du robot notamment).

Nous avons choisi d'utiliser le système d'exploitation temps réel FreeRTOS pour deux raisons. La première est qu'il est très léger, et n'embarque pas plus que ce dont nous avons besoin. La deuxième est que c'est le système que nous avons utilisé dans les TP de l'enseignement Temps Réel, nous avons donc déjà un peu d'experience dans le domaine. La configuration de FreeRTOS pour un hôte Linux et une cible Arduino Mega 2560 nous a été fourni par M. Forget.

Buildroot pour Raspberry Pi

Le Raspberry Pi est le composant qui décide et envoie les ordres de déplacement à l'Arduino et au FPGA. Même s'il n'a pas besoin d'autant de réactivité que ses confrères, il est souhaitable que dès qu'il reçoit l'information que l'ordre précédent a été réalisé (et ses conditions de réalisation), il calcule et et envoie l'ordre suivant dès que possible.

Le problème d'un système d'exploitation de bureau est qu'il y a un certains nombre de services pour simplifier la vie de l'utilisateur tels que l'indexation des fichiers, la découverte réseau, le pare-feu, la vérification des mises à jour... Nous pouvons difficilement contrôler ces tâches, et si notre robot a besoin de la puissance de calcul de la carte quand le système réalise ces tâches plus ou moins inutiles dans notre cas, le temps de réponse pourrait augmenter. Sur une application comme la notre où le temps est compté, cela peut avoir une influence (elle est très probablement minime dans notre cas, mais on choisira de ne pas la négliger).

Nous allons donc utiliser un système d'exploitation alternatif conçu uniquement les fonctionnalités dont nous avons besoin. Notons que le cahier des charges nous impose de pouvoir utiliser le Wi-Fi et de pouvoir mettre à jour le système des autres cartes, et on souhaitera pour cela utiliser des outils pré-existants. On n'utilisera donc pas un système type FreeRTOS. Notre choix se portera sur Buildroot qui est un utilitaire qui permet de construire des images de système d'exploitation sur base de noyaux Linux en sélectionnant les options et programmes via un simple fichier de configuration. Le système nous propose aussi de créer nos propres programmes et s'occupe lui-même de la cross-compilation, ce que l'on utilisera pour le(s) programme(s) régissant la logique du robot. La compilation des programmes étant faite sur une machine hôte (et non sur la machine cible, ici le Raspberry Pi), cela nous permet de réduire les temps de compilation. Cela sera particulièrement utile lors des phases de test du robot.

Après ~45 minutes de compilation, une image d'une soixantaine de Mio contenant notre système d'exploitation est générée. Le système démarre en une poignée de seconde, et en idle ne consomme qu'une dizaine de Mio de RAM et il n'y a que très peu d'activité sur le CPU. Toutes le reste des ressources sont alors disponibles pour notre utilisation. Seul bémol, devoir reflasher la carte à chaque modification du système (le programme étant inclus) est assez lourd. On décrira une solution à ce problème dans une prochaine section.

Semaine 2

Mode production / Mode debug

Pour assurer que le Raspberry Pi se lance en un minimum de temps, on s'assurera de charger uniquement ce qui est nécessaire. Les outils de debug, la connexion Wi-Fi ne seront activées que lorsque deux broches du Raspberry Pi sont court-circuitées. La vérification sera faite à la dernière étape de lancement à l'aide du binaire testpin, qui prend comme argument deux numéros de pins selon la bibliothèque Wiring Pi. IMA4-1718-P66-debugPin.png


Raspberry Pi 3 : Réparation de la puce Wi-Fi interne

Nous avons constaté durant la semaine précédente que le wifi ne fonctionnait plus. Après avoir éliminé une possible source software nous avons voulu vérifier qu'aucun court-circuit n'était présent sur la carte, elle a donc été nettoyé avec du flux en C201. Le problème a persisté. Par curiosité nous avons mesuré la tension d'alimentation de la puce wifi, elle est de 1.34 V. Or la datasheet du constructeur nous a indiqué que la tension d'alimentation de cette puce doit être comprise entre 3 et 5V. Il semble donc que le problème se trouve au niveau de la carte de puissance. Le Raspberry Pi n'étant pas open hardware (et la possibilité d'une réparation assez faible, vu la taille et la protection des pistes), nous avons arrêté là nos investigations et installé un dongle wifi USB.

Raspberry Pi 3 : Mise en fonctionnement du Wi-Fi

Sur un système d'exploitation classique, il suffit généralement de brancher un dongle Wi-Fi pour faire en sorte qu'il fonctionne. Pour fonctionner, un dongle Wi-Fi (comme beaucoup d'autre périphériques) a besoin d'un firmware, c'est à dire un petit bout de code qui est chargé sur le matériel depuis par le noyau afin qu'il puisse fonctionner. Or, dans notre système d'exploitation à la carte, celui pour notre dongle Wi-Fi n'est pas installé par défaut, il a donc fallu le faire compiler. Ensuite à l’exécution, il faut charger le module correspondant au dongle via un `modprobe`, car il n'est pas chargé automatiquement par le système lors de l'insertion (cela nécessiterait un démon supplémentaire). À partir de là, l'interface `wlan0` est fonctionelle et on peut potentiellement se connecter à un réseau Wi-Fi.

Donc a priori, si on crée un fichier `/etc/network/interfaces` comme nous avons vu en TP de réseau et qu'on lance un `ifup wlan0` cela devrait fonctionner non ? Pas tout à fait. Il s'avère que la commande `ifup` inclue dans notre système (fournie par la boîte à outils BusyBox) n'est pas aussi complète que celle dans l'OS Raspbian utilisé en TP et ne gère pas les instructions `wpa-*` du fichiers `interfaces`. Pour parer à cela, il suffit d'appeler `wpa-supplicant` directement, qui est le programme qui s'occupe (même sur Raspbian) de l'authentification au réseau Wi-Fi. On peut ensuite utiliser `ifup` pour la configuration IP.

Après un rapide test de ping, on installe (enfin plus précisément on dit à Buildroot de compiler dans l'image, puisque le système n'a pas de gestionnaire de paquets) un serveur SSH sur la machine, et on met en place un petit système afin que les la clef privée et l'empreinte de la clef du client soient sur le Raspberry Pi afin de se connecter simplement et rapidement à la machine.

Conception de la carte de contrôleur moteur TLE5206

Intérêt de ce contrôleur: Ce contrôleur très bon marché, 4€ pièce, permet de contrôler un moteur jusque 5A avec un pique de courant de 6A et une tension d'alimentation allant jusque 40V.

Limite :

- Le pique de courant accepté n'est que de 100ms, ce qui peut être court si nous voulons avoir un déplacement agressif lors de la compétition.
- Il possède assez peu de protection, en regardant la datasheet on voit qu'un grand nombre de court circuit possible n'est pas couvert par le système de protection ni par l'indication de flag. Le plus problématique pouvant être le fait de ne pas détecter un court circuit au niveau du moteur pouvant entrainer des dommages à celui-ci. Le moteur est l'élément le plus cher de notre robot et il n'est pas envisageable de les perdre.


Conception du schematic:

La conception du schematic a été faite sur Eagle après avoir suivi plusieurs cours en ligne pour se former au logiciel.


schematic pour le contrôleur TLE5206


Conception du routage:

Le routage finale est le suivant :

Routage pour le contrôleur TLE5206



Retour de Mr Flamen :

- retour 1 : 

pistes trop étroites --> utilisez l'application Electrodroid pour les choisirs supprimer les anglais aigus mettre les composants de puissance en bordure de PCB pour permettre l'installation d'un dissipateur.

- retour 2 : (rendez-vous du lundi 29/01)

Nous sommes revenus sur plusieurs points au niveau de la conception du circuit :

* Explication sur la CEM dans les circuits : 

les angles à 90° sont à éviter mais pas forcément à proscrire surtout si l'on ne se trouve pas à haute fréquence les angles très aigus (inférieurs à 45° ) et ceux supérieurs à 135° sont à éviter autant que ceux à 90°. Il faut également essayer de garder le même angle entre des pins parallèle afin d'optimiser l'espace et les fraises. 200px|thumb|center|piste non parrallèle

En effet en cas d'angle très aigus (comme ceux formés par une connexion en arc de cercle avec une ligne droite) la jonction entre les deux forment un angle très aigus que la fraiseuse va devoir usiner avec des fraises très spécifiques coûtant souvent plus cher que la machine. De plus il s'agit d'une "good practice" à garder si l'usinage des cartes est chimique car il peut favoriser une collection d'acide entraînant des "grignotage" sur la carte pouvant altérer son fonctionnement.


  • texte sur le circuit :

l'ajout d'annotations gravées sur le circuit directement est fondamentale, il permet d'éviter les erreurs de branchements et permet de garder un contrôle des versions sur les PCB. Par rapport à la version 2 il faut l'ajouter au format tdocu dans CAM afin d'avoir le "négatif" de ce qui a été fait en V2. De cette façon on économise en temps de conception et en usure des fraises.

Conception de la carte de contrôleur moteur lMD18200t

Intérêt de ce contrôleur:

Conception du schematic:

Documents Rendus