Application Android

Présentation de l’environnement de développement

Le développement d’une application Android se fait en utilisant le langage java, qui est un langage orienté objet, ce qui permet une programmation plus claire et organisée pour ce genre de développement. Nous avons effectué la programmation en utilisant l’environnement de développement Eclipse. Cet IDE est tout à fait adapté à la programmation sous Android du fait de son intégration du SDK Android. En effet, le SDK Android, qui est la bibliothèque qui permet de programmer en utilisant les composants Android, ainsi que le matériel, comme la caméra ou les accéléromètres, est parfaitement interprété par Eclipse.

Différences entre tablette et téléphone

D’autre part, nous avions pour projet de développer une application pour tablette, ainsi qu’une autre pour téléphone. Nous avons disposé des deux appareils car la tablette était une tablette personnelle, et de plus une des raisons pour lesquelles nous avions choisi ce projet. Quant au téléphone, il nous a été fourni par l’IUT, qui l’a acheté spécialement pour ce projet, et il s’agit de l’appareil, et de l’application correspondante, qui resteront à l’IUT pour les étudiants qui poursuivront ce projet.

Concernant l’application elle-même, la différence principale vient de la différence de version entre ces deux Android. Nous avons tout d’abord décidé de développer sur la tablette, qui est en version 3.1, avec une disposition graphique spécifique, ainsi que des widgets uniquement disponibles pour cette version. Quand nous avons porté cette application sur le téléphone, qui possède une version 2.2.3, nous nous sommes alors rendu compte de ce problème. Nous avons alors décidé de reprendre le code lui-même, car le traitement des données reste le même, et de développer une interface graphique différente. Et à partir de là, nous avons séparé les deux applications, étant donné qu’uniquement le téléphone restera à l’IUT.

Figure 8 : Application de la tablette Samsung Galaxy Tab 2

Figure 9 : Application du Samsung Galaxy S 2

Fonctionnement de l’application

Le fonctionnement de l’application est simple, elle reçoit les informations liées à l’environnement, c’est-à-dire l’orientation du terminal (tablette ou téléphone), vers l’avant ou sur les côtés, ainsi que l’altitude et la commande de rotation à plat, par la pression sur des boutons. Ces informations sont récupérées 50 fois par seconde puis envoyées à l’aide d’une trame UDP au module Wi-Fi. Les trames sont composées d’un caractère pour le type d’information suivies de « : » et enfin de la valeur calculée en virgule flottante.
Exemple pour envoyer une altitude : « Z:2.38 ».

Une fois ces informations réceptionnées par le drone, il les traite et les retourne à l’application qui affiche l’état du drone à l’écran. De plus, nous avons intégré l’affichage du flux vidéo récupéré depuis la caméra embarquée, et nous pouvons également changer l’adresse IP à laquelle l’application se connecte, afin de pouvoir changer de cible (drone réel ou simulateur) facilement.

Figure 10 : Fonction onSensorChanged de l’application Android

Dans le code précédent, nous pouvons voir un exemple de ce qui se fait régulièrement dans la programmation Android, c’est-à-dire la définition d’une méthode d’un objet lors de l’instanciation de celui-ci.

Ici, l’objet SensorEventListener sert à « écouter » les accéléromètres. Ainsi, la méthode onSensorchanged, qui prend en paramètre un SensorEvent, c’est-à-dire ce que l’on capte des accéléromètres, va permettre d’effectuer un traitement avec chaque valeur que l’on récupère des accéléromètres. De plus on envoi également la valeur de l’altitude et de la rotation à plat (yaw), qui sont tous deux des attributs de l’application, et qui sont changés grâce aux boutons de l’application. L’altitude étant limitée de 0 à 9, car il n’y a pas de hauteur négative, et d’autre part pour ne pas pouvoir faire monter le drone indéfiniment.

Figure 11 : Fonction periph_write de l’application Android

La fonction ci-dessus permet d’envoyer l’information passée en paramètre, expliquée dans la partie précédente, au travers d’un paquet qui correspond à une trame, que l’on envoie par socket UDP.

Cette fonction crée une chaine de caractère avec l’information à envoyer, mais avant de pouvoir mettre tout cela dans le paquet à envoyer il faut tout d’abord la transformer en tableau d’octets. Ensuite on construit le paquet avec l’information, sa taille, l’adresse IP à laquelle l’envoyer, ainsi que le port sur lequel l’envoyer. Et enfin, on envoie ce paquet grâce à la socket.

Autonomie

Pour cette partie du projet nous avons eu à travailler en totale autonomie. En effet, nos professeurs ne maitrisant pas le sujet et n’ayant pas encore eu les cours de java, nous avons dû chercher sur internet des tutoriels ainsi que des astuces sur de nombreux forums pour régler nos problèmes. Nous avons également beaucoup utilisé la documentation Android, sur le site officiel, qui offre des exemples d’utilisation de certaines fonctions, ainsi que la liste complète des méthodes disponibles.

Gestion de la caméra embarquée

Configuration

La caméra embarquée sur le drone est une caméra IP Wi-Fi de marque Dlink. La configuration de la caméra se fait grâce au routeur destiné au projet, le même qui permet l’échange de données avec le module Wi-Fi présent sur le drone. La configuration pour pouvoir utiliser cette caméra se fait au travers de l’interface web présent sur la caméra. Il a donc fallu brancher la caméra en Ethernet au routeur, et ainsi nous avons pu configurer la connexion.

Fonctionnement

Nous avons intégré la gestion du flux vidéo dans l’application Android afin d’afficher en temps réel les images. Cet affichage peut permettre notamment de pouvoir contrôler le drone à distance sans avoir une vision directe de celui-ci.

La caméra enregistre continuellement une image dans sa mémoire, le but est alors de télécharger cette image et de l’afficher à l’écran. Afin d’avoir un compromis entre fluidité d’affichage et fluidité de l’application, celle-ci récupère 20 images par seconde.

tab.jpg (54 KB) Amaury Bendaoud-Joubert, 03/24/2012 11:54 AM

tel.jpg (47.9 KB) Amaury Bendaoud-Joubert, 03/24/2012 11:54 AM

codean1.png (13.6 KB) Amaury Bendaoud-Joubert, 03/24/2012 11:56 AM

codean2.png (17.8 KB) Amaury Bendaoud-Joubert, 03/24/2012 11:57 AM