IMA3/IMA4 2018/2020 P21 : Différence entre versions

De Wiki de Projets IMA
(Semaine 1)
(Semaine 1)
Ligne 523 : Ligne 523 :
 
Crazyradio PA :  
 
Crazyradio PA :  
 
https://www.bitcraze.io/crazyradio-pa/
 
https://www.bitcraze.io/crazyradio-pa/
 +
 +
Battery charger :
 +
https://www.bitcraze.io/battery-charger-500mA/
  
 
===Semaine 2===
 
===Semaine 2===

Version du 8 novembre 2019 à 17:17


Présentation générale

Description

De nos jours, les drones sont présents dans de nombreux domaines : industrie, agriculture, sports, loisirs… etc. Dans les airs ou dans la mer, ils ont tous des buts différents selon leur utilisation.

Nous allons nous concentrer sur les drones de développement. Ils sont utilisés dans la recherche, l’éducation et par les amateurs de robotique. Ils présentent de nombreux enjeux, comme la commande automatique, l’évitement d’obstacles, la détection d’intrus.

L’ouverture à la programmation et à la modification hardware/software peut être un frein dans la mise en place d’une application d’un drone de développement. C’est pourquoi nous allons nous concentrer sur un drone open source au niveau hardware et software.

Plus particulièrement notre projet se servira du drone Quadricopter Crazyflie 2.0.

Objectifs

Le fil directeur de notre projet est le contrôle d'un drone sous les facettes d'informatique, microélectronique et automatique. Au niveau informatique, nous nous concentrerons sur le développement d'algorithmes de déplacement et d'évitement d'obstacle. Pour la partie microélectronique nous nous pencherons sur le fonctionnement des moteurs, des cartes électroniques et des capteurs. Enfin nous nous servirons de l'automatique pour réguler en vitesse et en position de notre drone.

L'objectif final est de développer le drone mis à notre disposition afin qu'il puisse se déplacer point d'un A point à un B tout en étant stable. Au cours de son déplacement il devra transmettre sa position à l'utilisateur.

Dans un premier temps, nous étudierons le fonctionnement général d'un drone à 4 branches. Ensuite, nous allons étudier les différentes commandes à envoyer au drone afin de le déplacer selon l'axe voulu. Puis, du côté pratique nous allons asservir une position statique à notre drone qu'il devra maintenir quelle que soit la perturbation (vent, etc). Dans un second temps, nous développerons les fonctions de déplacement dans l'espace. Enfin, nous lui donnerons une trajectoire qu'il devra respecter tout au long de son parcourt.

Analyse du projet

Positionnement par rapport à l'existant

Caractéristiques principales du drone Quadricopter Crazyflie 2.0®

Crazyfly.jpg

Radio:

  • amplificateur radio de 20 dBm testé à plus de 1 km (portée à vue) avec le Crazyradio PA
  • bluetooth Low Energy compatible iOS et Android
  • radio compatible avec Crazyflie et Crazyradio


Microcontrôleurs:

  • STM32F405, microcontroleur principal (Cortex-M4, 168 MHz, 192 KB SRAM, 1 MB de mémoire flash)
  • nRF51822, gestion alimentation et radio (Cortex-M0, 32 MHz, 16 KB SRAM, 128 KB de mémoire flash)
  • EEPROM 2 KB


Connecteur USB:

  • chargeur LiPo integré avec trois modes (100 mA, 500 mA, 980 mA)
  • utilisation en USB OTG possible


Capteurs:

  • gyroscope 3 axes (MPU-9250)
  • accéléromètre 3 axes (MPU-9250)
  • magnétomètre 3 axes (MPU-9250)
  • capteur de pression haute précision (LPS25H)


Chiffres clés
  • Poids: 27 gr
  • Dimensions: 92 x 92 x 29 (de moteur à moteur et avec le support)
  • 7 minutes de temps de vol maxi avec la batterie originale
  • 40 minutes de recharge avec la batterie originale
  • charge maxi recommandée: 15 gramme


A noter que l'ensemble de l'architecture matérielle et logicielle (hardware/software) est accessible sur le wiki (hardware) et sur le git (software) indiqués dans la bibliographie.

Analyse du premier concurrent

Constructeur : DJI et Ryze

