Drone Reaper
Drone d'exploration
Drones terrestres
AR Drone

Notre drone


La problématique


La problématique de notre TPE consiste à construire un drone (ou un robot piloté à distance).
Mais c'est un vrai défi que de penser à tout dès le début de la construction, qu'il s'agisse du corps du drone, de sa programmation, ou encore de l'architecture réseau permettant de le piloter à distance.


Construire le châssis


Au départ, nous projetions de construire seulement un véhicule capable de se déplacer grâce aux informations qui lui seraient transmises à l'aide d'un joystick. Nous avons donc réalisé un premier prototype de châssis en Lego, que nous avons modifié par la suite afin de le rendre plus robuste. Sur ce châssis, nous avons posé des moteurs et une brique Lego Mindstorm NXT. Dès que nous avons estimé que nous avions en main un châssis de drone suffisamment solide, nous avons entamé la phase programmation du véhicule.


Les choix de programmation


Pour programmer ce drone, nous avons dû faire un choix entre différents langages de programmation que supportait notre brique NXT. Nous avons opté pour le Python, c'est le langage que nous maitrisions le mieux à l'époque. Des développeurs ont déjà mis au point une importante bibliothèque « Python-NXT » qui nous a grandement facilité la tâche !
Après des heures de recherche et d'apprentissage, nous avons appris les bases de cette bibliothèque et ainsi nous avons pu entamer le développement de notre programme. Mais que devait-il faire ce programme ?

Le principe est assez simple à expliquer dans un vocabulaire qui s'adresse à tous :
Ce que nous voulons c'est, dans un premier temps, récupérer les informations transmises par le joystick, puis les analyser, et enfin envoyer les commandes correspondantes aux moteurs du drone pour qu'ils tournent du nombre de degrés voulu avec la puissance demandée : ainsi notre drone se déplacera à l'aide d'un joystick.


Le besoin de caméras


Nous nous sommes vite rendu compte qu'un drone sans caméra, cela ne serait pas très pratique ni très utile : nous avons alors pensé à lui ajouter des caméras.
Nous avons alors installé des radios caméras sur des points stratégiques du drone mais nous avons été confrontés à des problèmes de portée. En effet, en éloignant le drone de 20 mètres des récepteurs des caméras, les images commençaient à se dégrader. C'est pour cette raison que nous avons opté ensuite pour des caméras WI-FI qui nous ont permis d'augmenter significativement la distance d'éloignement de notre drone.
Les caméras sont connectées à un réseau (A) cela permet donc à n'importe quel ordinateur relié à ce réseau (A) d'accéder aux images transmises par les caméras du drone.
Les caméras utilisées sont celles d'une tablette tactile et d'un téléphone portable.


Le besoin d'un bras articulé


Une fois que le drone est devenu pilotable, nous avons ressenti le besoin de lui greffer sur le corps un bras articulé pour lui conférer davantage de fonctions : un véhicule qui se déplace grâce à un joystick, sans être relié par un fil, cela ressemble fortement à une voiture télécommandée et cela n'a rien de très original.
Nous nous sommes posé plusieurs questions portant, par exemple, sur le nombre d'articulations dont nous aurons besoin, le type d'objet qu'il doit être capable de saisir. Finalement, nous nous sommes mis d'accord sur un petit cahier des charges de ce que notre "bête" pourrait soulever. Il était clair que nous n'attendions pas de notre bras qu'il puisse soulever plus de quelques kilogrammes, cela reste tout de même qu'un petit jouet en Lego.





Nous avons, une fois encore, mis au point un premier prototype auquel nous avons apporté de nombreuses modifications avec le temps afin d'arriver au résultat final.

Le principe de ce bras est, lui aussi, assez simple : il y a trois moteurs au total qui lui sont exclusivement dédiés. Pour bien comprendre, le plus simple est de regarder le schéma ci-dessous.




Avec ce bras nous pouvons saisir un grand nombre d'objets de formes très diverses. Nous n'avons volontairement pas posé le bras sur un plateau pivotant car cela aurait nécessité l'emploi d'un moteur de plus, donc la consommation électrique totale du drone aurait augmenté et par conséquent, son autonomie aurait diminué. De plus, il suffit de faire tourner le drone sur lui-même et la fonction est remplie.

Pour lire le dossier complet sur les étapes de conception du bras, cliquez ici


L'alimentation électrique


Au fil de nos manipulations, les batteries du drone se sont vite trouvées déchargées et, pour une des deux briques NXT dont nous disposions, il ne s'agissait pas de batteries rechargeables mais de simples piles. Cela revenait vraiment cher de renouveler, à chaque séance de TPE, les six piles LR6 nécessaires. Il a donc fallu trouver une solution alternative. Malheureusement, les batteries rechargeables du même format ne pouvaient pas faire l'affaire car leur tension ne s'élève qu'à 1,2 volt et non pas 1,5 volt comme les piles. Cette différence peut paraitre infime mais multipliée par six cela fait 1,8 volt de moins que ce que la brique Lego requièrt pour démarrer.

Pour pallier cette difficulté, la première solution, également la plus simple, était d'acheter un bloc de batteries rechargeables spécialement conçu par Lego pour le NXT, mais cela nous aurait coûté environ soixante euros et, à ce prix-là, il était encore plus économique de renouveler les piles jusqu'au terme du TPE !
La seconde solution et aussi la plus réaliste était d'utiliser une batterie rechargeable dont nous disposions, provenant d'une ancienne voiture télécommandée et qui délivre une tension de 9,5 volts. Cela offre en outre l'avantage de suralimenter notre NXT de 0,5 volt sans présenter de risque pour les moteurs.
Nous avons également remplacé le bloc de batteries rechargeables que nous avait prêté notre lycée par une autre batterie de 9,5 volts pour être plus autonome vis-à-vis du lycée.

A ce stade du projet notre drone était capable de se déplacer dans toutes les directions en suivant les instructions transmises par le joystick et aussi d'attraper des objets en tous genres posés au sol.


La problématique réseaux


Il nous restait tout de même deux problèmes à régler, le premier était celui des caméras WI-FI. Nous savions que nos tablettes et téléphones pouvaient faire office de caméra sans fils mais le petit souci était de trouver un réseau WI-FI auquel les connecter. Le lycée était un peu réticent à l'idée de nous donner l'accès au réseau WI-FI du lycée, ce qui est compréhensible. Il a donc fallu créer nous-même notre propre réseau WI-FI auquel nous avons connecté nos tablettes et téléphones.
Pour ce faire, nous avons connecté un routeur WI-FI à un ordinateur spécifique qui fera office de serveur webcam pour que les appareils équipés de WI-FI puissent s'y connecter en mode sans fil.

Le deuxième petit souci était la portée de notre drone. Nous ne pouvions contrôler notre drone que dans un rayon d'une quarantaine de mètres autour de lui. Un drone qui est limité à quarante mètres de déplacement ce n'est pas un drone ! Nous nous sommes donc fixé le but de pouvoir contrôler notre drone depuis n'importe quel ordinateur relié au réseau du lycée, qu'il s'agisse d'un poste se trouvant au CDI, dans le bâtiment des primaires, depuis l'infirmerie bref, où que nous soyons dans le lycée.

Nous n'étions plus limités par la portée des caméras radios car nous avions opté pour des caméras WI-FI, notre limite était la portée du Bluetooth (l'ordinateur envoie les commandes au robot par Bluetooth).

Nous avons donc décidé de nous servir du très bon réseau Ethernet installé partout dans notre lycée pour passer nos commandes au robot ! Cela mérite un peu plus d'explication :

Pour l'exemple, nous allons dire que nous voulons piloter notre drone se trouvant aux alentours des salles de physique, depuis le CDI du lycée, ce qui représente une distance d'environ 110 mètres.

Pour piloter le drone nous sommes assis devant un ordinateur (A) du CDI que nous aurons pris soin de démarrer sous linux pour faciliter les choses. Cet ordinateur est connecté au réseau général Ethernet du lycée. Notre joystick est connecté à cet ordinateur du CDI, et se charge de transposer les mouvements de la main en informations électriques exploitables par un appareil électronique.
Puis l'ordinateur (A) du CDI envoie les informations qu'il a reçues du joystick à un autre ordinateur (B) qui se trouve dans les salles de physiques, proches du drone.
Ce dernier traite les informations qui lui sont envoyées par l'ordinateur (A) du CDI pour les transformer en ordres pouvant être interprétés par les briques NXT du drone. Lorsque l'encodage des informations a eu lieu, l'ordinateur (B) transmet, par Bluetooth, les ordres aux briques NXT du drone qui, à leur tour, les fournissent aux moteurs.





La programmation du drone.


Nous avons commencé par concevoir un premier programme permettant de piloter le drone à partir d'un ordinateur dédié : c'est le mode "local".
Puis nous avons réalisé un second programme afin de piloter le drone depuis n'importe quel ordinateur se trouvant sur le réseau du lycée : c'est le mode "réseau".
Nous avons même étendu et testé notre programme "réseau" pour une utilisation de type "externe", c'est-à-dire permettant de contrôler le drone à très grande distance, depuis n'importe quel ordinateur connecté au WEB.



Programmation du drone (local)



  1. Import de la bibliothèque « python-nxt » et la bibliothèque « python-pygame »

  2. On se connecte à la brique « 1 » qui gère le bras articulé

  3. On se connecte à la brique « 2 » qui gère les chenilles

  4. On définit les moteurs du robot (déplacement et bras)

  5. On initialise le joystick (pygame)

  6. On fait une boucle à l'infinie temporisée par un « timer » qui permet d'éviter que l'ordinateur ne s'emballe

  7. Dans cette boucle on récupère les informations envoyées par le joystick que l'on transmet au robot

  8. Il existe deux modes : « DEPLACEMENT » et « FIXER »
    L'un permet au robot de se déplacer comme son nom l'indique, l'autre, de fixer le robot pour utiliser le bras articulé

  9. En cliquant sur un bouton du joystick on commute du mode « DEPLACEMENT » au mode « FIXER »

  10. Lorsque l'on est en DÉPLACEMENT les informations envoyées par le joystick (axes : x,y) sont envoyées à la brique « 2 » qui gère les moteurs reliés aux chenilles

  11. Lorsque l'on est en FIXER, c'est la brique « 1 » qui reçoit les informations relatives au bras articulé (axes : x,y,z).






Les codes sources de nos deux
programmes (serveur et client) sont téléchargeables ci-dessous :

droneServeurBRAS_etCHENILLES.py droneClientBRASetCHENILLES.py


Programmation du drone (Réseau)



Le principe est exactement le même que celui du contrôle en local à un détail près !
Les informations envoyées aux briques ne proviennent pas directement du joystick mais d'un ordinateur client (ordi2) relié au serveur (ordi1), qui envoie les coordonnées récupérées par le joystick (ordi2).

Gestion réseau pour le pilotage à distance

L'ordinateur 1 est le « serveur robot »
L'ordinateur 2 est le « serveur webcam »
L'ordinateur 3 est le « client »

L'ordinateur 1 est connecté à un réseau A et à un réseau B. C'est le serveur de notre drone.
L'ordinateur 2 est le serveur de caméras (relié à ordinateur 1 qui est un de ses clients), il est le serveur du réseau B.
Les caméras sont connectées au réseau B par WIFI.
L'ordinateur 3 est connecté au même réseau A que le serveur de notre drone (ordinateur 1)

Le joystick est connecté à l'ordinateur 3


La mise en commun :

Le joystick est connecté à l'ordinateur 3 qui envoie les coordonnées à l'ordinateur 1 par le réseau A, l'ordinateur 1 envoie les informations reçues au drone par Bluetooth.

Comment les images de la tablette et du téléphone sont-elles transmises ?

Les deux appareils sont connectés au « serveur webcam » (connexion de type WI-FI), à partir de ce moment-là, les caméras du téléphone et de la tablette sont accessibles depuis l'ordinateur 2 ou autrement nommé le serveur webcam. Il suffit de visiter, avec un navigateur web tel que Mozilla Firefox, Internet Explorer ou encore Opera, l'URL correspondant à l'adresse IP locale de la tablette par exemple, sur le réseau généré par l'ordinateur 2 (WI-FI), suivi du port du serveur webcam installé sur la tablette. En résumé, en entrant une adresse semblable à cela : « http://192.168.0.24:8080 » dans un navigateur web, nous voyons les images transmises en direct par l'un des deux appareils. Pour voir les deux webcams il suffit donc d'ouvrir une deuxième fenêtre.

Oui mais vous allez nous dire, cela ne nous intéresse pas, ce que l'on veut savoir, c'est comment visionner ces images depuis un ordinateur bien plus éloigné de ces caméras.
La méthode est là encore très simple, il suffit de se placer devant un ordinateur d'une autre pièce, démarré sous Ubuntu (LINUX). Il faut alors ouvrir un terminal, c'est une fenêtre qui fait peur la première fois qu'on la voit mais qu'on a très vite envie de revoir !




Grâce à cette fenêtre noire, il est possible de se connecter à l'ordinateur 1 en entrant une commande comme celle-ci : « ssh -X utilisateur@192.168.0.25 »
Avec cette commande, on demande à l'ordinateur sur lequel on se trouve de se connecter à l'ordinateur qui possède l'adresse IP (locale) suivante : 192.168.0.25 et d'ouvrir la session « utilisateur ».
Le grand X veut dire que l'on se connecte avec le support graphique, il est important de bien se souvenir de cela !

Tout cela semble peut-être fastidieux mais il est pourtant nécessaire de l'expliquer.

En réponse, l'ordinateur 1 nous informe qu'il nous reçoit 5/5 mais qu'il a besoin d'un mot de passe ; on entre le mot de passe et là, on a pratiquement accès à tout ce qui se trouve sur l'ordinateur 1 dont notre navigateur web ! Le fait d'avoir écrit le grand « X » dans la commande SSH nous permet d'être en mesure de démarrer le navigateur web du serveur robot (ordinateur 1) sur notre ordinateur 3 (client).
Il faut maintenant taper tout simplement « firefox » dans le terminal et à ce moment-là, la fenêtre s'ouvre.
Il ne nous reste plus qu'à rentrer l'adresse IP de la tablette et du téléphone dans l'URL et le tour est joué.

Mais comment se fait-il que l'on puisse se connecter aux caméras alors que l'on se trouve sur le réseau du serveur lycée ? En fait, nous sommes connectés simultanément à deux réseaux, l'un étant le serveur du lycée, relié par un câble Ethernet et l'autre, étant le serveur webcam relié par WI-FI. Il est donc parfaitement possibles d'accéder aux caméras depuis l'ordinateur 1, donc depuis l'ordinateur 3 (client).

Lors de l'avant dernière séance de TPE, nous avons pu surveiller les couloirs du deuxième étage du lycée, depuis une salle de physique du premier étage ! Nous étions tous les trois satisfaits de voir notre projet abouti.