# data[].attributes.body
jean-philippe le bg

# data[].attributes.attachment_link.readable_text
Introduction: Intelligent Braking System Prototype by Arduino

Hi, This Aditya kombe from EuphoLabs Hardware development community brought a new project that is a concept converted to Reality .Here we are making something that is visualized by many automobile companies like here's demo-

So we are making a demo prototype of such system that applies brakes proportional to the distance between car and obstacle. #ultrasonic #arduino #RC_car

Be the First to Share

Recommendations

Trash to Treasure Contest

Microcontroller Contest

Automation Contest

Step 1: Making the Car Base.

Take a plywood of 5mm or 7mm width and more than 50cm height. Cut it along as it is in fig 2 . Take measurement by calculations according to your wheels. Just remember the fact keep front wheel space more as we will design steering so calculate by moving wheels.Take a grinder and go on ....

Step 2: Back Wheels Placement

we will use 200 rpm or 100 rpm dc 12v motor , a L clamp screw hub , robotic wheel of 4cm x7 cm dimensions. fix L clamp on the corner and do it on both sides of symmetry.

Step 3: Steering Wheels!!!

We will use a 15 rpm dc gear motor to Control steering wheels but you can use Servo motors also. We will need

1.A gear hub

2.Two thin long plastic sheets or hard metal string

3.Two rubber stopper or plastic strips.

4. four long bolts that fits into the wheel axis properly

5.Thin and Small bolts or screws

6.Two 2cm x 7cm wheels

Rubber stopper can be the blocks of the wood as we are just creating a angular suspension to the front wheels. Just hole in them with drill and try to make a 90 degree L suspension for wheels as shown in fig no. 2, 3 ,and 4. Make hole equivalent to the Bolt in the car chassis as shown in the fig no. 5. Fix the wheel and Rubber stoppers to the chassis.Add a hole for the motor of slight larger equivalent to the neck of the motor in the center as shown in the fig. 6.

Fix the motor with gear hub . Make sure you shred gear head to plane by cutting of extra part for smooth steering.

Add two more small holes on the edges of the stoppers to fox the plastic strips and get along the Gear for movement.Calculate the length of plastic strips accordingly.Fix the small hole with screw or Thin bolts as you wish.See the fig no. 10 in the step. I hope you don't break the strips in the trial if so make necessary steps to stop extra movement.

Step 4: Skippable TESTS!!! That May Be Quite Useful...

Since our Car chassis or model is Ready now we will move forward to- "ULTRASONIC SENSOR TEST".

we need

1.Arduino uno

2.L293d motor driver module

3.Toycar

(note*--- TEST-1 and TEST-2 are skippable)

TEST-1

Our moto here in TEST-1 is to get reading from Ultrasonic sensor in centimeter in serial mode.See fig 1. We interfaced Ultrasonic sensor with arduino with pin configuration as-

trigPin 7
echoPin 6

vcc 5v

and gnd

and uploaded the below code test1.rtf a microsoft word file containing arduino code , copy , paste and upload please.

Judge the distance in serial code .

TEST-2

Take a toy car connect it to the motor driver(Rear wheel motor only) and for input connect the same arduino's pin no. 3 to the input. And upload the same code of TEST-1 again. Judge the distance and have trials. as shown from fig no. 3 onwards . (Notice the cool robot in the background i made out of groove kit box , well nothing to do with this project but notice how cool...how cool ! ! )..

Step 5: UNDERSTANDING THE CONCEPT , WHAT ACTUALLY ARE WE DOING HERE???

We are mapping the distance with ultrasonic ping sensor and regularly changing the PWM output to control speed of motor

WE use-

1. Mosfet based motor driver of input logic 5 v (get from ebay or dx.com)

and go for logic as shown in fig 1.

Whether if i made my own mosfet driver using optoisolator, IRF960 n channel ,and a copper clad pcb i recommend use a kit here.

Fig 1 here is the concept picture.

Step 6: Using RC!!

