Règle pour créer une librairie: https://www.arduino.cc/en/Hacking/libraryTutorial
Je n'ai pas inclus d'exemple dans la librairie pour que les étudiants doivent créer le programme à partir du texte d'explication ci dessous:
===== Installation de la librairie permettant d'utiliser les homographies sur Arduino =====
**A faire uniquement à la première séance:**
Vous devez installer une librairie. Pour cela, copiez-collez dans une console après l'avoir ouverte avec ALT+F2 lxterm :
echo commence
mkdir -p ~/Arduino
cd ~/Arduino
mkdir -p libraries
cd libraries
wget https://bvdp.inetdoc.net/files/iut/homographie/homography.zip
unzip -o homography.zip
rm homography.zip
echo fini
===== Utilisation de la librairie permettant d'utiliser les homographies sur Arduino =====
Inclure la librairie dans le croquis en écrivant au début:
#include
Ce fichier contient la définition de la classe **Homography** dont voici une version simplifiée montrant l'interface d'interaction avec la classe:
//B.Vandeportaele LAAS/CNRS 11/2019
class Homography
{
public:
Homography();
~Homography();
void setP1(float u1,float v1,float u2,float v2);
void setP2(float u1,float v1,float u2,float v2);
void setP3(float u1,float v1,float u2,float v2);
void setP4(float u1,float v1,float u2,float v2);
void computeHandHinv();
bool applyH(float u1,float v1,float *ptr_u2,float *ptr_v2);
bool applyHinv(float u2,float v2,float *ptr_u1,float *ptr_v1);
private:
...
};
Pour pouvoir l'utiliser, vous devez déclarer une variable globale dans votre croquis:
Homography hom;
Voici un exemple d'utilisation de cet objet dans **setup()**:
//Définition des 4 correspondances de points définissant l'homographie
hom.setP1(1.3,1.1,6.4,4.1);
hom.setP2(3.4,63.9,546.13,664.9);
hom.setP3(7.8,57.3,106.8,46.1);
hom.setP4(10.1,7.7,669.77,41.3);
//Calcul de l'homographie et de son inverse
hom.computeHandHinv();
//Vérification de l'homographie sur le point 1
float u11,v11,u12,v12,u13,v13,u14,v14;
float u21,v21,u22,v22,u23,v23,u24,v24;
u11=1.3;
v11=1.1;
u21=6.4;
v21=4.1;
float u21p,v21p,u22p,v22p,u23p,v23p,u24p,v24p;
hom.applyH(u11,v11,&u21p,&v21p);
Serial.print(" ");
Serial.print(u21);
Serial.print(" / ");
Serial.print(u21p);
Serial.print(" ");
Serial.print(v21);
Serial.print(" / ");
Serial.print(v21p);
Serial.println();
//Vérification de l'homographie inverse sur le point 1
float u11p,v11p,u12p,v12p,u13p,v13p,u14p,v14p;
hom.applyHinv(u21,v21,&u11p,&v11p);
Serial.print(" ");
Serial.print(u11);
Serial.print(" / ");
Serial.print(u11p);
Serial.print(" ");
Serial.print(v11);
Serial.print(" / ");
Serial.print(v11p);
Serial.println();
Serial.println("--------------------------------------------------");