
Projet Robot
ezer-soltani/HellKitty-Autonomous-Robot
Professional firmware and hardware design for an autonomous mobile robot using STM32G431 and FreeRTOS. Features Lidar perception, ToF safety algorithms, and PID motor control.

robot chat
Robot is an open-source printed circuit board by Dorian12000, from the Dorian12000/Projet repository on GitHub. It is a 4-layer board of 90 × 72 mm with 62 parts on 88 nets, routed with 430 tracks and 89 vias.
It is built around the ZXBM5210-SP, MP1475DJ-LF-P and 1N4148WS. Its parts include 22 capacitors, 11 resistors, 11 connectors, 5 ICs and 4 diodes. It belongs with the robots and motor control boards and the STM32 boards of this library.
Ce projet consiste à créer un robot capable de jouer au jeu du chat et de la souris. Le robot est équipé de plusieurs fonctionnalités clés, notamment le contrôle de mouvement à l'aide de moteurs à courant continu (MCC), la localisation avec un Lidar YD X4, la détection du vide à l'aide de capteurs de bordure et le changement d'état ( Souris , Chat) grâce aux bumpers.
https://miro.com/app/dashboard/

Contrôle de Mouvement (MCC) :
Localisation avec Lidar X4 :
Détection du Vide avec Capteurs de Bordure et Changement d'état :
Exécution du Programme :
Interface Utilisateur :
Le pilote Lidar consiste en l'intégration d'un lidar dans un système robotique tel que notre robot. Le lidar est utilisé pour la détection d'obstacles, la cartographie de l'environnement et la localisation des autres robots dans la zone d'opération. Ce document fournit des informations sur les fichiers principaux du projet, y compris les fichiers drv_lidar.c, LidarTask.c, et la création de la tâche Lidar.
Contenu des fichiers :
drv_lidar.cLe fichier drv_lidar.c contient le code source pour le pilote du lidar. Il comprend les fonctionnalités suivantes :
Initialisation du Lidar : La fonction LidarInit initialise le lidar en configurant la communication UART, en créant un sémaphore pour la synchronisation des lectures UART, et en activant le l'échantillonage du lidar et son moteur.
Communication UART : Le fichier utilise la communication UART avec le mécanisme DMA pour une transmission et réception de données efficace et non bloquante.
Commandes Lidar : Les fonctions LidarScanStart et LidarScanStop envoient respectivement les commandes de démarrage et d'arrêt du scan au lidar.
Traitement des données : Les fonctions getLidarScanData, checkCS et convertSample sont responsables de la réception, de la vérification de la somme de contrôle et de la conversion des données de scan du lidar.
Analyse des données Lidar : La fonction whereIsNearestRobot analyse les données du lidar pour déterminer la position du robot le plus proche.
Gestion des erreurs : La fonction LidarHealthStatus permet d'obtenir le statut de santé du lidar et de gérer les erreurs éventuelles.
Autres fonctionnalités : Le fichier contient également des fonctions pour définir la vitesse du lidar, obtenir des informations sur le lidar et redémarrer le lidar.
LidarTask.cLe fichier LidarTask.c contient la définition de la tâche Lidar. Il gère les états de la tâche, notamment l'initialisation du lidar, le scan, le traitement des données et le mode veille.
États de la tâche : Les états comprennent l'initialisation (LIDAR_INIT), le scan (LIDAR_SCANNING) et le mode veille (LIDAR_STANDBY).
Initialisation : La tâche commence par initialiser le lidar, récupérer des informations sur le lidar afin d'assurer son bon fonctionnement, puis passer à l'état de scan.
Scan Lidar : Dans cet état, la tâche démarre le scan du lidar, reçoit les données de scan, les traite et effectue des actions en fonction de l'état principal du système (CAT ou MOUSE).
Mode veille : Un état futur pour le mode veille est également prévu mais n'est pas encore implémenté.
Gestion des erreurs : En cas d'erreur lors du scan, la tâche passe à l'état d'erreur pour gérer la situation.
Utilisation du code :
Création de la tâche Lidar : La fonction createLidarTask dans LidarTask.c crée la tâche Lidar en utilisant FreeRTOS. Elle définit la profondeur de la pile et la priorité de la tâche.
Configuration du Lidar : Le fichier drv_lidar.c comprend des fonctions pour l'initialisation du lidar, la configuration de la vitesse du moteur, le démarrage et l'arrêt du scan, l'obtention d'informations, la récupération des données de scan, etc.
Gestion des états : La tâche Lidar gère différents états, tels que l'initialisation, le scan et la veille. Ces états sont définis dans LidarTask.c et peuvent être étendus selon les besoins.
Analyse des données : La fonction whereIsNearestRobot analyse les données du lidar pour déterminer la position du robot le plus proche. Cette fonction peut être adaptée en fonction des exigences spécifiques du projet.
Remarques :
Le pilote du lidar est conçu pour fonctionner avec FreeRTOS. Assurez-vous que votre projet est configuré pour utiliser FreeRTOS.
La communication avec le lidar utilise le DMA pour une transmission et une réception de données efficaces et non bloquantes via UART.
La fonction principale de la tâche Lidar est gérée par la fonction lidarTask(), qui comprend une machine d'états pour gérer les différents états du lidar.
La tâche Lidar s'exécute en boucle continue, surveillant et gérant l'état du dispositif lidar.
Des types de données personnalisés et des macros de journalisation sont définis dans types.h et logger.h, respectivement.
Pour organiser nos tâches liées aux différentes fonctions du Lidar et des moteurs, nous avons crée une tache principale avec une priorité élevée ( code source dans mainTask.c). Cette tâche est divisé en plusieurs états :
Chaque état implique l'appels des tâches et des fonctions nécessaires. Un timer est configuré pour suivre l'état actuel du robot.
Les deux MCC sont controlés par des pwm et asservis en vitesse par un correcteur proportionnel dans une tâche.
Driver de moteur :
Les fichiers moteur_drv.c/.h contiennent les fonctions permettant de commander la vitesse ainsi que les directions des moteurs et de générer les pwm en conséquence. Ils prévoient aussi le calcul de la vitesse des moteurs et la lecture des encodeurs.
Conversion de la position visée en commande de vitesse pour les moteurs :
Cette tâche reçoit une structure comprenant la position (angle et distance) à laquelle doit se rendre le robot. Ces données sont interprétées pour générer une commande (vitesse et sens de rotation) pour chaque moteur. La commande est ensuite utilisée pour l'asservissement en vitesse.
Asservissement en vitesse :
La boucle d'asservissement en vitesse se fait toutes les 500 ms et comprend :
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C201, C202, C205, C206 |
| 4 | 10nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C303, C304, C307, C308 |
| 4 | 1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C301, C305, C405, C406 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H201, H202, H203, H204 |
| 3 | 1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R201, R202, R203 |
| 3 | 22uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C402, C404, C407 |
| 2 | 100k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R401, R402 |
| 2 | 10pF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C203, C204 |
| 2 | 10uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C302, C306 |
| 2 | ZXBM5210-SP | Package_SO:Diodes_SO-8EP | U303, U304 |
| 1 | 0.1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C401 |
| 1 | 100n | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C403 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R408 |
| 1 | 12k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R407 |
| 1 | 13k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R406 |
| 1 | 16M | Crystal:Crystal_SMD_EuroQuartz_MT-4Pin_3.2x2.5mm | Y201 |
| 1 | 16k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R404 |
| 1 | 1N4148WS | Diode_SMD:D_SOD-323 | D402 |
| 1 | 20 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R403 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C207 |
| 1 | 4.7uH | Inductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolder | L401 |
| 1 | 40.2k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R405 |
| 1 | 472121010111 | 472121010111:472121010111 | S401 |
| 1 | BUMPER_B | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J207 |
| 1 | BUMPER_F | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J206 |
| 1 | BUMPER_L | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J209 |
| 1 | BUMPER_R | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J208 |
| 1 | Conn_02x07_Odd_Even | Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_Vertical_SMD | J210 |
| 1 | Conn_BAT | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J401 |
| 1 | LED B | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D203 |
| 1 | LED G | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D201 |
| 1 | LED R | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D202 |
| 1 | LIDAR | Connector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_Vertical | J204 |
| 1 | LOGO | LOGO | G*** |
| 1 | MIC5317 | Package_TO_SOT_SMD:SOT-23-5 | U402 |
| 1 | MP1475DJ-LF-P | MP1475:MP1475DJ-LF-P | U401 |
| 1 | Motor_L | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J201 |
| 1 | Motor_R | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J205 |
| 1 | STM32G070RBTx | Package_QFP:LQFP-64_10x10mm_P0.5mm | U201 |
| 1 | SW_Push | Button_Switch_SMD:SW_SPST_B3U-1000P | SW202 |
| 1 | bordure_F | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J211 |
| 1 | bordure_R | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J202 |
It measures 90 × 72 mm and has 4 copper layers, 1.6 mm thick.
62 parts, built around the ZXBM5210-SP, MP1475DJ-LF-P and 1N4148WS. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Dorian12000/Projet repository on GitHub, at the commit this page was made from: the board is PCB/robot.kicad_pcb and its schematic PCB/STM32.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Dorian12000 before reusing the design.

ezer-soltani/HellKitty-Autonomous-Robot
Professional firmware and hardware design for an autonomous mobile robot using STM32G431 and FreeRTOS. Features Lidar perception, ToF safety algorithms, and PID motor control.


flexdrt/2425_ESE_Projet_StealthKitty
Ce projet est réalisé dans le cadre de la dernière année de la filière électronique et systèmes embarqués (ESE) de l'ENSEA.

HOSTEER/ESE2024
Activer doxygen dans les propriétés du projet -> général C/C++, tuto doxygen https://www.youtube.com/watch?v=GC9Xy7nLxyw

Lazorme/Ludz-le-chat
The Lidar and motor drivers are in drvLIDAR and drvMotor, respectively.

mcbridejc/GaussSpeedway
PCB design for the Gauss Speedway. Designed in Kicad 6.

exysta/2425_ESE_Projet_TagBot
Vous vous trouvez actuellement dans le projet TagBot (ou robot chat), qui s'intègre à un projet de classe où chaque équipe doit concevoir un robot.

MohamedBenabdelhadi/2425_ESE_Projet_V-NOM
Mohamed Benabdelhadi_Nouhaila Faris_Oliver Belliard_Valerian Priou