Hack a toy car - take out its wire from motor outputs from both the motors , battery unit and antenna wire(note * only a proper 5v operational, running(FWD and BCK) and steering(LEFT and RIGHT toy car only with good range).I got the one in fig 1. Add a 7805 5v Regulator assembly (Fig 2)to provide it a steady 5v supply. The FWD and BCK ie forward-backward motor wires is our inputA as you may have seen a input to the relay in concept picture of previous step in which we covered the understanding the concept part.(step 5 ).Connect a naked Relay or a Relay module to this motor as polarity doesn't matter here.The output of Relay will be same from the concept image.

Use a l293d motor driver module whose output will be connected to the 15 rpm steering motor and input given by LEFT and RIGHT RC kit outputs wire. shown in fig 3 of the step.Also test it to guaranty that RC remotes left is the steering motors left also.

Add a antenna to antenna wire.

Step 7: Ping Sensor Holder..

Make a ping sensor holder using a female pin hub and a piece of a perf board ,take the wires out and stick it up in front of the chassis.

Step 8: And We've Done!!!!!!!!!

Upload the Final sketch given in the microsoft word file Final.rtf , copy-paste-Upload please.

and distances are adjustable.

solder!! connect !! make it !!

Add 9v batteries to two 7805 regulators , a 9v battery with dc male plug to UNO, A 12v DC motor to the Relay according to concept picture.

Battery Draining fast?? no problem give ultrasonic sensor its own power.

Add Backlights as your wish i left a pin on UNO that you find in the final sketch.

Play-Learn-Modify-Its yours!!

here are some videos-(there are really poor But model worked very well.....NO crashes at all ..)

# data[].attributes.attachment_link.title
Intelligent Braking System Prototype by Arduino

# data[].attributes.attachment_link.description
Intelligent Braking System Prototype by Arduino: Hi, This Aditya kombe from EuphoLabs Hardware development community brought a new project that is a concept converted to Reality .Here we are making something that is visualized by many automobile companies like here's demo- So we are making a dem...

# data[].attributes.body
(position, vitesse,....)

# data[].attributes.attachment_link.readable_text
Une centrale à inertie ou centrale inertielle est un instrument utilisé en navigation, capable d' intégrer les mouvements d'un mobile ( accélération et vitesse angulaire) pour estimer son orientation (angles de roulis, de tangage et de cap), sa vitesse linéaire et sa position. L'estimation de position est relative au point de départ ou au dernier point de recalage.

La centrale à inertie n'utilise aucune information extérieure au mobile. Malgré les progrès spectaculaires des systèmes de positionnement par satellites, elle reste utilisée sur les avions de ligne dont la sécurité des vols ne peut reposer uniquement sur le GPS, insuffisamment fiable. Généralement, les véhicules militaires en sont également équipés pour pallier les brouillages du GPS susceptibles d'être rencontrés en temps de guerre.

Une centrale à inertie est un équipement de navigation comportant six capteurs d'une précision métrologique :

trois gyromètres mesurant les trois composantes du vecteur vitesse angulaire (vitesses de variation des angles de roulis, de tangage et de lacet) ; et

trois accéléromètres mesurant les trois composantes du vecteur force spécifique . La force spécifique est la somme des forces extérieures autres que gravitationnelles divisée par la masse. Cette quantité a donc la dimension d'une accélération mais, contrairement à ce que suggère le nom de l'instrument de mesure, il ne s'agit pas exactement d'une accélération.

Le calculateur de la centrale à inertie réalise l'intégration en temps réel, uniquement à partir des mesures de ces six capteurs :

des angles d'attitude (roulis, tangage et cap) ;

du vecteur vitesse ; et

de la position.

Des centrales à inertie sont installées à bord de véhicules terrestres, de navires, de sous-marins, d'avions, d'hélicoptères, de missiles et de véhicules spatiaux. Elles sont même parfois transportées par des piétons pour des applications de localisation de précision en génie civil quand le GPS n'est pas utilisable (forage de tunnels).

Les désignations habituelles des centrales à inertie sont des acronymes issus de l'anglais : Inertial Reference System (IRS), Inertial Navigation System (INS), ou Inertial Measurement Unit (IMU). Cette dernière appellation désigne le sous-système limité aux seuls capteurs inertiels (gyromètres et accéléromètres), sans calculateur.

Fonctionnement simplifié

À partir d'un point de départ connu, la connaissance à chaque instant des mouvements instantanés (déplacements linéaires et rotations) permet d'estimer les angles d'attitude et le vecteur vitesse courants, mais aussi la position de la centrale inertielle.

La validité de ce principe peut être illustrée en analysant le cas simple d'un mouvement rectiligne et sans rotation, donc à un seul degré de liberté. C'est par exemple la situation d'un wagon sur un tronçon rectiligne d'une voie ferrée.

Vitesse :

où :

est le temps

est l'accélération à l'instant

est la vitesse à l'instant

est un intervalle de temps infinitésimal

Position :

où :

est la position à l'instant

Grâce à ces deux équations dites " équations de l'estime ", et moyennant la connaissance des vitesse et position initiales, la seule mesure en continu de l'accélération permet d'estimer à chaque instant ultérieur la vitesse et la position .

Le principe est similaire dans le cas du mouvement quelconque d'un véhicule libre de tous ses mouvements dans l'espace à trois dimensions, donc possédant ses 6 degrés de liberté :

les 3 composantes de déplacement de son centre de gravité ; et

les 3 composantes de rotation autour de son centre de gravité.

L'estimation de l'état de ce véhicule requiert la mise en œuvre de trois accéléromètres et de trois gyromètres plutôt que d'un seul accéléromètre. Les équations complètes de l'estime prennent aussi une forme plus compliquée que celles exposées ci-dessus.

Dans la pratique, le fonctionnement s'écarte des équations idéales à cause des erreurs qui affectent les mesures des rotations et des accélérations (biais, bruits, facteurs d'échelle, non-linéarités...) et qui engendrent des dérives au cours du temps des estimations des assiettes, de la vitesse et de la position. Contrairement à ce que suggère l'exemple simplifié, le plus gros contributeur à l'erreur d'une centrale à inertie est le gyromètre. Ceci est dû au fait qu'il est intégré une fois de plus que l'accéléromètre, donc le biais de mesure de la vitesse angulaire engendre de plus grandes erreurs que le biais d'accélération.

Une centrale à inertie équipant un avion de ligne transocéanique est typiquement affectée d'une dérive de son estimation de position de l'ordre du NM/h ( mille nautique par heure).

Pour atteindre une telle précision, il faut mettre en œuvre des gyromètres présentant des erreurs n'excédant pas quelques centièmes de °/h (degrés par heure) et des accéléromètres de quelques dizaines de µg d'erreur (micro- g = millionième de la gravité terrestre). Ces capteurs inertiels doivent de plus être acquis à des cadences de plusieurs centaines de hertz.

Le coût d'une telle centrale à inertie se chiffre en centaines de milliers de dollars.

Plutôt que d'utiliser des capteurs inertiels de très haute performance et donc coûteux, une autre solution pour limiter les dérives d'une centrale à inertie est de mettre en œuvre des algorithmes d'hybridation avec d'autres capteurs que les capteurs inertiels.

Un exemple d'algorithme couramment utilisé est le filtre de Kalman, qui permet d'estimer les biais des différents capteurs grâce à des informations de position ou de vitesse tierces (GPS, capteur de vitesse sol, radar Doppler, odomètre, capteurs de vitesse air...).

De telles hybridations permettent d'utiliser des capteurs inertiels bien moins coûteux, en sacrifiant l'indépendance inhérente aux centrales inertielles.

