Table des matières:
- Étape 1: Assemblage du véhicule
- Étape 2: Montage des moteurs
- Étape 3: Création de la conception de blocs Vivado
- Étape 4: Communiquer avec le LiDAR
- Étape 5: Remplir la grille avec des obstacles
- Étape 6: Communiquer avec les moteurs
- Étape 7: Planification du chemin
Vidéo: Véhicule autonome : 7 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Ce projet est un robot de navigation autonome qui essaie d'atteindre sa position cible tout en évitant les obstacles sur son chemin. Le robot sera équipé d'un capteur LiDAR qui sera utilisé pour détecter des objets dans son environnement. Au fur et à mesure que des objets sont détectés et que le robot se déplace, une carte en temps réel sera mise à jour. La carte sera utilisée pour enregistrer les emplacements des obstacles qui ont été identifiés. De cette façon, le robot ne tentera pas à nouveau un chemin raté vers la position du but. Il tentera à la place des chemins qui n'ont pas d'obstacles ou des chemins qui n'ont pas encore été vérifiés pour les obstacles.
Le robot se déplacera par deux roues entraînées par un moteur à courant continu et deux roues pivotantes. Les moteurs seront fixés au bas d'une plate-forme circulaire. Les moteurs seront contrôlés par deux pilotes de moteur. Les pilotes de moteur recevront des commandes PWM du processeur Zynq. Les encodeurs sur chaque moteur sont tous utilisés pour garder une trace de la position et de l'orientation des véhicules. L'ensemble du système sera alimenté par une batterie LiPo.
Étape 1: Assemblage du véhicule
Le robot est propulsé par deux moteurs fixés aux roues latérales, puis supporté en plus par deux roues pivotantes, une à l'avant et une à l'arrière. La plate-forme et les supports de moteur étaient en tôle d'aluminium. Un moyeu de moteur a été acheté pour attacher les roues au moteur. Cependant, un coupleur intermédiaire personnalisé devait être fabriqué car le motif des trous du moyeu était différent du motif des trous de la roue.
Le moteur sélectionné était un moteur Port Escap 12V DC avec encodeurs intégrés. Ce moteur peut être acheté sur ebay pour un prix très raisonnable (voir nomenclature). Recherchez les mots-clés "12V Escap 16 Coreless Geared DC Motor with Encoders" sur ebay pour trouver le moteur. Il y a généralement une bonne quantité de vendeurs parmi lesquels choisir. Les spécifications et les brochages des moteurs sont indiqués dans les schémas ci-dessous.
L'assemblage du robot a commencé par une conception de modèle CAO du châssis. Le modèle ci-dessous montre la vue de dessus du profil de forme 2D conçu pour le châssis.
Il est suggéré que le châssis soit conçu comme un profil 2D afin qu'il puisse être facilement fabriqué. Nous découpons une feuille d'aluminium de 12"X12" dans la forme du châssis à l'aide d'un cutter à jet d'eau. La plate-forme du châssis peut également être coupée avec une scie à ruban.
Étape 2: Montage des moteurs
L'étape suivante consiste à fabriquer les supports de moteur. Il est suggéré que les supports de moteur soient fabriqués en tôle d'aluminium à 90 degrés. A l'aide de cette pièce, le moteur peut être fixé en porte-à-faux sur une face de la tôle à l'aide des deux
Les trous M2 du moteur et de l'autre face peuvent être boulonnés à la plate-forme. Des trous doivent être percés dans le support du moteur afin que des vis puissent être utilisées pour fixer le moteur sur le support du moteur et le support du moteur sur la plate-forme. Le support moteur est visible sur la figure ci-dessus.
Ensuite, le moyeu du moteur Pololu (voir la nomenclature) est placé sur l'arbre du moteur et serré avec la vis de réglage et la clé Allen fournies. Le modèle de trou du moyeu du moteur Pololu ne correspond pas au modèle de trou de la roue VEX, un coupleur intermédiaire personnalisé doit donc être fabriqué. Il est suggéré que la tôle d'aluminium utilisée pour fabriquer la plate-forme du châssis soit utilisée pour fabriquer le coupleur. La configuration des trous et les dimensions de ce couple sont illustrées dans la figure ci-dessous. Le diamètre extérieur et la forme (n'a pas besoin d'être un cercle) du coupleur en aluminium personnalisé n'ont pas d'importance tant que tous les trous s'adaptent à la pièce.
Étape 3: Création de la conception de blocs Vivado
- Commencez par créer un nouveau projet Vivado et sélectionnez le Zybo Zynq 7000 Z010 comme appareil cible.
- Cliquez ensuite sur créer un nouveau design de bloc et ajoutez l'IP Zynq. Double-cliquez sur l'adresse IP du Zynq et importez les paramètres XPS fournis pour le Zynq. Activez ensuite UART0 avec MIO 10..11 sous l'onglet MIO configurations, et assurez-vous également que Timer 0 et Watchdog timer sont activés.
- Ajouter deux AXI GPIOS à la conception du bloc. Pour GPIO 0, activez le double canal et réglez les deux sur toutes les sorties. Définissez la largeur GPIO pour le canal 1 à 4 bits et pour le canal 2 à 12 bits, ces canaux seront utilisés pour définir la direction du moteur et envoyer le nombre de ticks mesurés par l'encodeur au processeur. Pour GPIO 1, définissez un seul canal sur toutes les entrées avec une largeur de canal de 4 bits. Il sera utilisé pour recevoir les données des encodeurs. Rendez tous les ports GPIO externes.
- Suivant Ajouter deux AXI Timer. Rendez les ports pwm0 sur les deux temporisateurs externes. Ce seront les PWM qui contrôlent la vitesse à laquelle les moteurs tournent.
- Enfin, lancez l'automatisation du bloc et l'automatisation de la connexion. Vérifiez que la conception du bloc que vous avez correspond à celle fournie.
Étape 4: Communiquer avec le LiDAR
Ce LiDAR utilise un protocole SCIP 2.0 pour communiquer via UART, le fichier joint décrit l'intégralité du protocole.
Pour communiquer avec le LiDAR, nous utiliserons UART0. Le LiDAR renvoie 682 points de données représentant chacun la distance à un objet à cet angle. Le LiDAR balaye dans le sens inverse des aiguilles d'une montre de -30 degrés à 210 degrés avec un pas de 0,351 degrés.
- Toutes les communications vers le LiDAR se font avec des caractères ASCI, se référer au protocole SCIP pour le format utilisé. Nous commençons par envoyer la commande QT pour allumer le LiDAR. Nous envoyons ensuite la commande GS plusieurs fois en demandant 18 points de données à la fois à ft dans la FIFO UARTS de 64 octets. Les données renvoyées par le LiDAR sont ensuite analysées et stockées dans le tableau global SCANdata.
- Chaque point de données stocké correspond à 2 octets de données codées. Le passage de ces données dans le décodeur renverra une distance en millimètres.
Dans le fichier main_av.c vous trouverez les fonctions suivantes pour communiquer avec le LiDAR
sendLIDARcmd(commande)
- Cela enverra la chaîne d'entrée au LiDAR via l'UART0
recvLIDARdata()
- Celui-ci recevra les données après l'envoi d'une commande au LiDAR et stockera les données dans le RECBuffer
requestDistanceData()
- Cette fonction enverra une série de commandes pour récupérer les 682 points de données. Après la réception de chaque ensemble de 18 points de données, parseLIDARinput() est appelé pour analyser les données et stocker de manière incrémentielle les points de données dans SCANdata.
Étape 5: Remplir la grille avec des obstacles
Le GRID qui est stocké est un tableau 2D avec chaque valeur d'index représentant un emplacement. Les données stockées dans chaque index sont respectivement un 0 ou un 1, Aucun obstacle et obstacle. La distance carrée en millimètres que chaque index représente peut être modifiée avec la définition GRID_SCALE dans le fichier vehicle.h. La taille du tableau 2D peut également être modifiée pour permettre au véhicule de balayer une plus grande zone en modifiant la définition GRID_SIZE.
Une fois qu'un nouvel ensemble de données de distance est scanné à partir du LiDAR updateGrid() est appelé. Cela va parcourir chaque point de données stocké dans le tableau SCANdata pour déterminer quels index de la grille ont des obstacles. En utilisant l'orientation actuelle du véhicule, nous pouvons déterminer l'angle qui correspond à chaque point de données. Pour déterminer où se trouve un obstacle, multipliez simplement la distance correspondante par le cos/sin de l'angle. L'ajout de ces deux valeurs à la position actuelle x et y du véhicule renverra l'index dans la grille de l'obstacle. La division de la distance renvoyée par cette opération par le GRID_SCALE nous permettra de faire varier la taille de la distance carrée de chaque index.
Les images ci-dessus montrent l'environnement actuel des véhicules et la grille résultante.
Étape 6: Communiquer avec les moteurs
Pour communiquer avec les moteurs, nous commençons par initialiser les GPIO pour contrôler la direction dans laquelle le moteur tourne. Ensuite, écrire directement à l'adresse de base des PWM dans la minuterie AXI nous permet de définir des éléments tels que la période et le rapport cyclique qui contrôlent directement le vitesse à laquelle tourne le moteur.
Étape 7: Planification du chemin
A mettre en œuvre dans un futur proche.
En utilisant les fonctionnalités de grille et de moteur décrites précédemment, il est très facile de mettre en œuvre des algorithmes tels que A*. Au fur et à mesure que le véhicule se déplace, il continuera à scanner la zone environnante et déterminera si le chemin sur lequel il se trouve est toujours valide
Conseillé:
Véhicule à effet de sol Super FAST RC (Ekranoplan): 5 étapes (avec photos)
Véhicule à effet de sol Super FAST RC (Ekranoplan) : Vous savez comment, lors de l'atterrissage, les avions planent à quelques pieds au-dessus du sol pendant un certain temps avant que leurs roues ne touchent réellement la piste ? Ce n'est pas seulement pour donner aux passagers un atterrissage en douceur mais c'est aussi le résultat naturel de l'effet de sol, dans lequel
Kid's Quad Hacking dans un véhicule autonome, suivi de ligne et détection d'obstacles.: 4 étapes
Quad Kid's Hacking dans un véhicule de conduite autonome, de suivi de ligne et de détection d'obstacles. Vidéo de démonstration :https://youtu.be/bVIsolkEP1kPour ce projet, nous aurons besoin du matériel suivant
Porte-clés d'évacuation de véhicule d'urgence : 11 étapes (avec photos)
Porte-clés d'évacuation de véhicule d'urgence : accidents de voiture. Aïe ! La meilleure façon d'éviter un accident est d'utiliser des techniques de conduite prudentes et de toujours faire attention à l'endroit où vous allez et aux autres voitures qui vous entourent. Cependant, malgré tous vos efforts, vous ne contrôlez pas les autres lecteurs
Véhicule robotique autonome pour débutant avec prévention des collisions : 7 étapes
Véhicule robotique autonome pour débutant avec prévention des collisions : Bonjour ! Bienvenue dans mon Instructable pour débutants sur la façon de créer votre propre véhicule robotique autonome avec évitement des collisions et navigation GPS. Ci-dessus, une vidéo YouTube montrant le robot. C'est un modèle pour démontrer comment un véritable autonomou
KEVIN le véhicule entièrement autonome : 17 étapes (avec photos)
KEVIN, le véhicule entièrement autonome : Voici Kevin. C'est une voiture radiocommandée capable d'effectuer une conduite entièrement autonome. Mon premier objectif était de fabriquer un véhicule autonome contrôlé par Arduino. J'ai donc acheté des châssis chinois bon marché. Mais c'était terrible parce que je n'arrivais pas à attacher de c