[C++] fonctions calcule odometrie

Résolu/Fermé
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009 - 14 févr. 2007 à 09:45
 Dante - 5 avril 2007 à 17:31
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

26 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
14 févr. 2007 à 16:04
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
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
14 févr. 2007 à 16:36
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
14 févr. 2007 à 20:08
Donne moi le contenu du fichier en question
0
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
28 févr. 2007 à 12:34
#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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
1 mars 2007 à 02:23
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
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
1 mars 2007 à 03:05
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
1 mars 2007 à 10:49
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 mars 2007 à 11:27
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
1 mars 2007 à 19:22
Si tu es sous linux utilises la commandes dos2unix.
dos2unix *cpp
dos2unix *hpp
0
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
7 mars 2007 à 09:27
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
7 mars 2007 à 10:29
Installe le paquet dosfstools.
dosfstools - Utilities to create and check MS-DOS FAT filesystems
0
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
7 mars 2007 à 11:42
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
7 mars 2007 à 14:21
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
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
7 mars 2007 à 14:29
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
7 mars 2007 à 14:50
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
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
7 mars 2007 à 15:00
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 mars 2007 à 17:20
Salut.
ote moi d'un doute, tu tape EXACTEMENT gcc wbodo.cpp wbodo.h ?
Si oui, c'est inutile de compiler un .h !
0
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
7 mars 2007 à 17:23
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 mars 2007 à 17:33
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
hades06 Messages postés 16 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 10 novembre 2009
14 mars 2007 à 09:24
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