Dans les applications à haut niveau d'intégrité, telles que les avions long courriers transocéaniques, l'hybridation des centrales de navigation primaires avec le GPS n'est pas acceptable, car une panne du système GPS pourrait se propager sur toutes les sources de navigation et compromettre la sécurité du vol. Les avions de ligne sont donc généralement équipés de trois centrales à inertie de grande précision garantissant une dérive de position de l'ordre d'un mile nautique par heure de vol (1NM/h), fonctionnant en inertie pure (c'est-à-dire sans hybridation).

Le schéma-bloc ci-contre est le modèle de propagation des erreurs du gyromètre selon l'un des deux axes Nord ou Est de la plateforme virtuelle. est l'inclinaison de la plateforme virtuelle par rapport à l'horizontale le long de cet axe. Le gain correspond à l'accélération de la pesanteur terrestre. Il relie l'erreur de plateforme (en radians) à l'erreur de projection de la mesure des accéléromètres. Cette représentation linéaire est valide tant que est faible, ce qui est toujours le cas (l'erreur d'inclinaison de la plateforme virtuelle d'une centrale inertielle étant toujours très largement inférieure à 1/10°).

L'erreur de vitesse est donc l'erreur du gyromètre multipliée par et intégrée deux fois. Pour obtenir l'erreur de position, il faut intégrer une troisième fois.

Après une durée de navigation et dans l'hypothèse où les états de la centrale à inertie (attitudes, vitesse et position) auraient été tous parfaitement initialisés, un biais de gyromètre engendrerait l'erreur de position suivante :

Par exemple, après 5 heures de navigation (durée courante du vol d'un avion de ligne), un biais de gyromètre de 1/100 de degré par heure se propagerait, selon cette représentation, en une erreur de navigation de :

= 462 km.

Cette valeur est beaucoup plus élevée que l'erreur usuellement relevée. Mais dans les calculs précédents, la rotondité de la terre a été négligée [3] . Quand le véhicule dans lequel la centrale à inertie est installée se déplace à la vitesse au voisinage du globe terrestre, le plan horizontal local ne reste pas parallèle à lui-même mais bascule autour d'un axe horizontal perpendiculaire au vecteur vitesse, à la vitesse angulaire ( étant le rayon du globe terrestre). Dans un bon algorithme de navigation inertielle, cette vitesse angulaire " de transport " ( transport rate en anglais) doit donc être retranchée de la mesure du gyromètre. Le schéma-bloc de propagation des erreurs devient alors celui ci-contre.

La structure bouclée formée par les deux intégrateurs d'assiette et de vitesse constitue un oscillateur non amorti dont la pulsation propre est égale à la racine carrée du gain de boucle ouverte :

La période propre, dite période de Schuler, est donc :

La réponse en erreur de vitesse à un échelon de biais est :

La boucle de Schuler a donc pour effet de borner l'erreur de vitesse. L'amplitude moyenne de celle-ci est :

Dans l'exemple précédent d'un gyromètre affecté d'un biais de 0,01 °/h, cette expression vaut 0,3 m/s

Après 5 heures de navigation, l'erreur de position n'est donc finalement que de :

= 0,3 x 5 x 3 600 = 6 km

Cette valeur est bien plus proche que la précédente des erreurs couramment observées sur les centrales inertielles des avions de ligne, dont la spécification est typiquement de 1 NM/h (mile nautique par heure). La rotondité de la terre et l'oscillation de Schuler qui en résulte sont donc largement bénéfiques et limitent la divergence de l'erreur de position.

Les principes de l'estimation de la position horizontale ont été exposés. Mais une centrale à inertie a souvent vocation à être utilisée en tant que source de navigation sur les avions, les fusées ou les missiles. La question se pose alors de compléter le positionnement horizontal 2D par une estimation de la position verticale (donc de l'altitude) afin de disposer d'une source de navigation inertielle 3D.

Le principe du calcul d'une altitude inertielle est similaire à celui exposé au paragraphe " fonctionnement simplifié" ci-dessus. L'accélération verticale est intégrée deux fois pour obtenir successivement les estimations de la vitesse verticale et de l'altitude. La différence réside dans le fait qu'un accéléromètre mesure non pas une accélération mais une force spécifique, à laquelle il convient de rajouter l'accélération de la pesanteur terrestre pour trouver une vraie dérivée de vitesse verticale. L'accélération de la pesanteur terrestre décroît avec l'altitude comme le carré de la distance au centre du globe :

Où :

est l'altitude ;

est le rayon du globe terrestre ; et

est l'accélération de la pesanteur à la surface du globe.

Cette dépendance entre gravité et altitude résulte en une boucle dans l'algorithme de calcul, comme illustré par le schéma bloc ci-dessus.

De l'expression précédente on déduit le gradient vertical de la gravité :

Aux altitudes de vol des avions, on peut négliger l'altitude devant le rayon du globe terrestre. Le gradient vaut alors :

Le modèle linéarisé de la propagation des erreurs illustré ci-contre présente, comme ceux des erreurs horizontales, une structure à deux intégrateurs interconnectés en boucle. Le gain de boucle ouverte y est deux fois plus élevé que celui des boucles horizontales, mais la différence fondamentale réside dans le signe de ce gain. Il était négatif dans les boucles horizontales, rendant la rétroaction plutôt stabilisatrice (bien qu'avec un taux d'amortissement nul). Dans la boucle verticale, il est positif et rend la rétroaction déstabilisatrice, et la réponse divergente.

La réponse temporelle à un échelon de biais d'accélération verticale s'obtient par transformation inverse de Laplace de la fonction de transfert déduite de ce schéma bloc :

Le graphique ci-contre est le tracé de l'erreur d'estimation d'altitude inertielle en présence d'un biais d'accélération de 10 µg et sous hypothèse d'une initialisation parfaite. L'erreur dépasse 8 km au bout d'une heure et atteint une valeur de l'ordre de l' année-lumière au bout des 5 heures de navigation de l'exemple du chapitre traitant des erreurs horizontales !

On peut conclure que l'estimation purement inertielle de l'altitude est impossible du fait de la nature divergente de l'équation différentielle à mettre en œuvre. Elle ne serait éventuellement possible que pour des missions de très courte durée (e.g. celles d'un lanceur spatial).

