[C++] fonctions calcule odometrie

Résolu
hades06 Messages postés 16 Statut Membre -  
 Dante -
Bonjour a tous ami informaticiens :),

Voila mon prbleme, je suis en bts informatique et reseaux et la je suis en plein projet de 2ieme année. Je m'occupe de l'odometrie d'un wifibot. Mon programme est normalement bon mais c'est dans ma librairie de fonction que ca bug et je sais pas du tout quoi changer.
Je vous mets ma librairie et les erreurs generer par le compilateur.
Je suis sur Ubunto 6.10

D'avance merci :)

#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <string.h>
#include <pthread.h>
#include <time.h>

#define TCPBUF_SIZE 128
#define TBUF_RECV 7
#define TBUF_SEND 2

class wbodo {

public:

wbodo();

// Attributs de la classe

/***************** Fonction pour se connecter avec le serveur "sc12" *******************/

// Cette fonction place l'adresse IP et le numero de port
int setaddress(char *servername, int serverport);
// Cette fonction active la connection
int connexion();
// Cette fonction coupe la connection
void stop();

/* ***************** Methode pour controler le robot *************************** */

// VITESSE

// Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
int setv(int v, int w);
// Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

int getv(float *v, float *w); // int getv(int *v, int *w) a la base

// ODOMETRIE

// Cette fonction reinitialise les valeur de l'odometrie a 0
int reset();
// Cette fonction donne les valeurs de l'odometrie en mm and crad
int setpos(int xm, int ym, int am);
// Cette fonction retourne les valeurs de l'odometrie en mm and crad

int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
// int getpos(float *xm, float *ym, float *am);
// Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
int startodo();
// Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
int stopodo();

// SONDES

// Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
// 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
// Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
int getbat(int *bat);

/* Cette fonction retourne la valeur des sondes infra-rouge
int getirn(int *ir1,int *ir2);

int updatetics(void); */

private:
/*
int sock;
struct sockaddr_in server;
struct hostent *hp;
char buffer[TCPBUF_SIZE];

// Fonctions auxiliaire
double lin(int ir);
char * itoa(int n, char *buff, int radix);
void processLine(char *line, char separator, char **arg, int len);
*/
};
// void updatePos(long int *x,long int *y,int *a,int tl,int tr);

void updatePos(void);
void * ThreadPeriodico(void *arg);
void * ThreadVelocidad(void *arg);

#end#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <string.h>
#include <pthread.h>
#include <time.h>

#define TCPBUF_SIZE 128
#define TBUF_RECV 7
#define TBUF_SEND 2

class wbodo {

public:

wbodo();

// Attributs de la classe

/***************** Fonction pour se connecter avec le serveur "sc12" *******************/

// Cette fonction place l'adresse IP et le numero de port
int setaddress(char *servername, int serverport);
// Cette fonction active la connection
int connexion();
// Cette fonction coupe la connection
void stop();

/* ***************** Methode pour controler le robot *************************** */

// VITESSE

// Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
int setv(int v, int w);
// Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

int getv(float *v, float *w); // int getv(int *v, int *w) a la base

// ODOMETRIE

// Cette fonction reinitialise les valeur de l'odometrie a 0
int reset();
// Cette fonction donne les valeurs de l'odometrie en mm and crad
int setpos(int xm, int ym, int am);
// Cette fonction retourne les valeurs de l'odometrie en mm and crad

int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
// int getpos(float *xm, float *ym, float *am);
// Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
int startodo();
// Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
int stopodo();

// SONDES

// Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
// 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
// Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
int getbat(int *bat);

/* Cette fonction retourne la valeur des sondes infra-rouge
int getirn(int *ir1,int *ir2);

int updatetics(void); */

private:
/*
int sock;
struct sockaddr_in server;
struct hostent *hp;
char buffer[TCPBUF_SIZE];

// Fonctions auxiliaire
double lin(int ir);
char * itoa(int n, char *buff, int radix);
void processLine(char *line, char separator, char **arg, int len);
*/
};
// void updatePos(long int *x,long int *y,int *a,int tl,int tr);

void updatePos(void);
void * ThreadPeriodico(void *arg);
void * ThreadVelocidad(void *arg);

#end#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <string.h>
#include <pthread.h>
#include <time.h>

#define TCPBUF_SIZE 128
#define TBUF_RECV 7
#define TBUF_SEND 2