Modèle : Tello Drone EDU

Dji tello drone etu.png


Initialement conçu pour l'enseignement, le tello Drone a de nombreux atouts. Pour seulement 100 euros, nous avons un drone compact, résistant (protection des hélices), et programmable. Il est compatible avec scratch, Python et Swift. Pour une utilisation avancée, on peut même embarquer ROS et utiliser le SDK. Il dispose aussi de petites balises pour se repérer dans l'espace et être contrôlé en essaim.


Cependant, nous ne pouvons pas nous en servir dans notre projet, car ni le hardware, ni le software ne sont ouverts. Nous ne pouvons donc pas modéliser efficacement les moteurs, ni même faire une étude approfondie au niveau hardware. En fait, il s'agit plutôt d'un drone de programmation du fait de sa compatibilité avec plusieurs langages de programmation, on ne peut pas s'en servir dans un projet à dominante "automatique".

Analyse du second concurrent

Constructeur : Pixhawk

Modèles : Pixhawk 4 et Pixhawk mini

Pixhawk4.jpg


Pixhawk est un projet open source visant à developper un contrôleur de vol libre et indépendant. De nombreux projet aussi bien dans la recherche que dans le monde professionnel se servent d'une carte de vol Pixhwak. Cette carte, très réputée, est notamment compatible avec les projets open source PX4 (Dronecode) et Ardupilot. Dronecode et Ardupilot proposent des outils libres pour simuler, contrôler et analyser son drone tout au long de ses déplacements. Dans un projet comme le notre, Dronecode semble être adapté tant les ressources et la documentation qu'ils proposent sont fournis.


Cependant, bien que nous avons effectuer de nombreuses recherches sur Dronecode, que nous avions conclu qu'il fallait une carte Pixhawk, nous avons finalement abandonné cette piste.


En effet, de notre point de vue, il nous aurait fallu un groupe supplémentaire qui aurait assembler notre drone, pendant que l'autre se penche sur la partie automatique. Un drone embarquant une carte Pixhawk avec PX4 installé dessus nécessite une équipe focalisée sur le hardware. En effet, en plus de la carte, il faut commander le châssis, les moteurs, les antennes, la télécommande, la baterrie, les chargeurs... etc. Nous avons préféré partir sur un drone 'ready to fly', c'est-à-dire déja assemblé et en état de marche.

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

Notre projet visant à asservir en position un drone de façon autonome, il existe de très nombreux scénarios d’usage pouvant s’inscrire dans notre projet.Par exemple, on pourrait imaginer un agriculteur souhaitant contrôler l’état de ses arbres. On pourrait installer des petites balises sur chacun des troncs, et effectuer un vol autonome afin de filmer chacun de ces arbres. L’agriculteur n’aurait qu’à observer la vidéo, sans avoir à se déplacer dans tout le verger. Notre drone étant asservi en position, il décollera et se maintiendra à une altitude supérieure aux arbres (par exemple 3 mètres) et reliera tous les points indiqués par les balises pour ensuite revenir à son point de départ.

Réponse à la question difficile

Le drone étant livré monté, prêt à l'emploi, qu'est ce que vous apporter en plus par rapport à ce qui est déjà possible de faire avec ce drone ?

Notre but est de développer une suite d’algorithme de contrôle automatisé de notre drone. Pour ce faire, nous allons étudié le fonctionnement d’un drone à quatre hélices. Tout d’abord, nous allons isoler puis modéliser un moteur brushless. Ensuite nous allons modéliser les quatre moteur, ensemble. Enfin, sur un banc de test, nous allons envoyer nos commandes sur les quatre moteurs afin de réaliser 4 mouvements élémentaires d’un drone 4 hélices.

Bibliographie et webographie

https://www.gotronic.fr/art-quadricopter-crazyflie-2-0-110990440-23791.htm

https://github.com/bitcraze

https://wiki.bitcraze.io/projects:crazyflie2:index

Préparation du projet

Notre groupe est constitué d'une seule équipe de 3 personnes.

Cahier des charges du groupe