L'estimation de la position horizontale nécessite pourtant la connaissance de l'altitude pour déterminer la valeur de la gravité terrestre à l'emplacement de la centrale. On utilise pour ce besoin une mesure de la pression atmosphérique : la centrale inertielle d'un aéronef est nécessairement couplée à un baroaltimètre.

Notes et références

Articles connexes

# data[].attributes.attachment_link.description
Une centrale à inertie ou centrale inertielle est un instrument utilisé en navigation, capable d' intégrer les mouvements d'un mobile ( accélération et vitesse angulaire) pour estimer son orientation (angles de roulis, de tangage et de cap), sa vitesse linéaire et sa position.

# data[].attributes.attachment_link.readable_text
Pourquoi le LiDAR

Une brève introduction à la technologie LiDAR et à ses applications commerciales

Le LiDAR est une méthode de télédétection et de télémétrie semblable au radar, mais qui émet des impulsions de lumière infrarouge, au lieu d'ondes radio, puis en mesure le temps de retour après avoir été réfléchies sur des objets à proximité. Connaissant la vitesse de la lumière, le capteur LiDAR peut calculer précisément la distance par rapport à chaque objet à partir du délai entre l'émission de l'impulsion laser et l'impulsion de retour. Chaque seconde, le LiDAR prend ainsi des millions de points de mesure précise de la distance, à partir desquels on peut produire une matrice 3D de son environnement. Cette cartographie détaillée peut renseigner sur la position, la forme et le comportement des objets.

Des véhicules de tous genres se servent du LiDAR pour déterminer quels obstacles se trouvent à proximité et à quelle distance ils sont. Les composantes LiDAR génèrent des cartes 3D qui permettent de détecter les objets, d'en déterminer la position et même de les identifier. Les subtilités découvertes par le LiDAR aident également le système informatique du véhicule à prévoir le comportement des objets et à adapter la conduite en conséquence.

Les véhicules semi-autonomes et autonomes comptent sur un amalgame de technologies de détection. Cet ensemble de capteurs comprend un radar, qui fournit des mesures constantes de la distance et de la vitesse et dont le rendement est peu pénalisé par la météo, mais dont la résolution est inférieure et qui peut difficilement cartographier les petits détails à longue distance. La vision par caméra, couramment utilisée en automobile et en mobilité, procure des renseignements 2D de haute résolution. Cependant, elle dépend beaucoup d'une puissante intelligence artificielle et d'un logiciel connexe pour traduire les données captées en interprétations 3D. Les conditions environnementales et l'éclairage peuvent grandement nuire à la technologie de vision par caméra.

Le LiDAR, quant à lui, offre des données de mesures 3D précises sur de courtes et de longues distances, même lorsque la météo et l'éclairage sont difficiles. C'est une technologie qui peut être alliée à d'autres données sensorielles pour produire une représentation très fidèle d'objets statiques et mobiles dans l'environnement du véhicule.

C'est ainsi que la technologie LiDAR est devenue une solution très accessible pour permettre la détection et l'évitement d'obstacles, ainsi que la navigation sécuritaire de différents environnements dans une panoplie de véhicules. Aujourd'hui, on utilise la technologie LiDAR dans un nombre d'applications de grande importance en automobile et en mobilité, dont les systèmes avancés d'aide à la conduite et la conduite autonome.

Principaux avantages du LiDAR

Résolution et précision:

Le LiDAR génère instantanément une énorme quantité de mesures et peut être précis à un centimètre près.

Cartographie 3D:

Les données LiDAR sont faciles à convertir en cartes 3D servant à interpréter l'environnement.

Performance en faible luminosité:

Le LiDAR n'est pas touché par les variations de la lumière ambiante et fonctionne bien dans toutes les conditions de faible luminosité.

Rapidité:

Les données LiDAR sont des mesures directes de la distance. N'ayant pas besoin d'être déchiffrées ou interprétées, elles permettent un fonctionnement rapide et réduisent le traitement nécessaire.

" Le LiDAR génère des données concrètes, faciles à traiter par l'informatique, sous forme de mesures exactes. Voilà pourquoi tous les joueurs sérieux dans la course à la voiture autonome considèrent le capteur laser comme un ingrédient indispensable de la voiture entièrement robotisée, c'est-à-dire qui ne nécessite aucun volant ou main humaine. "

Grâce à ses capacités uniques de télédétection et de télémétrie sur de courtes et de longues distances, la technologie LiDAR est utilisée dans de nombreux domaines et applications. La nécessité du LiDAR pour étoffer et compléter l'ensemble actuel de capteurs automobiles (c.-à-d., vision par caméra, radar et technologies ultrasoniques) dans une optique de conduite autonome ouvre une nouvelle voie en rapide expansion à la multiplication des LiDAR en réponse à une forte demande et à de gros volumes.

Les analystes de Wall Street et des spécialistes de la recherche commerciale estiment à 130 millions de dollars américains les investissements qui seront réalisés en recherche et développement de technologies de conduite autonome entre 2015 et 2025, ce qui devrait pousser à près de 40 millions d'unités par année le marché des LiDAR automobiles d'ici 2026. La conduite autonome représente aujourd'hui le segment d'investissement le plus important en nouvelles technologies automobiles, surpassant même l'électrification et la connectivité à distance.