class wbodo {

public:

wbodo();

// Attributs de la classe

/***************** Fonction pour se connecter avec le serveur "sc12" *******************/

// Cette fonction place l'adresse IP et le numero de port
int setaddress(char *servername, int serverport);
// Cette fonction active la connection
int connexion();
// Cette fonction coupe la connection
void stop();

/* ***************** Methode pour controler le robot *************************** */

// VITESSE

// Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
int setv(int v, int w);
// Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

int getv(float *v, float *w); // int getv(int *v, int *w) a la base

// ODOMETRIE

// Cette fonction reinitialise les valeur de l'odometrie a 0
int reset();
// Cette fonction donne les valeurs de l'odometrie en mm and crad
int setpos(int xm, int ym, int am);
// Cette fonction retourne les valeurs de l'odometrie en mm and crad

int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
// int getpos(float *xm, float *ym, float *am);
// Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
int startodo();
// Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
int stopodo();

// SONDES

// Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
// 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
// Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
int getbat(int *bat);

/* Cette fonction retourne la valeur des sondes infra-rouge
int getirn(int *ir1,int *ir2);

int updatetics(void); */

private:
/*
int sock;
struct sockaddr_in server;
struct hostent *hp;
char buffer[TCPBUF_SIZE];

// Fonctions auxiliaire
double lin(int ir);
char * itoa(int n, char *buff, int radix);
void processLine(char *line, char separator, char **arg, int len);
*/
};
// void updatePos(long int *x,long int *y,int *a,int tl,int tr);

void updatePos(void);
void * ThreadPeriodico(void *arg);
void * ThreadVelocidad(void *arg);

#end#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <string.h>
#include <pthread.h>
#include <time.h>

#define TCPBUF_SIZE 128
#define TBUF_RECV 7
#define TBUF_SEND 2

class wbodo {

public:

wbodo();

// Attributs de la classe

/***************** Fonction pour se connecter avec le serveur "sc12" *******************/

// Cette fonction place l'adresse IP et le numero de port
int setaddress(char *servername, int serverport);
// Cette fonction active la connection
int connexion();
// Cette fonction coupe la connection
void stop();

/* ***************** Methode pour controler le robot *************************** */

// VITESSE

// Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
int setv(int v, int w);
// Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

int getv(float *v, float *w); // int getv(int *v, int *w) a la base

// ODOMETRIE

// Cette fonction reinitialise les valeur de l'odometrie a 0
int reset();
// Cette fonction donne les valeurs de l'odometrie en mm and crad
int setpos(int xm, int ym, int am);
// Cette fonction retourne les valeurs de l'odometrie en mm and crad

int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
// int getpos(float *xm, float *ym, float *am);
// Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
int startodo();
// Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
int stopodo();

// SONDES

// Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
// 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
// Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
int getbat(int *bat);

/* Cette fonction retourne la valeur des sondes infra-rouge
int getirn(int *ir1,int *ir2);

int updatetics(void); */

private:
/*
int sock;
struct sockaddr_in server;
struct hostent *hp;
char buffer[TCPBUF_SIZE];

// Fonctions auxiliaire
double lin(int ir);
char * itoa(int n, char *buff, int radix);
void processLine(char *line, char separator, char **arg, int len);
*/
};
// void updatePos(long int *x,long int *y,int *a,int tl,int tr);

void updatePos(void);
void * ThreadPeriodico(void *arg);
void * ThreadVelocidad(void *arg);

#end

In file included from wbodo.cpp:1:
wbodo.h:96:7: warning: no newline at end of file
wbodo.h:21: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘wbodo’
wbodo.h:96:7: warning: no newline at end of file
Configuration: Linux
Firefox 2.0.0.1