Tout d’abord notre drone doit être capable de décoller, d’atterrir et de maintenir une position fixe. Il doit être capable de réguler la vitesse de ses moteurs pour se maintenir en altitude, en fonction des contraintes extérieures (comme le vent) qui lui seront imposées. Dans un second temps, il doit pouvoir se déplacer dans l’espace en se repérant via des balises radio. De la même manière, il devra pouvoir exécuter ses déplacements en ayant une précision (à définir) et une marge de résistance aux contraintes physique (à préciser). Par exemple, il devra être capable de se stabiliser et effectuer son vol autonome, avec une précision de 10 centimètres, et un vent limite de 30 km/h.

Choix techniques : matériel et logiciel

Afin de mener à bien notre projet, nous avons besoin de :


  • Quadricopter Crazyflie 2.0 : 2
  • Adaptateur debug pour Crazyflie : 2
  • Moteur pour Crazyflie 2.0  : 4
  • Jeu d'hélices pour Crazyflie : 1
  • Jeu de 4 supports moteurs : 1
  • Module Crazyradio PA 114990112 : 2
  • Loco positioning deck : 2
  • Flow deck v2 : 2
  • 240mAh LiPo battery including 500mA USB charger : 2
  • SD-card deck : 2
  • Loco positioning node : 4


Au niveau logiciel, nous avons besoin de :

  • Betaflight
  • Matlab - Simulink

Liste des tâches à effectuer

A ce stade, nous avons définis notre projet en plusieurs axes :

  • se documenter sur le fonctionnement d’un drone 4 hélices, appelé aussi quadrotor ou quadcopter
  • modélisation d’un moteur brushless
  • modélisation des quatre moteurs
  • envoie des commandes sur les moteurs sur un banc de test

Calendrier prévisionnel

Diagramme de Gantt de notre projet :

Diagramme de gantt p21.png

Réalisation du Projet

Projet S6

Semaine 4

Tout d'abord nous sommes documentés sur les fonctionnalités du In tel Aero ready To Fly. Embarquant une carte Pixhawk, nous pouvons nous servir de Dronecode ou bien d'Ardupilot afin d'effectuer notre vol autonome. Nous avons une préférence pour Dronecode.


Qu'est-ce que Dronecode ?


Dronecode est une plateforme Open Source lancée par la fondation Linux. Elle fournit l'ensemble des outils nécessaire à la réalisation d'une application utilisant un drone. On dispose ainsi d'un contrôleur de vol (hardware), d'un pilote de vol (software), d'une station de contrôle (typiquement sur ordinateur), et d'une API pour développer notre pilote de vol. Ainsi, on a l'ensemble des outils pour contrôler notre drone, qui fonctionne les uns avec les autres car ils sont entièrement compatibles.


https://www.dronecode.org/about/


Qu'est ce que Ardupilot ?

Ardupilot propose un ensemble à la réalisation d'une application d'objet volant, comme Dronecode. Très répandu Ardupilot est utilisé dans plus d'un million d'appareils dans le monde. Il propose aussi une liste d'appareils compatibles et de logiciel permettant le contrôle et le suivi de notre drone.


http://ardupilot.org/about

Semaine 5

Dans une seconde partie, nous nous sommes concentrés sur les façons d'intéragir avec les valeurs des différents capteurs de l'intel aero. Comme il embarque de nombreux capteurs, ROS semble le plus adapté afin de pouvoir interagir avec les différentes valeurs renvoyés et demandées par nos capteurs.


Qu'est ce que ROS ?

Robot operating system (ROS), est un ensemble d'outils informatiques open source permettant de développer des logiciels pour la robotique. Le principe de base d’un ROS robotique est de faire fonctionner en parallèle un grand nombre d’exécutables qui doivent pouvoir échanger de l’information de manière synchrone ou asynchrone. Afin de répondre à cette problématique, ROS s’appuie sur plusieurs notions:

les nœuds: dans ROS, un nœud est une instance d’un exécutable. Un nœud peut correspondre à un capteur, un moteur, un algorithme de traitement, de surveillance… Chaque nœud qui se lance se déclare au master.

le master: le master est un service de déclaration et d’enregistrement des nœuds qui permet ainsi à des nœuds de se connaître et d’échanger de l’information.L’échange de l’information s’effectue soit de manière asynchrone via un topic ou de manière synchrone via un service.Les topics:un topic est un système de transport de l’information basé sur le système de l’abonnement / publication (subscribe / publish). Un ou plusieurs nœuds pourront publier de l’information sur un topic et un ou plusieurs nœuds pourront lire l’information sur ce topic.Les nœuds envoient ou reçoivent des messages sur des topics.