Le déploiement commercial de masse de véhicules entièrement autonomes (niveaux d'autonomie 4 et 5 de la SAE) est un objectif à long terme qui nécessite l'intégration de la technologie LiDAR. Au cours de la prochaine décennie, on s'attend toutefois à ce que les véhicules les plus déployés commercialement soient les véhicules de tourisme aux niveaux d'automatisation 2+ et 3 (ADAS et conduite semi-autonome) ; ceux-ci représenteraient donc la plus importante occasion pour les LiDAR automobiles.

Les fabricants automobiles attendent avec impatience d'avoir accès à des solutions LiDAR automobiles qui offriront un rapport coût-performance optimal tout en ouvrant la porte à une automatisation importante des véhicules de série. Les LiDAR à balayage mécanique, populaires en recherche et développement et en prototypage de systèmes de conduite autonome, présentent plusieurs lacunes qu'il faut corriger.

Un LiDAR à balayage mécanique peut recueillir des données sur 360 degrés s'il utilise un ensemble laser-récepteur pivotant ou un miroir rotatif pour diriger le faisceau lumineux. Ces dispositifs utilisent de puissants lasers collimatés qui concentrent l'impulsion de retour sur le détecteur à l'aide d'éléments optiques très concentrés. Bien qu'ils procurent une cartographie détaillée de l'environnement, leur prix élevé (plusieurs milliers, voire plusieurs dizaines de milliers de dollars), leur complexité, les problèmes de fiabilité et leur grande taille en font un choix peu intéressant pour des déploiements commerciaux en automobile et en mobilité.

Les modèles solid-state, sans balayage mécanique motorisé, sont donc reconnus comme étant la meilleure avenue pour obtenir des solutions LiDAR pour le marché automobile de masse. Leur composition plus simple, sans pièces mécaniques, les rend intrinsèquement plus économiques à produire, ce qui leur ouvre la voie à une fabrication à grand volume et à une viabilité commerciale. Les LiDAR à illumination flash, en particulier, offrent une illumination instantanée et intégrale de la scène. Ils captent un grand nombre de subtilités des objets tout en utilisant beaucoup moins de données que les méthodes à nuage de points, ce qui rend le traitement très efficace.

Afin de vous offrir la meilleure expérience utilisateur possible, ce site utilise des témoins (" cookies "). En utilisant notre site, vous acceptez l'enregistrement de ces témoins sur votre appareil (sauf si vous avez désactivé l'utilisation des témoins dans vos réglages). Pour de plus amples renseignements, veuillez lire nos Conditions d'utilisation et notre Politique de confidentialité.

# data[].attributes.attachment_link.description
Pourquoi le LiDAR Une brève introduction à la technologie LiDAR et à ses applications commerciales Le LiDAR est une méthode de télédétection et de télémétrie semblable au radar, mais qui émet des impulsions de lumière infrarouge, au lieu d'ondes radio, puis en mesure le temps de retour après avoir été réfléchies sur des objets à proximité.

# data[].attributes.attachment_link.readable_text
Pour une compétition à Toulouse, un ami et moi avons développé et programmé un robot autonome de course fonctionnant à l'aide d'une Raspberry Pi, une Arduino Uno et une Pi Camera. Nous avons utilisé Python, C++ et un réseau de neurones pour le traitement d'images, fonctionnant en temps réel à plus de 60 images/s (FPS)!

Dans cet article, nous partageons notre expérience et donnons les clés pour reproduire la voiture.

Nous rendons public les modèles 3D , le code source(https://github.com/sergionr2/RacingRobot) ainsi que les données utilisées pour l'entraînement du robot.

Note : aucune connaissance en apprentissage automatique (machine learning) n'est requise pour lire cet article, bien que cela puisse aider à comprendre les détails du traitement d'image. Cette article est une traduction de l'article original (en anglais) disponible ici

Après une démonstration de la petite voiture, nous allons présenter brièvement la compétition et décrire les composants principaux de la voiture (matériel/logiciel). Enfin, nous verrons plus en détail le fonctionnement de la voiture : comme la rendre autonome.

(regardez la vidéo en entier, il y a des bonus à la fin ;) )

La Course

La compétition est une course contre-la-montre autonome de 110 mètres, avec une ligne noire&blanche au centre. A cause des changements d'illumination, c'était un véritable défi de faire du traitement d'image plutôt que d'utiliser un capteur de distance (ex : un capteur à ultrasons).
Vue d'ensemble de la piste : La piste à Toulouse :
Notre stratégie était de suivre la ligne du milieu. Cela permet de rester loin des bords et permet d'anticiper les tournants. Cependant, il faut que la ligne soit toujours visible et que le traitement soit robuste aux changements de lumière.
Vue de la caméra embarquée :
Le Matériel

Qu'est ce qu'une Raspberry Pi?

Une Raspberry Pi est un ordinateur de la taille d'une carte de crédit conçu à l'origine pour l'éducation. (source : opensource.com)

Qu'est ce qu'une Arduino ?

En résumé, une Arduino est une carte électronique de développement matériel ouverte qui peut être utilisée pour concevoir et construire des périphériques qui interagissent avec le monde réel. (source : opensource.com)

Modèle 3D pour le "fixe-batterie" Modèle 3D du "fixe-caméra"
Logiciel

C++ pour l'Arduino

Python + Numpy + OpenCV pour la Raspberry Pi

Lasagne +Theano pour entraîner le réseau de neurones

Protocole Serial maison pour la communication Arduino <-> Raspberry Pi (cf Annexe)

Vue d'Ensemble de l'Architecture
Vue d'Ensemble de l'Architecture Logicielle :
Le traitement d'image et le contrôle sont réalisés sur la Raspberry Pi. Elle communique avec l'Arduino qui envoie les ordres aux moteurs (direction et vitesse) à l'aide de la modulation de largeur d'impulsion (PWM). Nous détaillons la communication entre l'Arduino et la Raspberry pi dans l'annexe.

Après une brève présentation de la simulation, nous expliquons dans la section suivante notre approche pour détecter la ligne et décrivons le contrôleur utilisé pour la suivre.

Simulateur