26 réponses

  • 1
  • 2
  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    A la fin du fichier wbodo.h, rajoute une ligne blanche
    Peux-tu nous dire ce qu'il y a ligne 21 de ce même fichier ?

    Bonne chance
    0
  2. hades06 Messages postés 16 Statut Membre
     
    La ligne 21 du fichier wbodo.h c'est "class wbodo {"

    et merci pour m'avoir dis de rajouter une ligne blanche a la fin ;)
    0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Donne moi le contenu du fichier en question
    0
  4. hades06 Messages postés 16 Statut Membre
     
    #include "wbodo.h"
    #include <stdio.h>
    #include <float.h>

    #define DEFIPADDRESS "192.168.120.14"
    // changer l'IP
    #define DEFPORT 15000

    #define CTE1 0.67
    #define CTE2 0.0025
    #define CTE3 0.005

    // Definition des constantes
    //
    // r = 64 mm (rayon de la roue)
    // l = 134 mm ((distance entre les roues)/2)
    // M = 300 secteurs (par roue)
    // CTE1=(r*PI)/M = 0.67 mm/tics
    // CTE2=(r*PI)/(2*l*M) = 0.0025 rads/tics
    // CTE3=(r*PI)/(l*M) = 0.005 rads/tics

    pthread_t th_id,th_v;
    pthread_attr_t attr,attrv;

    extern wbodo* cube4G;
    int gthread=0;
    int gthread1=0;

    //NOTE: Toutes les variables qui commencent pas 'g_' sont globales

    //Variable globale qui rassemble les 7 valeurs du buffer du 4G
    char g_recv_datos[7];

    int sock;
    struct sockaddr_in g_server;
    struct hostent *hp;
    char g_buffer[TCPBUF_SIZE];

    float g_vel_l=0,g_vel_r=0; // a la base c'etait int et pas float

    float g_x=0,g_y=0; // Position du robot pour l'odometrie
    float g_a=0; // Angle de depart
    float g_tl=0,g_tr=0; // Tics de la roue gauche et droite
    float g_stl=0,g_str=0; // Tics mesurés avec le capteur

    // wbodo constructeur
    wbodo::wbodo()
    {
    // Nous configurons la connexion avec des valeurs par défaut
    g_server.sin_family = AF_INET;
    g_server.sin_port = htons(DEFPORT);
    hp = gethostbyname(DEFIPADDRESS);
    memcpy((char *)&g_server.sin_addr, (char *)hp->h_addr, hp->h_length);

    }

    int wbodo::setaddress(char *servername, int serverport)
    // Cette fonction place l'adresse IP et le numero de port
    //
    // servername:indicateur de l'IP ou le chemin du nom du serveur du serveur de SC12 wifibot
    // serport: le port d'écoute du serveur SC12 wifibot(5001)
    //
    // returns: -1 quand il y a une erreur else 0
    {
    g_server.sin_family = AF_INET;
    g_server.sin_port = htons(serverport);
    hp = gethostbyname(servername);
    if (hp==0){
    perror("serveur inconnu");
    return(-1);
    }
    memcpy((char *)&g_server.sin_addr, (char *)hp->h_addr, hp->h_length);
    return(0);
    }

    int wbodo::connexion()
    // Cette fonction lance la connexion
    //
    // returns: -1 quand il y a une erreur else 0
    {
    // Creation de la socket
    sock = socket(PF_INET,SOCK_STREAM,0);
    if (sock<0){
    perror("la socket n'a pas pu etre crée\r\n");
    return(-1);
    }

    // Connect
    if (connect(sock,(struct sockaddr *)&g_server,sizeof g_server) < 0 ){
    perror ("connexion refusée");
    return(-1);
    }
    else
    return(0);
    }

    int wbodo::setv(int v, int w)
    // Cette fonction place la vitesse linéaire et angulaire du robot
    // v: vitesse linéaire en mm/s
    // w: vitesse linéaire en rad/s
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {

    int cr;
    float vl,vr;
    float speed_left=0; // a la base c'etait int et pas float
    float speed_right=0; // a la base c'etait int et pas float
    float tl=0,tr=0;

    vl = v+(w*268)/200;
    vr = v-(w*268)/200;

    g_tl = -(vl*30)/1000;
    g_tr = -(vr*30)/1000;

    tl=g_tl;
    tr=g_tr;

    if(tl<0){
    tl=-tl;
    speed_left=speed_left+64;
    }
    if(tl>63) tl=63;

    speed_left=speed_left+tl;

    if(tr<0){
    tr=-tr;
    speed_right=speed_right+64;
    }
    if(tr>63) tr=63;

    speed_right=speed_right+tr;

    // Bit de controle toujours a 1 (control on)
    speed_left=speed_left+128;
    speed_right=speed_right+128;

    g_vel_l=speed_left;
    g_vel_r=speed_right;

    if(v==0 && w==0)
    {
    g_vel_l=0;
    g_vel_r=0;
    return(0);
    }
    else{
    if(!gthread)
    {
    pthread_attr_init(&attrv);
    if(pthread_create(&th_v,&attrv,ThreadVelocidad,(void*)this)!=0) return(-1);
    // else return(0);
    gthread=1;
    }
    return(0);
    }
    }

    int wbodo::getv(float *v, float *w) // int wbodo::getv(int *v, int *w) a la base
    // Cette fonction renvoie la vitesse linéaire et angulaire du robot
    //
    // v: indicateur de la vitesse linéaire retournée mm/s
    // w: indicateur de la vitesse linéaire retournée rad/s
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    float v1,v2;
    v1=(g_stl*1000)/30;
    v2=(g_str*1000)/30;
    *v=(v1+v2)/2;
    *w=((v1-v2)*100)/268;
    return(0);
    }

    int wbodo::reset()
    // Cette méthode remet les valeurs de l'odométrie à 0
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    //updatetics();
    g_x=0;
    g_y=0;
    g_a=0;
    return(0);
    }

    int wbodo::setpos(int xm, int ym, int am)
    // Cette methode met les valeurs de l'odométrie en mm et en rad
    //
    // x: x valeur en millimetres, deplacement droit
    // y: y valeur en millimetres, deplacement latéral
    // a: indicateur de l'angle en rad (dans le sens des aiguilles d'une montre)
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    g_x=xm;
    g_y=ym;
    g_a=am;

    return(0);
    }

    int wbodo::getpos(float *xm, float *ym, float *am) // int wbodo::getpos(int *xm, int *ym, int *am) a la base
    // Cette methode renvoie les valeurs d'odométrie en mm et en rad
    //
    // x: indicateur de la valeur de x en mm, deplacement droit
    // y: indicateur de la valeur de y en mm, deplacement literal
    // a: indicateur de l'angle en radian (dans le sens des aiguilles d'une montre)
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    *xm=g_x;
    *ym=g_y;
    *am=g_a;

    return(0);
    }

    int wbodo::startodo()
    // Cette fonction active l'odometrie dans le robot. Arrêté par défaut
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    //updatetics();
    //pthread_attr_init(&attr);
    if(!gthread1) // S'il n'est pas lancé precedemment, il le lance
    {
    pthread_attr_init(&attr);

    // Crée le fil periodique
    if(pthread_create(&th_id,&attr,ThreadPeriodico,NULL)!=0)
    {
    return(-1); //erreur de création du fil
    }
    else
    {
    gthread1=1;
    return(0);
    }
    }
    else return(2);

    }

    int wbodo::stopodo()

    // Cette fonction arrête l'odometrie dans le robot. Arrêté par défaut

    // returns: -1 quand il y'a erreur de communication else 0
    {

    if(gthread1) // Ss'il s'est deja lancé, il s'arrete
    {
    // Fil arreter
    if(pthread_cancel(th_id)!=0)
    {
    return(-1);
    }
    else
    {
    gthread1=0; // Il l'a arrété, il recommence.
    return(0);
    }
    }
    else return(2);

    }

    int wbodo::getenc(int *enc1, int *enc2, int *enc3, int *enc4)

    // Cette fonction renvoie les valeurs des encodeurs sur une période de 40 ms
    //
    // enc1: indicateur de la valeur de l'encodeur avant gauche
    // enc2: indicateur de la valeur de l'encodeur arriere gauche
    // enc3: indicateur de la valeur de l'encodeur arriere droit
    // enc4: indicateur de la valeur de l'encodeur avant droit
    //
    // returns: -1 quand il y'a erreur de communication else 0
    {
    *enc1=g_recv_datos[1];
    *enc2=g_recv_datos[2];
    *enc3=g_recv_datos[3];
    *enc4=g_recv_datos[4];
    return(0);
    }

    int wbodo::getbat(int *bat)

    // Cette fonction renvoie le niveau de batterie sur une échelle de: 0-255

    //
    // bat: indicateur de niveau de batterie
    //
    // return: -1 quand il y'a erreur de communication else 0
    {
    //updatetics();
    *bat=g_recv_datos[0];

    return(0);
    }

    /*
    int wbodo::getirn(int *ir1,int *ir2)

    // Cette fonction renvoie les valeurs des capteurs infrarouges en centimetres
    //
    // ir1: indicateur de la distance mesurée avec le capteur infra rouge gauche
    // ir2: indicateur de la distance mesurée avec le capteur infra rouge droit
    //
    // returns: -1 when communication error else 0
    {
    // updatetics();
    *ir1=g_recv_datos[5];
    *ir2=g_recv_datos[6];
    return(0);
    }

    */

    void * ThreadPeriodico(void *arg)
    {
    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);

    while(1)
    {
    pthread_testcancel(); // Point d'annulation
    // Pas besoin de xq usleep il y a deja le point d'annulation
    updatePos();
    usleep(40000); // 40ms == 40000 µs
    }
    }

    void updatePos(void)
    {
    float xl=0,yl=0,al=0;
    float ltl, ltr;

    xl=g_x;
    yl=g_y;
    al=g_a;
    ltl=g_stl;
    ltr=g_str;

    xl=xl+CTE1*(ltl+ltr)*cos(CTE2*(ltl-ltr)+(al/100));
    yl=yl+CTE1*(ltl+ltr)*sin(CTE2*(ltl-ltr)+(al/100));
    al=100*CTE3*(ltl-ltr)+al;
    // Multiplié CTE3 par 100 pour paser de rads a crads

    g_x=xl;
    g_y=yl;
    g_a=al;

    }

    void *ThreadVelocidad(void *arg)
    {
    int cr=0;
    int enc1=0,enc2=0,enc3=0,enc4=0;
    int encl=0,encr=0;

    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);

    while(1) // Envoie toute les 40 ms les valeurs de vitesse
    {
    g_buffer[0]=(unsigned char) g_vel_l; // Il écrit des vitesses
    g_buffer[1]=(unsigned char) g_vel_r;
    write(sock,g_buffer,TBUF_SEND);

    cr=read(sock,g_buffer,TBUF_RECV); // Il reçoit des données
    if(cr>0)
    {
    g_recv_datos[0]=g_buffer[0];
    g_recv_datos[1]=g_buffer[1];
    g_recv_datos[2]=g_buffer[2];
    g_recv_datos[3]=g_buffer[3];
    g_recv_datos[4]=g_buffer[4];
    g_recv_datos[5]=g_buffer[5];
    g_recv_datos[6]=g_buffer[6];

    enc1=g_recv_datos[1];
    enc2=g_recv_datos[2];
    enc3=g_recv_datos[3];
    enc4=g_recv_datos[4];

    if(enc1>=enc2) encl=enc1;
    else encl=enc2;
    if(enc3>=enc4) encr=enc3;
    else encr=enc4;

    if((encl>=0) && (encr>=0))
    {
    if(g_tl>0) g_stl=-encl;
    else g_stl=encl;
    if(g_tr>0) g_str=-encr;
    else g_str=encr;
    }
    }
    usleep(40000);
    }
    }
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Attends mais moi je veux juste le fichier wbodo.h et encore, juste les 30 premières lignes pour voir ce qu'il y a ligne 21.
    0
  7. hades06 Messages postés 16 Statut Membre
     
    Ah ok et bien le fichier wbodo.h c'est ce que j'ai mis avec mon tout premier message la ou je demandais conseil, le tout tout premier tout en haut.
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Si c'est bien :
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <math.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>
    
    #define TCPBUF_SIZE 128
    #define TBUF_RECV 7
    #define TBUF_SEND 2
    
    class wbodo {
    
        public:
    
            wbodo();
    
            // Attributs de la classe
    
            /***************** Fonction pour se connecter avec le serveur "sc12" *******************/
    
            // Cette fonction place l'adresse IP et le numero de port
            int setaddress(char *servername, int serverport);
            // Cette fonction active la connection
            int connexion();
            // Cette fonction coupe la connection
            void stop();
    
    
            /* ***************** Methode pour controler le robot *************************** */
    
            // VITESSE
    
            // Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
            int setv(int v, int w);
            // Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s
    
            int getv(float *v, float *w); // int getv(int *v, int *w) a la base
    
            // ODOMETRIE
    
            // Cette fonction reinitialise les valeur de l'odometrie a 0
            int reset();
            // Cette fonction donne les valeurs de l'odometrie en mm and crad
            int setpos(int xm, int ym, int am);
            // Cette fonction retourne les valeurs de l'odometrie en mm and crad
    
            int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
            // int getpos(float *xm, float *ym, float *am);
            // Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
            int startodo();
            // Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
            int stopodo();
    
            // SONDES
    
            // Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
            // 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
            int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
            // Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
            int getbat(int *bat);
    
            /* Cette fonction retourne la valeur des sondes infra-rouge
               int getirn(int *ir1,int *ir2);
    
               int updatetics(void); */
    
        private:
            /*
               int sock;
               struct sockaddr_in server;
               struct hostent *hp;
               char buffer[TCPBUF_SIZE];
    
            // Fonctions auxiliaire
            double lin(int ir);
            char * itoa(int n, char *buff, int radix);
            void processLine(char *line, char separator, char **arg, int len);
            */
    };
    // void updatePos(long int *x,long int *y,int *a,int tl,int tr);
    
    void updatePos(void);
    void * ThreadPeriodico(void *arg);
    void * ThreadVelocidad(void *arg);
    

    ... chez moi ca compile. Peux-tu me redonner le contenu de ce fichier ?
    0
  9. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    salut.
    Tu utilise quel commande pour compiler ?
    Une fois, j'ai eu un problème un peu similaire (je ne me rappel plus exactement l'erreur du compilo par contre). Il y avait sur la ligne un caractère invisible qui n'était pas une espace. j'ai effacer la ligne et ce qu'il y avait avant et après, je l'ai réécri, et ça a fonctionner.
    0
  10. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Si tu es sous linux utilises la commandes dos2unix.
    dos2unix *cpp
    dos2unix *hpp
    0
  11. hades06 Messages postés 16 Statut Membre
     
    Pour repondre a mamiemando, le contenu de la librairie et du prog principale sont afficher sur le topic, jai mis les deux. Le librairie est dans mon premier post du topic.
    J'ai essayer la commande dos2unix, mais il me dit bash: dos2unix: commande est introuvable

    Pour repondre a char sniper je compile en fesant gcc wbodo.cpp wbodo.h
    J'ai regarder si y avait pas des espaces cacher et apparement non j'ai pas l'impression qu'il y ai une erreur de syntaxe
    0
  12. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Installe le paquet dosfstools.
    dosfstools - Utilities to create and check MS-DOS FAT filesystems
    0
  13. hades06 Messages postés 16 Statut Membre
     
    Je l'ai reinstaller et ca ne marche tjrs pas, j'ai toujours la meme erreur "wbodo.h:21: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘wbodo’" meme en testant sous un autre pc, sur fedora.
    0
  14. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Tu as bien fait le dos2unix ? Peux-tu nous redonner le contenu de ce fichier parce que au dernières nouvelle il était syntaxiquement correcte. Tu peux aussi essayer de faire un copier coller de ce fichier (sauve le par exemple dans ton home) et essayer de le compiler pour voir si c'est le filesystem ou le code lui-même qui posent problème.
    0
  15. hades06 Messages postés 16 Statut Membre
     
    Oui j'ai bien fait dos2unix
    Par contenu du fichier tu parles bien du programme en lui meme le.cpp et le .h ?? si oui le .h est en commentaire 0 et le prog en commentaire 4 si c pas le cas je voie pas de quel contenu de fichier tu parles :s
    J'ai essayer de copier coller le f ichier et de compiler, ca me donne exactement la meme errreure, j'ai aussi essayer en creant un nouvo fichier et de coller la librairie dedans et pareil, franchement c trop bizarre
    0
  16. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Je parle du fichier qui renvoie une erreur de compilation. Peux tu me le donner je vais essayer de voir si ca compile chez moi.
    0
  17. hades06 Messages postés 16 Statut Membre
     
    Et beh le fichier qui renvoi l'erreur c'est celui du debut
    "
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <math.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>

    #define TCPBUF_SIZE 128
    #define TBUF_RECV 7
    #define TBUF_SEND 2

    class wbodo {

    public:

    wbodo();

    // Attributs de la classe

    /***************** Fonction pour se connecter avec le serveur "sc12" *******************/

    // Cette fonction place l'adresse IP et le numero de port
    int setaddress(char *servername, int serverport);
    // Cette fonction active la connection
    int connexion();
    // Cette fonction coupe la connection
    void stop();

    /* ***************** Methode pour controler le robot *************************** */

    // VITESSE

    // Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
    int setv(int v, int w);
    // Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

    int getv(float *v, float *w); // int getv(int *v, int *w) a la base

    // ODOMETRIE

    // Cette fonction reinitialise les valeur de l'odometrie a 0
    int reset();
    // Cette fonction donne les valeurs de l'odometrie en mm and crad
    int setpos(int xm, int ym, int am);
    // Cette fonction retourne les valeurs de l'odometrie en mm and crad

    int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
    // int getpos(float *xm, float *ym, float *am);
    // Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
    int startodo();
    // Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
    int stopodo();

    // SONDES

    // Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
    // 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
    int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
    // Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
    int getbat(int *bat);

    /* Cette fonction retourne la valeur des sondes infra-rouge
    int getirn(int *ir1,int *ir2);

    int updatetics(void); */

    private:
    /*
    int sock;
    struct sockaddr_in server;
    struct hostent *hp;
    char buffer[TCPBUF_SIZE];

    // Fonctions auxiliaire
    double lin(int ir);
    char * itoa(int n, char *buff, int radix);
    void processLine(char *line, char separator, char **arg, int len);
    */
    };
    // void updatePos(long int *x,long int *y,int *a,int tl,int tr);

    void updatePos(void);
    void * ThreadPeriodico(void *arg);
    void * ThreadVelocidad(void *arg);

    #end#include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <math.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>

    #define TCPBUF_SIZE 128
    #define TBUF_RECV 7
    #define TBUF_SEND 2

    class wbodo {

    public:

    wbodo();

    // Attributs de la classe

    /***************** Fonction pour se connecter avec le serveur "sc12" *******************/

    // Cette fonction place l'adresse IP et le numero de port
    int setaddress(char *servername, int serverport);
    // Cette fonction active la connection
    int connexion();
    // Cette fonction coupe la connection
    void stop();

    /* ***************** Methode pour controler le robot *************************** */

    // VITESSE

    // Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
    int setv(int v, int w);
    // Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

    int getv(float *v, float *w); // int getv(int *v, int *w) a la base

    // ODOMETRIE

    // Cette fonction reinitialise les valeur de l'odometrie a 0
    int reset();
    // Cette fonction donne les valeurs de l'odometrie en mm and crad
    int setpos(int xm, int ym, int am);
    // Cette fonction retourne les valeurs de l'odometrie en mm and crad

    int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
    // int getpos(float *xm, float *ym, float *am);
    // Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
    int startodo();
    // Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
    int stopodo();

    // SONDES

    // Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
    // 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
    int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
    // Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
    int getbat(int *bat);

    /* Cette fonction retourne la valeur des sondes infra-rouge
    int getirn(int *ir1,int *ir2);

    int updatetics(void); */

    private:
    /*
    int sock;
    struct sockaddr_in server;
    struct hostent *hp;
    char buffer[TCPBUF_SIZE];

    // Fonctions auxiliaire
    double lin(int ir);
    char * itoa(int n, char *buff, int radix);
    void processLine(char *line, char separator, char **arg, int len);
    */
    };
    // void updatePos(long int *x,long int *y,int *a,int tl,int tr);

    void updatePos(void);
    void * ThreadPeriodico(void *arg);
    void * ThreadVelocidad(void *arg);

    #end#include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <math.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>

    #define TCPBUF_SIZE 128
    #define TBUF_RECV 7
    #define TBUF_SEND 2

    class wbodo {

    public:

    wbodo();

    // Attributs de la classe

    /***************** Fonction pour se connecter avec le serveur "sc12" *******************/

    // Cette fonction place l'adresse IP et le numero de port
    int setaddress(char *servername, int serverport);
    // Cette fonction active la connection
    int connexion();
    // Cette fonction coupe la connection
    void stop();

    /* ***************** Methode pour controler le robot *************************** */

    // VITESSE

    // Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
    int setv(int v, int w);
    // Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

    int getv(float *v, float *w); // int getv(int *v, int *w) a la base

    // ODOMETRIE

    // Cette fonction reinitialise les valeur de l'odometrie a 0
    int reset();
    // Cette fonction donne les valeurs de l'odometrie en mm and crad
    int setpos(int xm, int ym, int am);
    // Cette fonction retourne les valeurs de l'odometrie en mm and crad

    int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
    // int getpos(float *xm, float *ym, float *am);
    // Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
    int startodo();
    // Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
    int stopodo();

    // SONDES

    // Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
    // 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
    int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
    // Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
    int getbat(int *bat);

    /* Cette fonction retourne la valeur des sondes infra-rouge
    int getirn(int *ir1,int *ir2);

    int updatetics(void); */

    private:
    /*
    int sock;
    struct sockaddr_in server;
    struct hostent *hp;
    char buffer[TCPBUF_SIZE];

    // Fonctions auxiliaire
    double lin(int ir);
    char * itoa(int n, char *buff, int radix);
    void processLine(char *line, char separator, char **arg, int len);
    */
    };
    // void updatePos(long int *x,long int *y,int *a,int tl,int tr);

    void updatePos(void);
    void * ThreadPeriodico(void *arg);
    void * ThreadVelocidad(void *arg);

    #end#include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <math.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>

    #define TCPBUF_SIZE 128
    #define TBUF_RECV 7
    #define TBUF_SEND 2

    class wbodo {

    public:

    wbodo();

    // Attributs de la classe

    /***************** Fonction pour se connecter avec le serveur "sc12" *******************/

    // Cette fonction place l'adresse IP et le numero de port
    int setaddress(char *servername, int serverport);
    // Cette fonction active la connection
    int connexion();
    // Cette fonction coupe la connection
    void stop();

    /* ***************** Methode pour controler le robot *************************** */

    // VITESSE

    // Cette fonction donne la vitesse linéaire et angulaire du robot en mm/s and crad/s
    int setv(int v, int w);
    // Cette fonction retourne la vitesse linéaire et angulaire du robot en mm/s and crad/s

    int getv(float *v, float *w); // int getv(int *v, int *w) a la base

    // ODOMETRIE

    // Cette fonction reinitialise les valeur de l'odometrie a 0
    int reset();
    // Cette fonction donne les valeurs de l'odometrie en mm and crad
    int setpos(int xm, int ym, int am);
    // Cette fonction retourne les valeurs de l'odometrie en mm and crad

    int getpos(float *xm, float *ym, float *am); //int getpos(int *xm, int *ym, int *am) a la base
    // int getpos(float *xm, float *ym, float *am);
    // Cette fonction active l'odometrie dans le robot. "Arrete par defaut"
    int startodo();
    // Cette fonction arrete l'odometrie dans le robot. "Arrete par defaut"
    int stopodo();

    // SONDES

    // Cette fonction renvoie les valeurs des encodeurs a chaque periode de 40 ms
    // 1:LEFT-FRONT 2:LEFT-BACK 3:RIGHT-BACK 4:RIGHT-FRONT
    int getenc(int *enc1, int *enc2, int *enc3, int *enc4);
    // Cette fonction rertourne le niveau de la batterie sur une echelle de 0-255
    int getbat(int *bat);

    /* Cette fonction retourne la valeur des sondes infra-rouge
    int getirn(int *ir1,int *ir2);

    int updatetics(void); */

    private:
    /*
    int sock;
    struct sockaddr_in server;
    struct hostent *hp;
    char buffer[TCPBUF_SIZE];

    // Fonctions auxiliaire
    double lin(int ir);
    char * itoa(int n, char *buff, int radix);
    void processLine(char *line, char separator, char **arg, int len);
    */
    };
    // void updatePos(long int *x,long int *y,int *a,int tl,int tr);

    void updatePos(void);
    void * ThreadPeriodico(void *arg);
    void * ThreadVelocidad(void *arg);

    #end
    "
    son nom, wbodo.h, et l'erreur se trouve a la declaration de la classe wbodo.
    0
  18. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Salut.
    ote moi d'un doute, tu tape EXACTEMENT gcc wbodo.cpp wbodo.h ?
    Si oui, c'est inutile de compiler un .h !
    0
  19. hades06 Messages postés 16 Statut Membre
     
    Ouai je tape tout ca !
    Ah ouai c inutile ??? On a tjrs fait comme ca avec mon binome pendant les tp (mais en c), en plus sans la librairie il me met au tacket d'erreur pis sans la librairie le .cpp manque de soure, je viends d'essayer et ca merde
    0
  20. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Re;
    pourquoi un #end à la fin ? je voi pas de #if ?
    pourquoi tu copie colle autant de foi ton code ?
    essai de compiler avec g++ plutôt que gcc
    Comme mamiemando, une foi que j'ai virer le begauilage et le #end, ça compile
    0
  21. hades06 Messages postés 16 Statut Membre
     
    Dsl du retard, j'ai pas tout le temps le net !
    En fait le if est tout au debut du prog. apparement j'ai oublier de le mettre :s, "#ifndef _wbodo".
    J'ai essayer g++, ca me met la meme erruer, par contre je sais pas ce que c'st le degauilage.
    0
  • 1
  • 2