Table des matières:

Construisez votre propre voiture autonome - (cet instructable est en cours de réalisation): 7 étapes
Construisez votre propre voiture autonome - (cet instructable est en cours de réalisation): 7 étapes

Vidéo: Construisez votre propre voiture autonome - (cet instructable est en cours de réalisation): 7 étapes

Vidéo: Construisez votre propre voiture autonome - (cet instructable est en cours de réalisation): 7 étapes
Vidéo: 📁Planification & Gestion de Projet pour les Débutants👨‍🏫 2024, Juillet
Anonim
Image
Image

Bonjour, Si vous jetez un œil à mon autre Instructable on Drive Robot With Remote USB Gamepad, ce projet est similaire, mais à plus petite échelle. Vous pouvez également suivre ou obtenir de l'aide ou de l'inspiration à partir des listes de lecture Robotics, Home-Grown Voice-Recognition ou Self-Driving Car sur Youtube.

J'ai commencé avec le gros robot (Wallace 4), mais depuis que j'ai créé un groupe Meetup local, j'avais besoin de quelque chose à plus petite échelle, et le groupe était très intéressé par la vision par ordinateur.

Je suis donc tombé sur ce cours Udemy: Build Your Own Self-Driving Car qui m'a donné l'idée de ce projet.

Si vous êtes intéressé par le cours Udemy, vous pouvez continuer à y revenir; il est mis en vente de temps en temps avec une énorme remise. Remarque: il y a la partie 1 et la partie 2 - vous devez faire des recherches sur la façon d'obtenir les deux cours sous forme de forfait (réduit).

Le but de cette instructable est double. Tout d'abord, pour donner quelques conseils et alternatives à certaines parties du cours (comme les pièces et le matériel). Et deuxièmement, pour développer le cours.

L'objectif principal du cours Udemy:

est de pouvoir faire rouler une petite voiture robotisée à roues sur une route à deux voies réduite.

Il doit reconnaître les bandes de la voie, et quand il a atteint la fin de la route.

Il doit reconnaître un panneau d'arrêt (et s'arrêter).

Aussi, un feu de circulation ROUGE et VERT.

Il doit également reconnaître et manœuvrer autour d'un obstacle (une autre voiture).

Ce que ce Instructable ajoute au cours:

Conduisez la petite voiture avec une manette de jeu USB à distance, de la même manière que dans cet autre Instructable.

Proposez des alternatives à ce que propose le cours.

Vous n'aurez peut-être même pas besoin d'acheter le cours:

Ce Instructable peut être tout ce dont vous avez besoin pour commencer.

Fournitures

Les pièces essentielles (suggérées):

Un châssis de robot

Quatre moteurs

Arduino

Raspberry Pi (3, 3B+, 4)

Appareil photo (Webcam USB ou module Picamera)

Alimentation par batterie

Interrupteurs marche/arrêt

fils de liaison

entretoises (en plastique et peut-être en métal aussi)

Veuillez consulter l'intégralité de l'Instructable ainsi que les vidéos avant d'essayer d'acheter des pièces.

Après avoir fait ce projet, je me rends compte que les pièces exactes ne sont pas si critiques.

Étape 1: Plus de détails sur les pièces…

Image
Image
Plus de détails sur les pièces…
Plus de détails sur les pièces…
Plus de détails sur les pièces…
Plus de détails sur les pièces…

La vidéo associée donne quelques détails sur les pièces et certains problèmes que j'ai trouvés.

  • Cherchez différents châssis/moteurs
  • Les moteurs devraient déjà avoir des fils soudés dessus
  • Vous voudrez peut-être avoir une perceuse et des forets, OU un châssis avec plus de trous
  • Gardez à l'esprit que le poids est un problème. Tout doit être le plus léger possible.
  • Le pilote de moteur L298 H-Bridge fonctionne très bien. REMARQUE: obtenez-en un avec les borniers à vis (voir photo)
  • Vous voudrez probablement des entretoises en plastique et en métal, la taille M3 est probablement le meilleur choix.