Nous avons créé un simulateur avec Blender et Python pour tester l'algorithme de vision ainsi que notre stratégie de contrôle. Le résultat, qui était prometteur, est visible ci-dessous. Pour s'assurer de la robustesse de notre approche, nous simulons également les vibrations sur l'image d'entrée.

Traitement d'Image : Détecter la Ligne

Pour faire en sorte que le robot reste sur la piste, il faut détecter la ligne et anticiper les virages : cela permet d'aller à vitesse maximale en ligne droite et de réduire la vitesse avant de tourner. Cela est réalisé en deux étapes grâce au traitement de l'image provenant de la caméra. Nous allons d'avoir voir comment prédire la courbe de la ligne (à quel point le virage est sec) une fois celle-ci détectée, puis nous nous attarderons sur les deux approches que nous avons examinées pour trouver le centre de la ligne.

Prédire la Courbe de la Ligne

Pour anticiper les virages et réduire le temps de calcul, nous faisons de la détection de ligne sur trois "patchs" ou régions d'intérêt (region of interest ou ROI en anglais).
Légende : sur la droite, on peut voir les trois patchs d'image ainsi que le résultat de la prédiction du centre de la ligne (cercle rouge). Sur la gauche, le résultat sur l'image d'entrée. La prédiction de la courbe de la ligne est en vert. La ligne bleue est une ligne de référence qui correspond à une ligne droite.
Nous ajustons ensuite une ligne (la ligne verte sur l'image ci-dessus) aux trois points obtenus, c'est à dire que nous essayons de trouver la droite qui passe par ces trois points, chaque point correspondant à une prédiction pour une région de l'image. Grâce à cette ligne, nous pouvons calculer l'angle entre celle-ci est une référence (en bleue ci-dessus), ce qui donne une estimation de la courbe de la ligne. Si la voiture est sur une ligne droite, la ligne verte (prédite) et la ligne de référence sont confondues.

Approche Basée Sur la Couleur

Notre approche initiale pour détecter la ligne était basée sur la couleur. L'idée générale est de trouver la plus grande région de l'image qui contient une couleur donnée puis de calculer le barycentre ("centre") de cette région.

La première étape consiste à convertir l'image dans l'espace HSV (Hue Saturation Value), puis de calculer un masque de couleur avec des seuils pré-définis. Enfin, il faut trouver le barycentre du masque qui est par hypothèse le centre de la ligne.
Résultat du masque de couleur dans l'environnement simulé. Le cercle rouge correspond au centre de la ligne qui a été prédit et la ligne verte indique le contour du masque de couleur.
En 30 lignes de code python, cela ressemble à ça :

Approche Apprentissage Automatique (Machine Learning)

Le principal inconvénient de la méthode précédente est qu'elle n'est pas robuste aux changements d'illuminations. Nous avons essayé l'égalisation d'histogramme pour corriger ce problème mais ce n'était pas suffisant et coûteux en temps de calcul.

De ce fait, nous avons décidé d'utiliser une technique d'apprentissage pour détecter la linge, c'est à dire que nous voulions entraîner un modèle qui puisse prédire où se trouve la ligne à partir d'une image d'entrée. J'ai choisi d'utiliser un réseau de neurones car c'est une méthode que je maîtrise et qui est facile à implémenter en utilisant uniquement python et la bibliothèque numpy.

Aperçu du Problème de Régression

Lorsque l'on fait de l'apprentissage supervisé, c'est à dire lorsque l'on a des données étiquetées, le but est de prédire l'étiquette connaissant l'entrée (par exemple, prédire si une image contient un chat ou un chien - l'étiquette est "chat" ou "chien" et l'entrée est l'image). Dans notre cas, nous voulons prédire les coordonnées du centre de la ligne à partir de l'image de la caméra embarquée sur le robot.

Nous avons simplifié le problème en ne prédisant que la position du centre de la ligne le long de la largeur de l'image, c'est-à-dire que nous avons fait l'hypothèse que le centre de la ligne était situé à mi-hauteur de chaque "patch" d'image.

Pour évaluer la performance de notre modèle, nous choisi l'erreur quadratique moyenne (MSE en anglais): nous prenons l'erreur au carré entre la position prédite et al position réelle du centre de la ligne et faisons la moyenne sur l'ensemble des images de l'ensemble d'apprentissage.

Étiquetage des images

Après avoir enregistré une vidéo avec le mode télécommande, nous avons étiqueté à la main plus de 3000 photos (en ~25 minutes, soit 1 étiquette/s). Pour se faire, nous avons créer nous propre outil pour étiqueter les images.

Prétraitement et Augmentation des Données

Différentes étapes sont requises avant d'utiliser notre algorithme d'apprentissage sur les données. Tout d'abord, nous redimensionnons l'image pour réduire la dimension en entrée (par un facteur 4), cela permet de réduire drastiquement le nombre de paramètres à apprendre. Cela simplifie le problème et accélère à la fois l'apprentissage et le temps de prédiction.

Pour éviter des problèmes de saturation et accélérer l'entraînement, il est recommandé de normaliser les données. Dans notre cas, nous normalisons les images en entrée dans l'intervalle [-1, 1] et la sortie (la position du centre) dans [0, 1].

Le script de prétraitement des données est affiché ci-dessous :

def preprocessImage(image, width, height): """ Preprocessing script to convert image into neural net input array :param image: (cv2 RBG image) :param width: (int) :param height: (int) :return: (numpy array) """ image = cv2.resize(image, (width, height), interpolation=cv2.INTER_LINEAR) x = image.flatten() # create a big 1D-array # Normalize x = x / 255. # values in [0, 1] x -= 0.5 # values in [-0.5, 0.5] x *= 2 # values in [-1, 1] return x

Pour augmenter le nombre d'images d'entraînement, nous avons retourné verticalement les images (image en miroir), ce qui a permis de multiplier la taille de l'ensemble d'apprentissage par deux de manière rapide et peu coûteuse.

Architecture du Réseau de Neurones

Nous avons utilisé un réseau feedforward composé de deux couches cachées avec respectivement 8 et 4 neurones. Bien que nous avons testé d'autres architectures (dont des réseaux convolutionels), celui-ci donnait les meilleurs résultats et pouvait tourner en temps réel à plus de 60 images/s !

Hyperparamètres

Les hyperparamètres sont des paramètres dans les valeurs sont fixées avant le commencement du processus d'apprentissage. Au contraire, les valeurs des autres paramètres sont apprises lors de l'entraînement. (Définition adaptée de Wikipedia)

Les hyperparamètres incluent l'architecture du modèle, le pas d'apprentissage, la taille des "minibatches", ...

Pour valider le choix des hyperparamètres, nous avons séparer le jeu de données en trois sous-ensembles : un ensemble d'apprentissage (60% des données), un ensemble de validation (20%) et un ensemble de test (20%). Nous avons gardé le modèle avec la plus petite erreur sur l'ensemble de validation et estimé l'erreur de généralisation sur l'ensemble de test. Le détail des ces hyperparamètres peut être trouvé en annexe. Le réseau a été entraîné en moins de 20 minutes sur un CPU (8-cœurs) de PC portable.

Le Contrôleur : Suivre la Ligne

Une fois que nous avons traité l'image et que nous avons calculé notre déviation par rapport au centre de la ligne, nous devons corriger notre erreur en régulant la direction et la vitesse de la voiture.

Pour cela, nous avons utilisé un contrôleur Proportionnel-Dérivée (PD)) afin de suivre la ligne. La vitesse de la voiture est régulée grâce à deux heuristiques : la déviation actuelle par rapport au centre de la ligne (qui est notre erreur) et la courbe de la ligne. Plus l'erreur est grande, plus petite est la vitesse (idem pour la courbe de la ligne).

L'idée de notre stratégie de contrôle peut être résumée en deux lignes :

 command = Kp * e + Kd * (de/dt) # where "e" is the error speed = MIN_SPEED * h + (1 - h) * MAX_SPEED # WHERE h = 0 if it is a straight line and 1 if it's a sharp turn # MAX_SPEED depends on the error "e" in the same manner, # that is to say the bigger the error, the lower the MAX_SPEED

L'estimateur de la courbure de la ligne est assez bruité, nous avons donc décidé d'utiliser une moyenne glissante, ce qui a amélioré la stabilité du contrôle.
Tous les robots compétiteurs : Pendant la course :
Conclusion

Nous avons décrit comment nous avons construit une voiture de course autonome, avec un contrôle basé sur la vision par ordinateur. Nous avons pris du plaisir à développer ce robot et nous voulions partager notre expérience. Notre but est que vous puissiez réutiliser ou vous inspirer de ce que nous avons fait.

Nous espérons que vous avez apprécié cet article, et n'oubliez pas, partagez c'est aimer =D.

Si vous avez une question, une remarque (ou si vous avez trouvé une faute de frappe) merci de laisser un commentaire sous l' article original.

Annexe

Hyperparamètres Utilisés

Le réseau de neurones a été entraîné avec Lasagne (bibliothèque haut niveau autour de Theano), pendant 1000 itérations (epochs), avec une taille de minibatch de 1, ADAM comme optimiseur avec un pas d'apprentissage initial de 1e-5. Un dropout avec une probabilité 0.1 est appliqué sur l'entrée ainsi qu'une pénalité L2 de 1e-4 sur les poids.

Communication Arduino - Raspberry Pi : Protocole Série

Pour faire la communication entre les deux cartes, et parce qu'Arduino ne propose pas de méthode efficace pour écrire sur le port série, nous avons utilisé un protocole Serial maison, basé sur l'envoie octet par octet que donne Arduino avec la méthode Serial.write().

Le protocole est le suivant : nous envoyons d'abord l'ordre sur un octet (8 bits) puis nous envoyons octet par octet les paramètres de la commande. Par exemple, pour envoyer un ordre aux moteurs, nous envoyons d'abord l'octet qui correspond à cette commande puis nous envoyons la vitesse désirée sur un autre octet.

Nous avons implémenté les fonctions qui permettent d'encoder et de décoder des entiers de différentes tailles (de un octet à quatre octets). Si l'on souhaite envoyer un entier codé sur 16 bits, nous le découpons d'abord en deux octets et les stockons dans un tableau (buffer array). Ensuite, nous envoyons chaque octet du tableau et reconstruisons les 16 bits à la réception à l'aide d'opérations bit à bit (décalage et masquage).

Notre implémentation tient également compte de la taille limitée du buffer de l'Arduino: si nous envoyons trop d'octets dans un petit laps de temps, une parti des messages sera perdu. Pour éviter ce problème, nous avons mis en place un système d'accusé de réception.

Ce protocole est implémenté en C++ et en Python. J'ai également créé un interpréteur interactif de commande (très pratique pour le debug ;)). Ce protocole a notamment été utilisé sur nous robots de la coupe de France de Robotique (où nous avons terminé 4ème/142 =D !).

Pourquoi avoir utilisé Python sur la Raspberry Pi ?

Au début du projet, nous avions prévu d'écrire tout en C++ pour des raisons de performance. Cependant, nous n'avons pas réussi à récupérer plus de 30 images par seconde (FPS) avec la bibliothèque raspicam, là où la bibliothèque Python picamera permet de récupérer jusqu'à 90 images par seconde.

Interface ROS

Je travaille actuellement sur la construction de nœuds ROS pour utiliser la voiture avec la caméra. Un exemple du mode de téléopération utilisant deux nœuds ROS peut être trouvé sur l'image linux fournie (cf README pour l'installation) ou sur la branche ROS.

Ingénieur de Recherche en Robotique et Machine Learning

# data[].attributes.attachment_link.title
(Petite) Voiture de Course Autonome avec une Arduino, une Raspberry Pi et une Pi Camera

# data[].attributes.attachment_link.description
Pour une compétition à Toulouse, un ami et moi avons développé et programmé un robot autonome de course fonctionnant à l'aide d'une Raspberry Pi, une Arduino Uno et une Pi Camera. Nous avons utilisé Python, C++ et un réseau de neurones pour le traitement d'images, fonctionnant en temps réel à plus de 60 images/s (FPS)!

# data[].attributes.attachment_link.readable_text
Laurent Taupin - Ingénieur en chef Véhicule Autonome chez Renault
Marie-Anne Mittet - Spécialiste Métier Localisation (LIDAR) chez Renault
Yves Page - Chef de projet Expérimentation Véhicule Autonome chez Renault
Eric Debernard - Chef de projet Innovation Véhicule Autonome chez Renault
Lucia Chavez-Paz - Responsable Communication Innovation chez Renault
François Stephan - Directeur Général Adjoint du laboratoire SystemX
Alain Boulaire - Historien à l'IFM
Laurent Rabier - Responsable aviation au musée de l'air et de l'espace
Arnaud Passalacqua - Historien et chercheur au LIED
Fawzi Nashashibi - Directeur de recherches à l'INRIA
Yann Gourhant - Expert technique chez Access Drones
Florent Kirchner - Chef du laboratoire pour la sécurité et sûreté du logiciel au CEA-List
Alexandre Carbon - Ingénieur-chercheur au CEA-List
Céline Lipari - Responsable éditoriale du site internet www.cea.fr
Quentin Bauduin - Chargé de communication au CEA
Elisabeth Lefèvre-Rémy - Responsable communication au CEA-List
Yannick Bonhomme - Responsable partenariats industriels au CEA-List
Eric Lemaître - Adjoint du directeur du CEA-List en charge des affaires institutionnelles
Olivier Héron - Responsable partenariats industriels au CEA-List
Alexandre Douin - Responsable Affaires Industrielles au CEA-List
Et toutes les équipes du CEA-List
Au fil du temps
Représentation du compas de type Ktp115 " kleiner Normalkompass " (standard petit mod.) © Cybermusée des Boussoles et Compas - tous droits réservés

