Outils pour utilisateurs

Outils du site


homographyarduino

Ceci est une ancienne révision du document !


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 http://homepages.laas.fr/bvandepo/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:

homography.h
//B.Vandeportaele LAAS/CNRS 11/2019
 
#ifndef HOMOGRAPHY_H
#define HOMOGRAPHY_H
 
#include "nrutil.h"
#include <math.h>
class Homography
{
public:
    Homography();
    ~Homography();
    void setP1(float u1,float v1,float u2,float v2)
    {
        u11=u1;
        v11=v1;
        u21=u2;
        v21=v2;
    }
    void setP2(float u1,float v1,float u2,float v2)
    {
        u12=u1;
        v12=v1;
        u22=u2;
        v22=v2;
    }
    void setP3(float u1,float v1,float u2,float v2)
    {
        u13=u1;
        v13=v1;
        u23=u2;
        v23=v2;
    }
    void setP4(float u1,float v1,float u2,float v2)
    {
        u14=u1;
        v14=v1;
        u24=u2;
        v24=v2;
    }
    void computeHandHinv();
    bool checkHandHinv();
    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:
    float u11,u12,u13,u14,v11,v12,v13,v14,u21,u22,u23,u24,v21,v22,v23,v24;
    float **a_matrix_1_8_1_8;
    float *b_vector_1_8;
    float **H_matrix_1_3_1_3;
    float **Hinv_matrix_1_3_1_3;
    void initCoefficientsLinearSystemToSolve();
};
 
void testHomography();
#endif // HOMOGRAPHY_H

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("--------------------------------------------------");   
homographyarduino.1575415913.txt.gz · Dernière modification: 2019/12/04 00:31 par bvandepo