Les Services: le service en revanche répond à celle d’une communication synchrone entre deux nœuds.

Ros.jpg

Semaine 6

Nous avons contacté RS component et Mousser afin de nous renseigner sur la disponibilité du drone. De plus nous avons effectué le bon de commande suivant :

  • batterie LiPo 4s 4000mah xt60(taille max 150x50x32 mm)
  • le chargeur de la batterie
  • un adaptateur micro usb (mâle) - usb (femelle)
  • un câble micro hdmi - hdmi (mâle-mâle)
  • un câble d'alimentation 12V DC 4A 5.5mm x 2.1mm barrel connector
  • un adaptateur xt60 (femelle) - 1x jack 5.5mm (femelle)
  • un hub usb 4 ports auto-alimenté


Cependant après avoir contacté Mousser, nous nous sommes aperçus que le drone était en fin de vie : cela semble être la raison pour laquelle le drone n'était plus disponible chez certain fournisseur. Tout est à refaire, le wiki, le cahier des charges, le positionnement, etc. Nous avons contacté RS component et Mousser afin de nous renseigner sur la disponibilité du drone : il nous a été conseillé de partir sur un autre modèle.

Semaine 7

Nous nous sommes rencontrés à de nombreuses reprises avec M. Nakrachi, en fin de journée, afin de trouver une solution le plus vite. Il nous fallait à tout pris un drone 'ready to fly', prêt à voler, et embarquant un module de déveleppoment open source. Pour ce faire, seul les drones avec une carte Pixhawk nous semblait adéquat. Cependant peut de drone 'ready to fly' sont disponibles. Ou ils ne sont plus produit, ou bien la carte a été intégré dans des drones avec du matériel non libre et une carte reprogrammé avec du code propriétaire.

Semaine 8

Nous sommes parvenus à trouver un nouveau drone : le Crazyflie 2.0. Nous avons refait notre wiki en conséquence et ajusté notre cahier des charges.


Tout d’abord, posons le cadre de notre étude. Nous allons étudier un drone à 4 rotors. Nous le représenterons selon le modèle suivant :

P21 1.jpg


Les quadrotors existent sous deux formes : en croix et en plus 

P21 2.jpg


Afin de contrôler notre drone, nous allons poser certaines hypothèses quant aux capteurs nous renseignant sur l’état de notre drone en fonction du temps.


Hypothèses : nous travaillons avec un quad rotors, configuration en X

Au niveau des capteurs, on considère que nous avons :

  • Capteurs de distance par ultrasons
  • Caméra pour estimer les mouvements (horizontaux) du drone et sa vitesse
  • Capteur de pression pour l'altitude
  • IMU : Inertial Measurement Unit ; acceleration + gryroscope 3 axes → pour déterminer l'accélération, et l’inclinaison du drone selon les 3 axes du gyroscope


En posant ces hypothèses, nous pouvons analyser notre système de la façon suivante :

P21 3.jpg

Semaine 9

Fonctionnent d’un quadcopter – principe de base

Afin de pouvoir réaliser un mouvement quelconque avec notre drone, il faut tout d’abord entraîner les moteurs opposés dans le même sens et les deux autres en sens contraire. Lors de notre étude, nous nous baserons sur le schéma suivant :

P21 4.jpg


Au niveau du repère, nous adopterons une base cartésienne, de centre 0 :

P21 5.jpg


Enfin, nous utiliserons les coupes suivantes :

P21 6.jpg


Un drone possède 6 degrés de liberté

  • Tangage (pitch) – axe Y
  • Roulis (roll) – axe X
  • Lacet (yaw) – axe Z
  • Avant – arrière (foreward/backward) – axe X
  • Droite – gauche (rigth/left) – axe Y
  • Haut – bas (up/down) – axe Z


Schéma des 6 degrés de liberté :

P21 7.jpg


Au cours de son vol, le drone est soumis à plusieurs forces :