Les entretoises en plastique sont idéales pour monter les cartes sur le châssis (pilote de moteur, Arduino, Raspberry, carte d'alimentation, interrupteur marche/arrêt, etc.).

Les entretoises métalliques sont bonnes pour assembler le châssis (résistance), et aussi surtout lorsque vous développez (programmation, test). Pour le développement, les entretoises métalliques peuvent servir d'échasses. Tout comme si vous travailliez sur une vraie voiture, vous voulez élever la voiture pour que les roues soient en l'air et puissent se déplacer librement. C'est très important! Vous ferez des erreurs et vous ne voulez pas que la voiture décolle et s'écrase.

Perceuse + mèches

Je tiens vraiment à mettre l'accent sur l'utilisation d'une perceuse, si vous le pouvez, et sur l'utilisation d'entretoises au lieu de ruban adhésif double face. Vous allez très probablement finir par retirer et repositionner vos planches, etc., plusieurs fois au cours de ce projet, et l'utilisation du ruban devient très compliquée.

L'utilisation d'une perceuse facilite le repositionnement (surtout si le châssis est en plastique) et donne un aspect plus professionnel.

Étape 2: Alimenter la voiture pendant le développement

Alimenter la voiture pendant le développement
Alimenter la voiture pendant le développement
Alimenter la voiture pendant le développement
Alimenter la voiture pendant le développement

À mon avis, le moyen le plus rapide et le plus simple de démarrer ce projet est:

  • pour le développement de croquis logiciels Arduino, connectez simplement l'Arduino à votre ordinateur via USB
  • pour le logiciel Raspberry Pi, vous devez disposer d'une alimentation USB 5V pouvant fournir au moins 3 ampères. Et il devrait avoir un interrupteur marche/arrêt. À moins que vous n'ayez un bon concentrateur USB alimenté connecté à votre ordinateur, vous ne pourrez probablement pas alimenter le Raspberry directement depuis votre ordinateur.
  • Car lorsque vous êtes prêt à tester les moteurs/roues, le plus simple est (voir photo) une bonne alimentation électrique. Cependant, ceux-ci ne sont pas bon marché.

Mon propos avec cette section est de dire que vous ne voulez pas utiliser la batterie pendant le développement, car cela ralentira considérablement votre progression.

De plus, en faisant quelque chose de similaire aux suggestions ci-dessus, vous n'avez pas à vous soucier (encore) de la façon dont vous alimenterez la voiture. Vous pouvez reporter cette décision pour plus tard dans le projet.

Étape 3: Alimenter la voiture pendant l'utilisation réelle

Alimenter la voiture pendant l'utilisation réelle
Alimenter la voiture pendant l'utilisation réelle
Alimenter la voiture pendant l'utilisation réelle
Alimenter la voiture pendant l'utilisation réelle

Si vous décidez de suivre le cours (ou ce que j'ai fait) pour une alimentation 5V à la logique, sachez que toutes les banques d'alimentation USB 5V ne sont pas bonnes pour ce projet.

Le point principal ici est que vous avez besoin de 5V mais vous avez besoin d'au moins 3 ampères ! Pensez-y de cette façon - vous voulez une banque d'alimentation qui alimentera un ordinateur portable (peut-être).

Si vous habitez aux États-Unis, je pense que l'une des meilleures façons de le faire est d'acheter chez Best Buy. Pourquoi? En raison de leur politique de remboursement de 14 jours pour les retours.

En fait, j'ai dû essayer trois banques d'alimentation différentes avant d'en trouver une qui fonctionnerait. Les autres amènent le Raspberry Pi à se plaindre de sous-tension.

J'avais commencé avec la banque d'alimentation la moins chère et j'ai continué à essayer le modèle suivant (qui coûtait plus cher), jusqu'à ce que j'en trouve un qui fonctionne.

Comment alimenter l'Arduino

Dans le cours Udemy, l'auteur a choisi d'alimenter l'Arduino directement à partir de la banque d'alimentation (via un circuit imprimé personnalisé qu'il a fabriqué) et il a utilisé des broches d'alimentation sur le connecteur GPIO de l'Arduino.

J'ai cependant choisi d'alimenter l'Arduino directement à partir du Raspberry Pi, via le câble USB.

Vous devrez décider lequel est le meilleur.

Comment alimenter les moteurs/pilote de moteur

Dans le cours Udemy, l'auteur a choisi d'alimenter les moteurs/driver directement à partir du powerbank 5V. Il y a deux considérations si vous utilisez cette approche.

  1. Lorsque les moteurs commencent à tourner, ils consomment le plus de courant. Cela peut (entraînera) la chute de la tension d'alimentation en dessous de 5 V et la réinitialisation du Raspberry.
  2. L'utilisation de seulement 5 V pour alimenter les moteurs signifie que vous ne fournissez pas autant de puissance que vous le pourriez aux moteurs et que la voiture se déplacera plus lentement (plus lentement). J'ai testé les moteurs (avec cette alimentation) (voir photo) à au moins 9V. Ils fonctionnent très bien à 9V.

Observations sur 9V (ou plus)

Si vous avez jeté un œil à toutes les photos et vidéos de ce Instructable, vous avez remarqué que j'ai assemblé un PCB personnalisé pour créer ma propre source d'alimentation 9V. J'ai appris quelques choses en cours de route.

En ce moment, j'utilise plusieurs (3) cellules de batterie 9V en parallèle, pour alimenter les moteurs. J'ai utilisé des piles alcalines et NiMH rechargeables.

Expérience d'apprentissage n°1: Il faut beaucoup de temps (plusieurs heures) pour charger correctement les batteries NiMH 9V.

Solution possible: Investissez dans un chargeur NiMH multi-batterie. Ce doit être un chargeur "intelligent".

Inconvénient: ils ne sont pas bon marché.

Expérience d'apprentissage n°2: les piles 9 V sont en fait constituées de plusieurs petites cellules intérieures. Si l'une de ces cellules meurt, toute la batterie est inutile. Je n'ai PAS eu ce problème, mais j'ai lu à ce sujet.

Expérience d'apprentissage n°3: toutes les piles 9 V n'ont pas la même tension. Celui-ci est important. Car plus la tension est élevée, plus la vitesse est possible. Certaines cellules de batterie (et chargeurs) ne font que 8,4 V. Certains encore moins. Certains sont en 9,6V.

Expérience d'apprentissage n°4: les piles 9 V, en particulier celles NiMH, sont légères. Une bonne chose. Cependant, la plupart d'entre eux ne fournissent que des mA de courant de sortie. C'est pourquoi j'ai dû les mettre en parallèle. Vous avez besoin d'une capacité de courant totale de près de 2 ampères, même pour de brèves périodes.

Expérience d'apprentissage n°5: Il existe des batteries de 9,6 V, utilisées pour des choses comme les voitures radiocommandées. Je n'en ai pas encore utilisé, mais je pense qu'elles fournissent plus de courant que les piles 9V parallèles comme je l'ai fait. En outre, vous pouvez charger l'unité unique. Les packs existent en différentes tailles. Et il y a une considération de poids. Et puis, utilisez-vous le pack pour alimenter toute la voiture, ou juste les moteurs ? Si pour toute la voiture, vous aurez alors besoin d'un régulateur abaisseur 5V pour le Raspberry Pi.

Le L298 H-Bridge a la capacité de produire 5V à cet effet, mais je suis préoccupé par la quantité de courant qu'il peut produire pour le Raspberry Pi, et si cela sera trop sollicité sur la carte L298.

Si vous décidez d'avoir deux sources d'alimentation distinctes, alors vous pouvez avoir un problème de poids (trop lourd).

Étape 4: Programmation logicielle pour la conduite avec manette de jeu

Je pense que j'ai déjà couvert une grande partie de cette section dans le Robot Driven Via Remote USB Gamepad Instructable, donc je ne le répéterai pas ici.

Les sections de programmation/logiciel dans cet autre Instructable ne sont que des suggestions. Je pense que l'on apprend plus par essais et erreurs.

Étape 5: Ajout d'une caméra

Ajout d'une caméra
Ajout d'une caméra
Ajout d'une caméra
Ajout d'une caméra
Ajout d'une caméra
Ajout d'une caméra

Dans le cours Udemy, je crois que l'auteur utilise des chevilles en bois rondes et un pistolet à colle pour construire un moyen d'élever la caméra.

Vous voudrez élever la caméra pour qu'elle regarde vers le bas sur la route à deux voies, afin qu'elle puisse plus facilement reconnaître les voies.

Là où je vis aux États-Unis, les chevilles en bois étaient très bon marché. Vous pouvez les acheter chez Lowe's ou Home Depot. J'ai choisi des chevilles carrées au lieu de chevilles rondes.

J'ai également choisi de fabriquer une base plus solide pour la tour de la caméra, et j'ai rendu toute la tour amovible de la voiture, afin que je puisse jouer avec et expérimenter quelle est la meilleure position pour elle sur la voiture.

De plus, j'ai fait la tour avec l'idée en tête que je commencerai avec une webcam USB, mais que je passerai peut-être plus tard à l'utilisation du module Picamera.

Vous voudrez peut-être investir dans un appareil photo de type fish-eye.

J'ai acheté un pistolet à colle chaude très bon marché, mais je voulais mieux renforcer la base de la tour, alors j'ai pré-percé des trous de vis et ajouté des vis pour mieux maintenir le tout ensemble.

Ensuite, j'ai boulonné la base sur le châssis de la voiture.

Si plus tard, je veux déplacer les choses, je viens de déboulonner la base du châssis, de percer de nouveaux trous dans le nouvel emplacement du châssis et de revisser la tour sur le châssis.

J'ai apporté le code Python et Node.js "suivez-moi" du gros robot (Wallace Robot 4) comme moyen de tout tester. S'il vous plaît voir les photos dans cette section pour la liste des youtubes qui donnent beaucoup plus de détails sur "follow-me".

Comme je l'ai mentionné, il était plus facile de monter d'abord une webcam USB. Plus tard, je pourrai monter le module Picamera.

Étape 6: Reconnaissance faciale - Déterminer la position

Image
Image

Cette partie n'est pas l'objectif du cours Udemy, mais c'était un exercice amusant.

Si vous effectuez une recherche sur le Web pour "reconnaissance faciale python opencv", vous trouverez de nombreux bons exemples sur la façon de le faire, et ils suivent tous à peu près les mêmes étapes.

  1. charger le fichier de visage "haar"
  2. initialiser la caméra
  3. démarrer une boucle où vous attrapez un cadre
  4. convertir l'image couleur en niveaux de gris
  5. le transmettre à l'opencv pour qu'il trouve le(s) visage(s)
  6. démarrer une boucle interne (pour chaque face trouvée) (dans mon cas, j'ajoute du code pour abandonner si plus de 1 face)

A cet effet ici, une fois que nous avons détecté un visage, nous connaissons les X, Y, W et H du carré imaginaire qui délimite le visage.

Si vous voulez que le robot avance ou recule, il vous suffit de considérer W. Si W est trop grand (trop proche), faites reculer le robot. Si W est trop petit (trop loin), faites avancer le robot.

Le mouvement gauche/droite est juste un peu plus compliqué mais pas fou. Jetez un œil à l'image de cette section qui détaille comment déterminer la position du visage gauche par rapport à droite.

REMARQUE:

Si vous exécutez l'un des exemples Web OpenCV, ils montrent tous la vue réelle de ce que opencv "voit", avec le visage entouré d'un carré. Si vous observez, ce carré n'est pas stable, même si vous ne bougez pas.

Ces valeurs changeantes feraient que le robot serait constamment en mouvement, en avant ou en arrière, à gauche ou à droite.

Ainsi, vous aurez besoin d'une sorte de delta pour l'avant/arrière et pour la gauche/droite.

Prenons à gauche contre droite:

Une fois que vous avez calculé à gauche et à droite, obtenez la différence (delta):

delta = abs(gauche - droite)

Vous devez prendre l'absolu car vous ne savez pas lequel sera le plus grand nombre.

Ensuite, vous ajoutez du code conditionnel pour ne tenter de déplacer que si le delta est supérieur à un minimum.

Vous feriez la même chose pour l'avant contre l'arrière.

Étape 7: Position du visage - Robot en mouvement

Une fois que vous savez que vous avez besoin que le robot se déplace à gauche ou à droite, en avant ou en arrière, comment procédez-vous ?

Étant donné que ce Instructable est un travail en cours, pour le moment, je viens de copier le code de mon gros robot à utiliser pour ce projet. Veuillez consulter ma liste de lecture Robotics sur youtube où elle détaille tout cela.

Bref, j'ai le code en couches.

Le script de reconnaissance faciale Python envoie des requêtes http au serveur Node.js

Le serveur Node.js écoute les requêtes http pour les directions de déplacement, les convertit en protocole série personnalisé

Protocole série personnalisé entre le serveur Node.js et Arduino

Croquis Arduino qui effectue les commandes réelles pour déplacer le robot

Le cours Udemy ne le fait pas comme ci-dessus. Mais comme je voulais bien progresser et me concentrer sur la véritable reconnaissance d'image, j'ai réutilisé mon code précédent pour le moment.

Conseillé: