Programmation sur ArduPilot

IDE et hiérarchie des dossiers.

Pour utiliser les bibiliothèques ArduPilot, il est nécessaire d'utiliser l'IDE Arduino patché par l'équipe de développement de l'ArduPilot.
Il est disponible ici : http://code.google.com/p/ardupilot-mega/downloads/detail?name=arduino-0100-relax-windows.zip&can=2&q
Il faudra donc copier le code nécessaire à l'ardupilot dans le dossier de l'IDE (disponible ici : https://code.google.com/p/arducopter/downloads/detail?name=ArduCopter-2.8.1.zip&can=2&q=)
Il suffit de récupérer le code du SICopter avec les bibliothèques dédiées dans les dépôts et coller le tout dans la racine de l'IDE.
On obtient alors :

Quand vous lancez l'IDE pour la première fois, il faut définir les préférences et surtout le dossier où il doit aller chercher les codes et bibliothèques.
Il suffit d'aller dans File->Preferences puis sélectionner le répertoire racine de l'IDE, comme expliqué sur la capture d'écran suivante.

Ainsi quand vous redémarrez l'IDE, dans l'onglet "File->Sketchbook", vous retrouvez le projet SICopter et les différents tests.
Dans l'onglet "File->Examples", vous avez les exemples d'utilisation des différentes bibliothèques.

Lorsqu'on est connecté en USB, on peut disposer d'un terminal permettant donc une interface sur le port UART0. Pour accéder il suffit de cliquer sur la petite loupe présente sur le schéma ci-dessous.

Lorsqu'un code est chargé sur la carte, il s'exécute automatiquement. Si on ouvre le terminal, le code est entièrement réexécuté.

Programmation Arduino

Un code Arduino basique se compose de 2 fonctions obligatoires: void setup() & void loop().
La première est appelée à l'initialisation du code, soit dès le chargemement du code, soit à l'ouverture du terminal, soit en rebranchant la carte.
C'est donc dans cette fonction qu'on configure les différents périphériques.
La deuxième fonction est comme son nom l'indique une boucle, c'est le main de l'Arduino.
Cette fonction est appelée en permanence.
Il n'y aura donc qu'un seul fichier (avec extension .pde ou .ino) qui contiendra ses fonctions. On pourra décomposer notre code avec l'aide des inclusions.

Du côté de la programmation, Arduino fournit des APIs pour permettre une gestion simplifiée des périphériques et des entrées/sorties.
Vous pouvez trouvez ces références sur le site officiel Arduino : http://arduino.cc/en/Reference/HomePage

On peut également utiliser du code C/C++ en se limitant à des fonctions simples puisqu'on ne peut pas embarquer la glibc complète.
Nous avons donc choisi de développer en C/C++, déjà parce que nous avions des bibliothèques ArduPilot en C++ et à terme, le code devait se porter sur le RX, le C++ permettait donc cette universalité. Un des avantages du développement en C/C++ a été de pouvoir programmer sur un ordinateur afin d’avoir un vrai débuggeur et ensuite d’obtenir un code facilement adaptable au RX ou l’Arduino. Nous suivons ainsi l’objectif de généricité du code.

Implémentation réalisée.

Les codes de haut niveau fournis par les bibliothèques du projet ArduCopter ont permis de faciliter l’utilisation des périphériques intégrés. Une des tâches futures pourrait être de réécrire ces bibliothèques.

Par rapport au projet, nous avons seulement utilisé les bibliothèques fournies pour récupérer les valeurs brutes des périphériques. Nous avons ensuite implémenté tous les algorithmes présentés précédemment ainsi que les classes nécessaires au fonctionnement des nouveaux périphériques comme les sonars et le protocole de communication.

L’implémentation du traitement de la centrale inertielle a nécessité en plus le développement d’une classe de gestion des matrices avec les différentes opérations nécessaires. Quant à la gestion du protocole,le parseur est actuellemen un parseur en C/C++ qui sera à décliner pour l'ArduPilot et le RX.

Finalement, notre programme principal est un programme de calibrage des différentes PID, où en temps réel nous pouvons modifier les différents coefficients et la vitesse. A côté, des programmes annexes permettent de tester les différents composants du drone.

La taille finale de notre code est de 39 ko sur 256 ko disponibles, soit environ 15%. Cela montre que l'ArduPilot est encore loin de ses limites.

Dernière mise à jour : 26/03/2013 22h00
Auteur : Pierre GUINAULT

dossiers.PNG (31.6 KB) Pierre Guinault, 03/26/2013 09:02 PM

sketchbook.png (25.1 KB) Pierre Guinault, 03/26/2013 09:03 PM

preferences.PNG (32.7 KB) Pierre Guinault, 03/26/2013 09:06 PM