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 <homography.h>

Ce fichier contient la définition de la classe Homography dont voici une version simplifiée montrant l'interface d'interaction avec la classe:

homography_simplifie.h
//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():

exemple.cpp
//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("--------------------------------------------------");