P21 8.jpg


  • la traînée : force formée par le vent relatif, et qui s’oppose au déplacement
  • la portance : force formée par l’incidence de la main et qui pousse la main vers le haut
  • la traction : force formée par les moteurs induisant un mouvement vers l’avant
  • poids : force exercée sur le drone du fait de la force de pesanteur
  • l’incidence : angle formée par l’inclinaison de la main par rapport au vent relatif
  • force de sustentation : composante verticale des résultantes des forces aérodynamiques s’exerçant sur le drone.

En tournant, les hélices vont engendrer une force de sustentation, qui va compenser le poids du drone. Lorsque cette force dépasse le poids du drone, le quadrocopter s’envole.

Semaine 10

Après avoir posé notre cade d’étude, passons à l’analyse des mouvements du drone : quelle commande envoyer aux moteurs pour réaliser un mouvement selon un des 6 degrés de liberté ?


Tout d’abord, intéressons-nous au lacet. Il s’agit d’une rotation du drone selon l’axe Z. Pour ce faire, on augmente la vitesse de deux moteurs tournant dans le même sens. Les deux autres tournent à la même vitesse, mais moins vite.

P21 9.jpg


Ensuite, le drone a la possibilité d’effectuer un roulis. Il s’agit d’une rotation du drone selon l’axe X. Pour ce faire, on augmente la vitesse de deux moteurs situés du même côté du drone. Les deux autres tournent à la même vitesse, mais moins vite.

P21 10 2.jpg


De plus, le drone a la possibilité d’effectuer un tangage. Il s’agit d’une rotation du drone selon l’axe Y. Pour ce faire, on augmente la vitesse de deux moteurs situés sur l’avant ou l’arrière de notre drone. Les deux autres tournent à la même vitesse, mais moins vite.

P21 11.jpg


Après avoir étudié le tangage, roulis, lacet, étudions le mouvement vertical du quadrocopter. Par mouvement vertical, nous entendons un mouvement parallèle à l’axe Z, c’est-à-dire la montée en altitude ou la descente du drone. Pour ce faire, on doit augmenter simultanément et de façon égale les quatre moteur pour gagner en altitude et inversement pour redescendre.

P21 12.jpg


Pour finir, étudions les mouvements horizontaux du quadrotor. Selon la configuration du drone (en « X »ou en « plus » ), et les stratégies de développement des fonctions de déplacement, ces mouvements se réalisent de plusieurs façons. Typiquement, le drone réalisera un lacet (rotation axe Z) et/ou roulis (rotation axe X), suivi d’un tangage (rotation axe Y) puis utilisera ces fonctions pour suivre une trajectoire rectiligne.

Pour ce faire, on augmente la vitesse d’un moteur et on diminue celle du moteur tournant dans le même sens. Les deux autres moteurs restent à la même vitesse, c’est-à-dire entre la vitesse du moteur que l’on a augmenté et celle du moteur que l’on a diminué.

P21 13.jpg P21 14.jpg

Semaine 11

Nous nous sommes ensuite consacré à la modélisation d’un moteur brushless de notre Drone.

Un moteur brushless de notre drone peut être schématisé de cette manière:


Moteur-helice.png

Nomenclature :

  • U : Tension au borne du moteur
  • Rm : Résistance du moteur
  • i : courant traversant le moteur
  • Lm : inductance
  • kfem : coefficient de force électro-motrice
  • wh : vitesse de rotation du moteur
  • Jm : inertie du moteur
  • fem : force électro-motrice


Capture1.PNG


Capture2.JPG

Semaine 12

Grâce à la modélisation faite la semaine d'avant, nous avons pu établir le schéma bloc sur Matlab/Simulink.

Voici le schéma :

Schéma bloc.PNG

Pour pouvoir étudier la réponse de notre système, nous devons disposer des coefficients nécessaire au fonctionnement du moteur.

Coeff et matlab.PNG

Nous fixerons donc le point de fonctionnement I0, qui est le courant d’entrée du moteur, pour pouvoir obtenir les autres points de fonctionnement U0 et omega0. Il faut savoir que l’on a pris à 2,5A qui est une valeur choisis arbitrairement avec comme contrainte la valeur max du courant 4,2A et la valeur min de démarrage du moteur qui est de 0,8A. En consigne, nous lui envoyons une vitesse (200 rad/s « arbitrairement ») et voici la vitesse du moteur en sortie:

RésultatWenGros.PNG

RésultatWzoomer.PNG


On remarque que notre système est en régime apériodique donc que son coefficient d’amortissement est supérieur à 1. Il a un temps de réponse de 1,95s et un temps de monté 1,43s car on a la période qui vaut environ 0,65s (étude du schéma selon une réponse indicielle d’un système apériodique qui ressemble à celui d’un premier ordre). Nous étudierons par la suite le système motorisé complet du moteur pour pouvoir asservir correctement les moteurs pour la deuxième année. Nous avons pour l'instant étudié qu'un seul moteur du drone.


Maquette

Afin de mettre en pratique le comportement des moteurs, nous avons réaliser une maquette. Pour ce faire :

1) nous avons assemblé le crazyflie, comme indiqué sur le site suivant :

https://www.bitcraze.io/getting-started-with-the-crazyflie-2-0/

2) ensuite, nous avons téléchargé l'application Crazyflie Client pour android :

https://play.google.com/store/apps/details?id=se.bitcraze.crazyfliecontrol2&hl=fr

3) on règle les paramètres de l'application de la façon suivante :

Mode pour les controles.png

Parametres p21.png

4) on fixe le drone sur une planche de bois, de taille 12x18cm à l'aide de 4 trombones. Astuce : tordre les 4 trombones de sortes à enrouler avec un crochet les supports moteurs et de l'autre côté ressérer la planche avec une forme de L.

Maquette p21.jpg

NOTE 1 : nous avons marqué l'avant de notre drone avec un peu de rouge, car de loin, il nous est difficle de repérer l'avant du drone

NOTE 2 : notre montage nous permet d'observer, seulement, de manière qualitatif le comportement des moteurs, en effet, nous ne disposons pas d'informations temps-réels sur l'état des moteurs (vitesse, température etc.).


5) on envoie les commandes aux moteurs à l'aide de l'application Afin de bien lire les captures d'écran, faire attention à la ligne "P : R : T : Y : ", situé au milieu de l'écran, ces lettres correpondent respectivement à : Pitch (tangage), Roll (roulis), Thrust (poussée), Yaw (lacet).

5.1) un lacet (rotation axe Z) dans un sens :

Lacet yaw sens1.png

puis dans l'autre :

Lacet yaw sens2.png


5.2) un déplacement horizontal dans un sens

Horizontal sens1.png

un déplacement horizontal dans un autre sens :

Horizontal sens2.png


Pour finir, on obtient :

Capture horizontal sens1.png

commande moteur pour effectuer un déplacement horizontal

Capture horizontal sens2.png

commande moteur pour effectuer un déplacement horizontal

Capture lacet yaw sens1.png

commande moteur pour effectuer un lacet - sens 1

Capture lacet yaw sens2.png

commande moteur pour effectuer un lacet - sens 2

Documents Rendus

Projet S7

Semaine 1

Cette semaine a été l'occasion pour nous de définir les objectifs de notre projet pour le semestre 7. Nous utilisons le Crazyflie 2.0, ainsi que le flow deck et l'antenne USB crazyradio.

Nous allons lors de ce semestre envoyer à notre drone des premières commandes Python en utilisant les librairies cflib. Nous allons aussi expliquer le fonctionnement des différents capteurs qui vont intervenir lors de la réalisation de notre projet. Le but final étant d'effectuer un vol autonome d'un point A à un point B en évitant les obstacles.


Voici les capteurs que nous allons étudier :


Flow deck v2 : https://www.bitcraze.io/flow-deck-v2/

Multi-ranger deck : https://www.bitcraze.io/multi-ranger-deck/

Loco Positioning system : https://www.bitcraze.io/loco-pos-system/

Loco Positioning deck : https://www.bitcraze.io/loco-pos-deck/

Loco Positioning node : https://www.bitcraze.io/loco-pos-node/


Par ailleurs, nous utilisons aussi :


Crazyradio PA : https://www.bitcraze.io/crazyradio-pa/

Battery charger : https://www.bitcraze.io/battery-charger-500mA/

Semaine 2

Semaine 3

Semaine 4

Semaine 5

Semaine 6

Semaine 7

Documents Rendus

Projet S8

Documents Rendus