Hi,

I think i know this problem... this is a problem with the graph card of the computer... try using a virtual machine and running webots on it...

Regards,
Igor Antunes



On Seg Out 11 7:31 , Olivier Michel sent:

Dear Apek,

Please submit a bug report at http://www.cyberbotics.com/bug and describe precisely what you mean by "the screen turns all distorted".

Best regards,

-Olivier

On 10/11/10 3:19 AM, Apek Cheeky wrote:
Hi,

        My code here seems to be working but the ground sensor area still does not seem to be following the line. Can anybody help? I'm using webots. I tried doing simulation but the screen turns all distorted so i'm not able to see what its doing.


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
 
#define TIME_STEP_CAM  64
#define TIME_STEP 64
#define TRUE    1
#define FALSE   0
#define LEFT   0
#define RIGHT  1
#define WHITE 0
#define BLACK 1

#define NB_LEDS         10
#define NB_DIST_SENS    8
#define PS_RIGHT_10     0
#define PS_RIGHT_45     1
#define PS_RIGHT_90     2
#define PS_RIGHT_REAR   3
#define PS_LEFT_REAR    4
#define PS_LEFT_90      5
#define PS_LEFT_45      6
#define PS_LEFT_10      7
#define NB_FLOOR_SENS 3
#define FS_WHITE 900
#define FS_LEFT 0
#define FS_CENTER 1
#define FS_RIGHT 2
 WbDeviceTag cam;
 WbDeviceTag ps[NB_DIST_SENS];
 WbDeviceTag fs[NB_FLOOR_SENS];
 WbDeviceTag led[NB_LEDS];
 
 
 int speed[2]={0,0};
 int ps_value[NB_DIST_SENS]={0,0,0,0,0,0,0,0};
 const int PS_OFFSET_REALITY[NB_DIST_SENS] = {480,170,320,500,600,680,210,640};
 unsigned short fs_value[NB_FLOOR_SENS]={0,0,0};
 unsigned short width,height;
 int i;
 int shapesize=0;
 int delay=0;
 int shapechecking,whitechecking;
 int Itriangle,square,triangle;
 int stop=0;
 
 void Sensor_check()
{
    for(i=0;i
    {
      fs_value[i]=(int)wb_distance_sensor_get_value(fs[i]);
    }
    for(i=0;i
    {
      ps_value[i]=(int)wb_distance_sensor_get_value(ps[i]);
    }
}
void UTurn()
{
    while((int)fs_value[0]>330)
    {
        speed[RIGHT]=400;//rotate right
        speed[LEFT]=-400;
        wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
        Sensor_check();
    }
}
void Offled()
{
   for(i=0;i<9;i++)
      {
        wb_led_set(led[i],FALSE);
      }
}
 
 void MoveObstacle()
 {
    Sensor_check();
   
    while ((int)ps_value[0]<2000&&(int)ps_value[7]<2000)
    {
      Sensor_check();
      speed[RIGHT]=300;
      speed[LEFT]=300;
      wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
    }
   
    delay=10000;
   
    while (delay!=0)
    {
      wb_led_set(led[0],TRUE);
      wb_led_set(led[7],TRUE);
      wb_led_set(led[6],TRUE);
      speed[RIGHT]=450;
      speed[LEFT]=-450;
      wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
      delay--;
    }
   
    Offled();
   
    delay=12000;
    while (delay!=0)
    {
      wb_led_set(led[0],TRUE);
      wb_led_set(led[8],TRUE);
      speed[RIGHT]=650;
      speed[LEFT]=650;
      wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
      delay--;
    }
   
    Offled();
   
    delay=12000;
    while (delay!=0)
    {
      wb_led_set(led[5],TRUE);
      wb_led_set(led[4],TRUE);
      speed[RIGHT]=-650;
      speed[LEFT]=-650;
      wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
      delay--;
     
    }
   
    Offled();
    wb_led_set(led[0],TRUE);
    wb_led_set(led[1],TRUE);
    wb_led_set(led[2],TRUE);
    speed[RIGHT]=-300;
    speed[LEFT]=-300;
    wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
  }
 
 void black_line()
{
 
    Sensor_check();
    if((int)fs_value[2]>330)
    {
          speed[RIGHT]=-180;//rotate right
          speed[LEFT]=100;
          wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
    }
    else if((int)fs_value[0]>330)
    {
          speed[RIGHT]=100;// rotate left
          speed[LEFT]=-180;
          wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
    }
    else if((int)fs_value[1]>330)
    {
        speed[RIGHT]=400;// forward
        speed[LEFT]=400;
        wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
    }
   
}
void movewall()
 { 
 
    speed[RIGHT]=400;
    speed[LEFT]=400;
    wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
   
    Sensor_check();
    while((int)ps_value[0]>200 || (int)ps_value[7]>200)
    {
      Sensor_check();
      black_line();
    }
 
  
 }
 
 void shape()
 {
    if(shapesize==0)
    {
      shapesize=shapechecking;
    }
    else if(shapesize3)
    {
      triangle++;
    }
     else if(shapesize>shapechecking&&whitechecking>3)
    {
      Itriangle++;
    }
    else if(shapesize==shapechecking&&whitechecking>3)
    {
      square++;
    }
    shapesize=shapechecking;
 
 }
 void shapecompare()
 {
    if(triangle>square&&triangle>Itriangle)//triangle
    {
      movewall();
    }
    else if(triangleItriangle)//square
    {
      MoveObstacle();
    }
    else if(Itriangle>triangle&&square
    {
      UTurn();
    }
    
    Offled();
    triangle=0;
    square=0;
    Itriangle=0;
    shapesize=0;
    whitechecking=0;
 }
 
 void CheckCamera()
 {
    int reg1,x,y;
    const unsigned char *image;
    cam = wb_robot_get_device("camera");
    wb_camera_enable(cam,TIME_STEP_CAM);
    width = wb_camera_get_width(cam);
    height = wb_camera_get_height(cam);
    image = wb_camera_get_image(cam);
 
    for (y=38;y>0;y--)
     {
      for (x=0;x
      {
        reg1 = wb_camera_image_get_red(image,width,x,y);
        if (reg1<50)
        {
          shapechecking=x;
          whitechecking=x-1;
          shape();
          y--;
          x=0;
        }
      }
     }
 }
 
 
int main()
{
  wb_robot_init();
  char light[]="led0";
  for(i=0;i
  {
    led[i]=wb_robot_get_device(light);
    light[3]++;
  }
  
  char named[]="fs0";
  for (i = 0; i < NB_FLOOR_SENS; i++)
  {
   
    fs[i] = wb_robot_get_device(named); /* floor sensors */
    wb_distance_sensor_enable(fs[i],TIME_STEP);
    named[2]++;
  }
 
  char textPS[]="ps0";
  for(i=0;i
  {
    ps[i]=wb_robot_get_device(textPS);
    wb_distance_sensor_enable(ps[i],TIME_STEP);
    textPS[2]++;
  }
 
   //main loop
  while(stop==0)
  {
  
    Sensor_check();
 
    if((int)ps_value[0]>200||(int)ps_value[7]>200)
    {
      speed[RIGHT]=0;
      speed[LEFT]=0;
      wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]);
      CheckCamera();
      shapecompare();
    }
    else
    {
      black_line();
    }
  }
  /* Enter here exit cleanup code */
 
  /* Necessary to cleanup webots stuff */
  wb_robot_cleanup();
 
  return 0;
}



_______________________________________________
E-puck-user mailing list
[email protected]
https://mail.gna.org/listinfo/e-puck-user


  


Área de Clientes Optimus Clix – Toda a gestão dos seus serviços online!
http://cliente.clix.pt/.
_______________________________________________
E-puck-user mailing list
[email protected]
https://mail.gna.org/listinfo/e-puck-user

Reply via email to