Vue en éclaté d'un gyrocompas mécanique de type Anschütz © Stahlkocher - CC-BY-SA

Image du pilote automatique CPT © 2018 CPT Autopilot Inc. - tous droits réservés

" Islande - 2009 " © Communautés européennes, 2009 - tous droits réservés

" Pilote St 1000 " © issu de la chaine Youtube Orangemarine © SEA 2 - tous droits réservés

" ProNav™ Angler | GPS Autopilot for Trolling Motor | Control Your Boat via Smartphone and Tablet " © 2018 · ProNav Marine - tous droits réservés

" 1964 New York Worlds Fair " © King Rose Archives - tous droits réservés

" Fully automation of the Paris metro line 1 " © Siemens AG, 2012 - 2018 - tous droits réservés

" MF 77 - Lecteur de grecque " © Greenski - CC-BY-SA

" GrecqueRATP " © ZeMeilleur - CC-BY-SA

" Port Liner on Kobe Bridge " © 663highland - CC-BY-SA

" The Metro System in Lille, France - 2016 " © Tim Migliore - tous droits réservés

Photo de la base d'essai d'ARAMIS, à l'emplacement de l'ancienne gare de Grenelle-marchandises à côté de la gare du Boulevard Victor en 1986. © Smiley.toerist - CC-BY-SA

" Métro de Paris: ligne 14, toutes les stations " Issu de la chaine Youtube de Mathieu J - tous droits réservés

Extrait du numéro Septembre 1921 du magazine " Radio News "

" First Automatic Transmission: Hydra-Matic " Motoring's Magic Carpet " 1941 Oldsmobile " issu de la chaine Youtube de Jeff Quitney (domaine public)

Photo du premier prototype de véhicule autonome © courtesy of National Institute of Advanced Industrial Science and Technology - tous droits réservés

" Autopilot Full Self-Driving Hardware (Neighborhood Short) " © Tesla, Inc. - tous droits réservés

Présentation du concept Pop.Up © Airbus - tous droits réservés

Photo d'un des véhicules du PRT ULTra sur une voie de test © Skybum - CC-BY

" AVIGNON TGV " © issu de la chaine Youtube TheGare360 - tous droits réservés

Photo d'un A landing Delta Air Lines Boeing 767-400ER en phase d'aterrisage © Konstantin von Wedelstaedt - tous droits réservés
Ailleurs c'est comment
" 5 EXPERIMENTS WITH LASERS THAT WILL BLOW YOUR MIND !! " issu de la chaine Youtube de Experiment at Home - tous droits réservés

" Driving in the Rain 60mins " Sleep Sounds " issu de la chaine Youtube de Yogaduke © 2018 TexasHighDef.net - tous droits réservés

" Arc de Triomphe traffic circle madness Paris, France " issu de la chaine Youtube de MadLens - tous droits réservés

" Comment réussir un créneau " © MonPermisVoiture.Com - tous droits réservés

Certaines images sont fournies par le Groupe Renault - tous droits réservés

Visuel de fond des Grandes Questions tiré du film Christine, réalisé par John Carpenter © Columbia Pictures - tous droits réservés
Visuel de fond du sondage tiré de la série K-2000, série créée par Glen A. Larson © Universal Television / Elephant Films - tous droits réservés

© L'Esprit Sorcier - Novembre 2017

# data[].attributes.attachment_link.title
La voiture autonome - L'Esprit Sorcier - Dossier #29

# data[].attributes.attachment_link.description
Fred Courant et l'équipe de C'est pas Sorcier 2.0 nous conduisent sur les routes du futur, à la découverte de la voiture autonome...

# data[].attributes.attachment_link.title
Autonomous Racing Car - Raspberry Pi + Arduino + Machine Learning