void reset(void) { int i; char text[4]; text[1]='s'; text[3]='\0'; emitter = wb_robot_get_device("emitter"); rec = wb_robot_get_device("receiver"); }
static void reset(void) { wb_robot_init(); // Initialization char s[4]="ps0"; int i; for(i=0; i<NB_SENSORS;i++) { ps[i]=wb_robot_get_device(s); // the device name is specified in the world file s[2]++; // increases the device number } gps=wb_robot_get_device("gps"); }
int main() { wb_robot_init(); printf("hello from NAO\n"); time_step = wb_robot_get_basic_time_step(); receiver = wb_robot_get_device("receiver"); wb_receiver_enable(receiver, time_step); emitter = wb_robot_get_device("emitter2"); wb_receiver_enable(emitter, time_step); find_and_enable_devices(); wb_motor_set_position (RShoulderPitch, 1.57079633); wb_motor_set_position (LShoulderPitch, 1.57079633); wb_motor_set_position (HeadYaw, 0.0); //wb_motor_set_position (HeadPitch, 0.1); //10 degrees // run until simulation is restarted while (wb_robot_step(time_step) != -1) { //check_for_new_genes(); //sense_compute_and_actuate(); //int samples = wb_camera_get_width(LaserHead); //double field_of_view = wb_camera_get_fov(LaserHead); //const float *values = wb_camera_get_range_image(LaserHead); report_step_state_to_supervisor(); //printf("%f\n", field_of_view); //printf("size: %d\n", sizeof(values)); //int i; //for(i=0; i<samples;i++){ // printf("value %d is %f\n",i, values[i]); //} if(wb_robot_step(time_step) == 0){ //report_step_state_to_supervisor(); } } wb_robot_cleanup(); return 0; }
int main() { double w_left, w_right; wb_robot_init(); WbDeviceTag human02_wheel; human02_wheel = wb_robot_get_device("human02_plate"); int time_step = wb_robot_get_basic_time_step(); wb_differential_wheels_enable_encoders(time_step); for (;;) { w_left = 10.; w_right = 10.; wb_differential_wheels_set_speed(w_left, w_right); //printf(" left_encoder=%7.5f\n",wb_differential_wheels_get_left_encoder()); wb_robot_step(32); } return 0; }
static void reset(void) { int i; char text[5]="led0"; for(i=0;i<NB_LEDS;i++) { led[i]=wb_robot_get_device(text); text[3]++; wb_led_set(led[i],0); } // enable the camera 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); }
int main(int argc, char *argv[]) { /* define variables */ WbDeviceTag turret_sensor; double perf_data[3]; double clock = 0; /* initialize Webots */ wb_robot_init(); // read robot id from the robot's name char* robot_name; robot_name=(char*) wb_robot_get_name(); sscanf(robot_name,"e-puck%d",&robot_id); emitter = wb_robot_get_device("emitter"); wb_emitter_set_range(emitter,COM_RANGE); receiver = wb_robot_get_device("receiver"); wb_receiver_set_channel(receiver,0); wb_receiver_enable(receiver,TIME_STEP); wb_robot_step(TIME_STEP); turret_sensor = wb_robot_get_device("ts"); wb_light_sensor_enable(turret_sensor,TIME_STEP); /* main loop */ while (wb_robot_step(TIME_STEP) != -1) { clock += (double)TIME_STEP/1000; /* get light sensor value */ sensor_value = wb_light_sensor_get_value(turret_sensor); if(wb_receiver_get_queue_length(receiver) > 0) { wb_emitter_set_channel(emitter,3); perf_data[0] = (double)robot_id; perf_data[1] = (double)(pkt_count-1); perf_data[2] = 0; wb_emitter_send(emitter,perf_data,3*sizeof(double)); break; // stop node } else { send_data(clock); // send measurement data } } wb_robot_cleanup(); return 0; }
/* * Reset the robot's devices and get its ID */ static void reset() { int i; wb_robot_init(); char s[4]="ps0"; for(i=0; i<NB_SENSORS;i++) { ds[i]=wb_robot_get_device(s); // the device name is specified in the world file s[2]++; // increases the device number } for(i=0; i<FLOCK_SIZE; i++) { timestamp[i] = 0; relative_pos[i][0] = 0; relative_pos[i][1] = 0; relative_pos[i][2] = 0; } maxTimestamp = 1; robot_name=(char*) wb_robot_get_name(); for(i=0;i<NB_SENSORS;i++) wb_distance_sensor_enable(ds[i],64); my_position[0] = 0; my_position[1] = 0; my_position[2] = 0; //printf("reset: my pos: %f, %f\n", my_position[0], my_position[1]); wb_differential_wheels_enable_encoders(64); //Reading the robot's name. Pay attention to name specification when adding robots to the simulation! sscanf(robot_name,"epuck%d",&robot_id_u); // read robot id from the robot's name robot_id = robot_id_u%FLOCK_SIZE; // normalize between 0 and FLOCK_SIZE-1 sprintf(robot_number, "%d", robot_id_u); receiver = wb_robot_get_device("receiver"); receiver0 = wb_robot_get_device("receiver0"); emitter = wb_robot_get_device("emitter"); emitter0 = wb_robot_get_device("emitter0"); wb_receiver_enable(receiver,32); wb_receiver_enable(receiver0,32); for(i=0; i<FLOCK_SIZE; i++) { initialized[i] = 0; // Set initialization to 0 (= not yet initialized) } }
void reset() { int i; robotName = wb_robot_get_name(); currentState = FORWARD; // Make sure to initialize the RNG with different values for each thread srand(time(NULL) + (int)&robotName); char e_puck_name[] = "ps0"; char sensorsName[5]; // Emitter and receiver device tags emitterTag = wb_robot_get_device("emitter"); receiverTag = wb_robot_get_device("receiver"); // Configure communication devices wb_receiver_enable(receiverTag, TIME_STEP); wb_emitter_set_range(emitterTag, COMM_RADIUS); wb_emitter_set_channel(emitterTag, COMMUNICATION_CHANNEL); wb_receiver_set_channel(receiverTag, COMMUNICATION_CHANNEL); sprintf(sensorsName, "%s", e_puck_name); for (i = 0; i < NB_SENSORS; i++) { sensors[i] = wb_robot_get_device(sensorsName); wb_distance_sensor_enable(sensors[i], TIME_STEP); if ((i + 1) >= 10) { sensorsName[2] = '1'; sensorsName[3]++; if ((i + 1) == 10) { sensorsName[3] = '0'; sensorsName[4] = (char) '\0'; } } else { sensorsName[2]++; } } wb_differential_wheels_enable_encoders(TIME_STEP); printf("Robot %s is reset\n", robotName); return; }
// controller initialization static void reset(void) { fitness_reset(); int i; char name[] = "ps0"; for(i = 0; i < NB_SENSORS; i++) { ps[i]=wb_robot_get_device(name); // get sensor handle // perform distance measurements every TIME_STEP millisecond wb_distance_sensor_enable(ps[i], TIME_STEP); name[2]++; // increase the device name to "ps1", "ps2", etc. } }
int main() { const char *SERVO_NAMES[NUM_SERVOS] = { "servo_r0", "servo_r1", "servo_r2", "servo_l0", "servo_l1", "servo_l2"}; WbDeviceTag servos[NUM_SERVOS]; int elapsed = 0; int state, i; long double pos = 0,lastPos = 0; // int 害死了 0-6.28 int flag = 0; const int dir[] = {1,1,1,1,1,1};//{1,1,1,-1,-1,-1} // 增加在地面上的时间,就会更加稳定 const double rate = 1.0/6;// 1/4 wb_robot_init(); for (i = 0; i < NUM_SERVOS; i++) { servos[i] = wb_robot_get_device(SERVO_NAMES[i]); if (!servos[i]) { printf("could not find servo: %s\n",SERVO_NAMES[i]); } } pos = M_PI * rate ; flag = 0; while(wb_robot_step(TIME_STEP)!=-1) { elapsed++; state = (elapsed / 25 + 1) % NUM_STATES; lastPos = pos; if(flag) pos += 2*M_PI * rate; else pos += 2*M_PI * (1-rate); flag = !flag; for (i = 0; i < 6; i+=2 ){ wb_servo_set_position(servos[i], dir[i]*pos); } for (i = 1; i < 6; i+=2 ) { wb_servo_set_position(servos[i], dir[i]*lastPos); } } wb_robot_cleanup(); return 0; }
int main(int argc, char **argv) { wb_robot_init(); int time_step = wb_robot_get_basic_time_step(); WbDeviceTag gps = wb_robot_get_device("GPS"); wb_gps_enable(gps, time_step); WbDeviceTag emitter = wb_robot_get_device("emitter"); wb_emitter_set_channel(emitter,13); double* gps_value; char message[32]; while (wb_robot_step(time_step) != -1){ gps_value = wb_gps_get_values(gps); //Something's wrong with deserialization //So we make a fixed width string here sprintf(message,"{%0.3f,%0.3f}",gps_value[0]/2+5.0,-gps_value[2]/2+5.0); wb_emitter_send(emitter,message,strlen(message)+1); // printf("%s\n",message); } wb_robot_cleanup(); return 0; }
/* * Initialize flock position and devices */ void reset(void) { wb_robot_init(); emitter = wb_robot_get_device("emitter"); if (emitter==0) printf("missing emitter\n"); char rob[7] = "epuck0"; int i; for (i=0;i<FLOCK_SIZE;i++) { sprintf(rob,"epuck%d",i+offset); robs[i] = wb_supervisor_node_get_from_def(rob); robs_trans[i] = wb_supervisor_node_get_field(robs[i],"translation"); robs_rotation[i] = wb_supervisor_node_get_field(robs[i],"rotation"); } }
int main(int argc, char **argv) { wb_robot_init(); int i; WbDeviceTag servos[NSERVOS]; WbDeviceTag head_led; for (i=0; i<NSERVOS; i++) servos[i] = wb_robot_get_device(servo_names[i]); head_led = wb_robot_get_device("HeadLed"); wb_led_set(head_led, 0x40C040); do { double t = wb_robot_get_time(); for (i=0; i<6; i++) wb_servo_set_position(servos[i], amplitudes[i]*sin(frequency*t) + offsets[i]); } while (wb_robot_step(TIME_STEP) != -1); wb_robot_cleanup(); return 0; }
/* * Reset the robot's devices and get its ID */ static void reset() { wb_robot_init(); receiver = wb_robot_get_device("receiver"); emitter = wb_robot_get_device("emitter"); compass2 = wb_robot_get_device("compass2"); receiver0 = wb_robot_get_device("receiver0"); emitter0 = wb_robot_get_device("emitter0"); int i; char s[4]="ps0"; for(i=0; i<NB_SENSORS;i++) { ds[i]=wb_robot_get_device(s); // the device name is specified in the world file s[2]++; // increases the device number } robot_name=(char*) wb_robot_get_name(); for(i=0; i<FLOCK_SIZE; i++) { relative_pos[i][0] = my_position[0] = 0; relative_pos[i][1] = my_position[1] = 0; relative_pos[i][2] = my_position[2] = 0; } for(i=0;i<NB_SENSORS;i++) wb_distance_sensor_enable(ds[i],64); wb_receiver_enable(receiver,64); wb_receiver_enable(receiver0,64); wb_compass_enable(compass2, 64); //Reading the robot's name. Pay attention to name specification when adding robots to the simulation! sscanf(robot_name,"epuck%d",&robot_id_u); // read robot id from the robot's name robot_id = robot_id_u%FLOCK_SIZE; // normalize between 0 and FLOCK_SIZE-1 for(i=0; i<FLOCK_SIZE; i++) { initialized[i] = 0; // Set initialization to 0 (= not yet initialized) } }
static void initialize() { wb_robot_init(); currentBehavior = RANDOM_MOVER; ps0 = wb_robot_get_device("ps0"); ps1 = wb_robot_get_device("ps1"); ps2 = wb_robot_get_device("ps2"); ps3 = wb_robot_get_device("ps3"); ps4 = wb_robot_get_device("ps4"); ps5 = wb_robot_get_device("ps5"); ps6 = wb_robot_get_device("ps6"); ps7 = wb_robot_get_device("ps7"); ls0 = wb_robot_get_device("ls0"); ls1 = wb_robot_get_device("ls1"); ls2 = wb_robot_get_device("ls2"); ls3 = wb_robot_get_device("ls3"); ls4 = wb_robot_get_device("ls4"); ls5 = wb_robot_get_device("ls5"); ls6 = wb_robot_get_device("ls6"); ls7 = wb_robot_get_device("ls7"); led4 = wb_robot_get_device("led4"); int sensorTimeout = 100; wb_distance_sensor_enable(ps0, sensorTimeout); wb_distance_sensor_enable(ps1, sensorTimeout); wb_distance_sensor_enable(ps2, sensorTimeout); wb_distance_sensor_enable(ps3, sensorTimeout); wb_distance_sensor_enable(ps4, sensorTimeout); wb_distance_sensor_enable(ps5, sensorTimeout); wb_distance_sensor_enable(ps6, sensorTimeout); wb_distance_sensor_enable(ps7, sensorTimeout); wb_light_sensor_enable(ls0, sensorTimeout); wb_light_sensor_enable(ls1, sensorTimeout); wb_light_sensor_enable(ls2, sensorTimeout); wb_light_sensor_enable(ls3, sensorTimeout); wb_light_sensor_enable(ls4, sensorTimeout); wb_light_sensor_enable(ls5, sensorTimeout); wb_light_sensor_enable(ls6, sensorTimeout); wb_light_sensor_enable(ls7, sensorTimeout); wb_led_set(led4, 1); }
//////////////////////////////////////////// // Main int main() { int i, speed[2], ps_offset[NB_DIST_SENS]={0,0,0,0,0,0,0,0}, Mode=1; /* intialize Webots */ wb_robot_init(); /* initialization */ char name[20]; for (i = 0; i < NB_LEDS; i++) { sprintf(name, "led%d", i); led[i] = wb_robot_get_device(name); /* get a handler to the sensor */ } for (i = 0; i < NB_DIST_SENS; i++) { sprintf(name, "ps%d", i); ps[i] = wb_robot_get_device(name); /* proximity sensors */ wb_distance_sensor_enable(ps[i],TIME_STEP); } for (i = 0; i < NB_GROUND_SENS; i++) { sprintf(name, "gs%d", i); gs[i] = wb_robot_get_device(name); /* ground sensors */ wb_distance_sensor_enable(gs[i],TIME_STEP); } for(;;) // Main loop { // Run one simulation step wb_robot_step(TIME_STEP); // Reset all BB variables when switching from simulation to real robot and back if (Mode!=wb_robot_get_mode()) { oam_reset = TRUE; llm_active = FALSE; llm_past_side = NO_SIDE; ofm_active = FALSE; lem_active = FALSE; lem_state = LEM_STATE_STANDBY; Mode = wb_robot_get_mode(); if (Mode == SIMULATION) { for(i=0;i<NB_DIST_SENS;i++) ps_offset[i]=PS_OFFSET_SIMULATION[i]; wb_differential_wheels_set_speed(0,0); wb_robot_step(TIME_STEP); // Just run one step to make sure we get correct sensor values printf("\n\n\nSwitching to SIMULATION and reseting all BB variables.\n\n"); } else if (Mode == REALITY) { for(i=0;i<NB_DIST_SENS;i++) ps_offset[i]=PS_OFFSET_REALITY[i]; wb_differential_wheels_set_speed(0,0); wb_robot_step(TIME_STEP); // Just run one step to make sure we get correct sensor values printf("\n\n\nSwitching to REALITY and reseting all BB variables.\n\n"); } } // read sensors value for(i=0;i<NB_DIST_SENS;i++) ps_value[i] = (((int)wb_distance_sensor_get_value(ps[i])-ps_offset[i])<0)?0:((int)wb_distance_sensor_get_value(ps[i])-ps_offset[i]); for(i=0;i<NB_GROUND_SENS;i++) gs_value[i] = wb_distance_sensor_get_value(gs[i]); // Reset all BB variables when switching from simulation to real robot and back if (Mode!=wb_robot_get_mode()) { oam_reset = TRUE; llm_active = FALSE; llm_past_side = NO_SIDE; ofm_active = FALSE; lem_active = FALSE; lem_state = LEM_STATE_STANDBY; Mode = wb_robot_get_mode(); if (Mode == SIMULATION) printf("\nSwitching to SIMULATION and reseting all BB variables.\n\n"); else if (Mode == REALITY) printf("\nSwitching to REALITY and reseting all BB variables.\n\n"); } // Speed initialization speed[LEFT] = 0; speed[RIGHT] = 0; // *** START OF SUBSUMPTION ARCHITECTURE *** // LFM - Line Following Module LineFollowingModule(); // Speed computation speed[LEFT] = lfm_speed[LEFT]; speed[RIGHT] = lfm_speed[RIGHT]; // *** END OF SUBSUMPTION ARCHITECTURE *** // Debug display printf("OAM %d side %d \n", oam_active, oam_side); // Set wheel speeds wb_differential_wheels_set_speed(speed[LEFT],speed[RIGHT]); } return 0; }
int main(int argc, char **argv) { printf("Comenzo todo\n"); wb_robot_init(); printf("Iniciando el sistema\n"); ros::init(argc, argv, "NEURONAL"); ros::NodeHandle n,nh,nh2; ros::Subscriber chatter_sub = n.subscribe("/auto_controller/command", 100, chatterCallback); // find front wheels left_front_wheel = wb_robot_get_device("left_front_wheel"); right_front_wheel = wb_robot_get_device("right_front_wheel"); wb_servo_set_position(left_front_wheel, INFINITY); wb_servo_set_position(right_front_wheel, INFINITY); // get steering motors left_steer = wb_robot_get_device("left_steer"); right_steer = wb_robot_get_device("right_steer"); // camera device camera = wb_robot_get_device("camera"); wb_camera_enable(camera, TIME_STEP); camera_width = wb_camera_get_width(camera); camera_height = wb_camera_get_height(camera); camera_fov = wb_camera_get_fov(camera); // initialize gps gps = wb_robot_get_device("gps"); wb_gps_enable(gps, TIME_STEP); // initialize display (speedometer) display = wb_robot_get_device("display"); speedometer_image = wb_display_image_load(display, "/root/research/PROYECTOTP/controllers/destiny_controller/speedometer.png"); wb_display_set_color(display, 0xffffff); // SICK sensor sick = wb_robot_get_device("lms291"); wb_camera_enable(sick, TIME_STEP); sick_width = wb_camera_get_width(sick); sick_range = wb_camera_get_max_range(sick); sick_fov = wb_camera_get_fov(sick); // start engine speed=64.0; // km/h // main loop printf("Iniciando el ciclo de peticiones\n"); // set_autodrive(false);z while (1) { const unsigned char *camera_image = wb_camera_get_image(camera); compute_gps_speed(); update_display(); ros::spinOnce(); wb_robot_step(TIME_STEP); } wb_robot_cleanup(); return 0; // ignored }
// entry point of the controller int main(int argc, char **argv) { // initialize the Webots API wb_robot_init(); // internal variables int i; WbDeviceTag ps[8]; char ps_names[8][4] = { "ps0", "ps1", "ps2", "ps3", "ps4", "ps5", "ps6", "ps7" }; // initialize devices for (i=0; i<8 ; i++) { ps[i] = wb_robot_get_device(ps_names[i]); wb_distance_sensor_enable(ps[i], TIME_STEP); } WbDeviceTag ls[8]; char ls_names[8][4] = { "ls0", "ls1", "ls2", "ls3", "ls4", "ls5", "ls6", "ls7" }; // initialize devices for (i=0; i<8 ; i++) { ls[i] = wb_robot_get_device(ls_names[i]); wb_light_sensor_enable(ls[i], TIME_STEP); } WbDeviceTag led[8]; char led_names[8][5] = { "led0", "led1", "led2", "led3", "led4", "led5", "led6", "led7" }; // initialize devices for (i=0; i<8 ; i++) { led[i] = wb_robot_get_device(led_names[i]); } // feedback loop while (1) { // step simulation int delay = wb_robot_step(TIME_STEP); if (delay == -1) // exit event from webots break; // read sensors outputs double ps_values[8]; for (i=0; i<8 ; i++) ps_values[i] = wb_distance_sensor_get_value(ps[i]); update_search_speed(ps_values, 250); // set speeds double left_speed = get_search_left_wheel_speed(); double right_speed = get_search_right_wheel_speed(); // read IR sensors outputs double ls_values[8]; for (i=0; i<8 ; i++){ ls_values[i] = wb_light_sensor_get_value(ls[i]); } int active_ir = FALSE; for(i=0; i<8; i++){ if(ls_values[i] < 2275){ active_ir = TRUE; } } if(active_ir == TRUE){ swarm_retrieval(ls_values, ps_values, 2275); left_speed = get_retrieval_left_wheel_speed(); right_speed = get_retrieval_right_wheel_speed(); } if(is_pushing() == TRUE || stagnation == TRUE){ // check for stagnation stagnation_counter = stagnation_counter + 1; if(stagnation_counter == min((50 + positive_feedback * 50), 300) && stagnation == FALSE){ stagnation_counter = 0; // reset counter stagnation_check = TRUE; for(i=0; i<8; i++) prev_dist_values[i] = ps_values[i]; } if(stagnation_check == TRUE){ left_speed = 0; right_speed = 0; } if(stagnation_check == TRUE && stagnation_counter == 5){ stagnation_counter = 0; // reset counter reset_stagnation(); valuate_pushing(ps_values, prev_dist_values); stagnation = get_stagnation_state(); stagnation_check = FALSE; if(stagnation == TRUE) positive_feedback = 0; else positive_feedback = positive_feedback + 1; } if(stagnation == TRUE){ stagnation_recovery(ps_values, 300); left_speed = get_stagnation_left_wheel_speed(); right_speed = get_stagnation_right_wheel_speed(); if(get_stagnation_state() == FALSE){ reset_stagnation(); stagnation = FALSE; stagnation_counter = 0; } } } // write actuators inputs wb_differential_wheels_set_speed(left_speed, right_speed); for(i=0; i<8; i++){ wb_led_set(led[i], get_LED_state(i)); } } // cleanup the Webots API wb_robot_cleanup(); return 0; //EXIT_SUCCESS }
// // Reset the robot controller and initiate the sensors and emitter/receiver // static int reset() { int i; mode =1; emitter = wb_robot_get_device("emitter"); //buffer = (double *) emitter_get_buffer(emitter); receiver = wb_robot_get_device("receiver"); wb_receiver_enable(receiver, TIME_STEP); char text[5]="led0"; for(i=0;i<NB_LEDS;i++) { led[i]=wb_robot_get_device(text); // get a handler to the sensor text[3]++; // increase the device name to "ps1", "ps2", etc. } text[0]='p'; text[1]='s'; text[3]='\0'; text[2]='0'; ps[0] = wb_robot_get_device(text); // proximity sensors text[2]='7'; ps[1] = wb_robot_get_device(text); // proximity sensors text[2]='1'; ps[2] = wb_robot_get_device(text); // proximity sensors text[2]='6'; ps[3] = wb_robot_get_device(text); // proximity sensors text[2]='2'; ps[4] = wb_robot_get_device(text); // proximity sensors text[2]='5'; ps[5] = wb_robot_get_device(text); // proximity sensors text[2]='3'; ps[6] = wb_robot_get_device(text); // proximity sensors text[2]='4'; ps[7] = wb_robot_get_device(text); // proximity sensors // Enable proximity and floor sensors for(i=0;i<NB_DIST_SENS;i++) { wb_distance_sensor_enable(ps[i],TIME_STEP); printf("ps[%d] is active\n",i); } // Enable GPS sensor to determine position gps=wb_robot_get_device("gps"); wb_gps_enable(gps, TIME_STEP); printf("gps is active\n"); return 1; }
int main(int argc, char **argv) { printf("Comenzo todo\n"); wb_robot_init(); printf("Iniciando el sistema\n"); // Ros initialization ros::init(argc, argv, "Simulador"); ros::init(argc, argv, "Imagenes_de_Simulador"); ros::NodeHandle n,nh,nh2; // ros::Subscriber chatter_sub = n.subscribe("/auto_controller/command", 100, chatterCallback); ros::Subscriber chatter_sub = n.subscribe("/auto_controller/command", 100, chatterCallback); image_transport::ImageTransport it(nh); //OpenCV HighGUI call to destroy a display window on shut-down. image_transport::ImageTransport it2(nh2); image_transport::Publisher pub2 = it.advertise("/webot/camera", 1); //ros::spin(); // find front wheels left_front_wheel = wb_robot_get_device("left_front_wheel"); right_front_wheel = wb_robot_get_device("right_front_wheel"); wb_servo_set_position(left_front_wheel, INFINITY); wb_servo_set_position(right_front_wheel, INFINITY); // get steering motors left_steer = wb_robot_get_device("left_steer"); right_steer = wb_robot_get_device("right_steer"); // camera device camera = wb_robot_get_device("camera"); wb_camera_enable(camera, TIME_STEP); camera_width = wb_camera_get_width(camera); camera_height = wb_camera_get_height(camera); camera_fov = wb_camera_get_fov(camera); // initialize gps gps = wb_robot_get_device("gps"); wb_gps_enable(gps, TIME_STEP); // initialize display (speedometer) display = wb_robot_get_device("display"); speedometer_image = wb_display_image_load(display, "/root/research/PROYECTOTP/controllers/destiny_controller/speedometer.png"); wb_display_set_color(display, 0xffffff); // start engine speed=64.0; // km/h //print_help(); // allow to switch to manual control //wb_robot_keyboard_enable(TIME_STEP); // main loop printf("Iniciando el ciclo de peticiones\n"); // set_autodrive(false);z while (1) { const unsigned char *camera_image = wb_camera_get_image(camera); compute_gps_speed(); update_display(); //wb_camera_save_image (camera, "/tmp/imagen.png", 100); //cv::WImageBuffer3_b image(cvLoadImage("/tmp/imagen.png", CV_LOAD_IMAGE_COLOR)); IplImage* imagen=save_camera_image(camera_image); sensor_msgs::ImagePtr msg = sensor_msgs::CvBridge::cvToImgMsg(imagen, "bgr8"); pub2.publish(msg); cvReleaseImage(&imagen ); ros::spinOnce(); // wb_servo_set_position(left_steer, 0); // wb_servo_set_position(right_steer, 0); wb_robot_step(TIME_STEP); } wb_robot_cleanup(); return 0; // ignored }
int main() { printf("hello from supervisor\n"); const char *robot_name[ROBOTS] = {"NAO"}; WbNodeRef node; WbFieldRef robot_translation_field[ROBOTS],robot_rotation_field[ROBOTS],ball_translation_field; //WbDeviceTag emitter, receiver; int i,j; int score[2] = { 0, 0 }; double time = 10 * 60; /* a match lasts for 10 minutes */ double ball_reset_timer = 0; double ball_initial_translation[3] = { -2.5, 0.0324568, 0 }; double robot_initial_translation[ROBOTS][3] = { {-4.49515, 0.234045, -0.0112415}, {0.000574037, 0.332859, -0.00000133636}}; double robot_initial_rotation[ROBOTS][4] = { {0.0604202, 0.996035, -0.0652942, 1.55047}, {0.000568956, 0.70711, 0.707104, 3.14045}}; double packet[ROBOTS * 3 + 2]; char time_string[64]; const double *robot_translation[ROBOTS], *robot_rotation[ROBOTS], *ball_translation; wb_robot_init(); time_step = wb_robot_get_basic_time_step(); emitter = wb_robot_get_device("emitter"); wb_receiver_enable(emitter, time_step); receiver = wb_robot_get_device("receiver"); wb_receiver_enable(receiver, time_step); for (i = 0; i < ROBOTS; i++) { node = wb_supervisor_node_get_from_def(robot_name[i]); robot_translation_field[i] = wb_supervisor_node_get_field(node,"translation"); robot_translation[i] = wb_supervisor_field_get_sf_vec3f(robot_translation_field[i]); for(j=0;j<3;j++) robot_initial_translation[i][j]=robot_translation[i][j]; robot_rotation_field[i] = wb_supervisor_node_get_field(node,"rotation"); robot_rotation[i] = wb_supervisor_field_get_sf_rotation(robot_rotation_field[i]); for(j=0;j<4;j++) robot_initial_rotation[i][j]=robot_rotation[i][j]; } node = wb_supervisor_node_get_from_def("BALL"); ball_translation_field = wb_supervisor_node_get_field(node,"translation"); ball_translation = wb_supervisor_field_get_sf_vec3f(ball_translation_field); for(j=0;j<3;j++) ball_initial_translation[j]=ball_translation[j]; /* printf("ball initial translation = %g %g %g\n",ball_translation[0],ball_translation[1],ball_translation[2]); */ set_scores(0, 0); while(wb_robot_step(TIME_STEP)!=-1) { //printf("supervisor commands START!\n"); check_for_slaves_data(); ball_translation = wb_supervisor_field_get_sf_vec3f(ball_translation_field); for (i = 0; i < ROBOTS; i++) { robot_translation[i]=wb_supervisor_field_get_sf_vec3f(robot_translation_field[i]); /* printf("coords for robot %d: %g %g %g\n",i,robot_translation[i][0],robot_translation[i][1],robot_translation[i][2]); */ packet[3 * i] = robot_translation[i][0]; /* robot i: X */ packet[3 * i + 1] = robot_translation[i][2]; /* robot i: Z */ if (robot_rotation[i][1] > 0) { /* robot i: rotation Ry axis */ packet[3 * i + 2] = robot_rotation[i][3]; /* robot i: alpha */ } else { /* Ry axis was inverted */ packet[3 * i + 2] = -robot_rotation[i][3]; } } packet[3 * ROBOTS] = ball_translation[0]; /* ball X */ packet[3 * ROBOTS + 1] = ball_translation[2]; /* ball Z */ wb_emitter_send(emitter, packet, sizeof(packet)); /* Adds TIME_STEP ms to the time */ time -= (double) TIME_STEP / 1000; if (time < 0) { time = 10 * 60; /* restart */ } sprintf(time_string, "%02d:%02d", (int) (time / 60), (int) time % 60); wb_supervisor_set_label(2, time_string, 0.45, 0.01, 0.1, 0x000000, 0.0); /* black */ if (ball_reset_timer == 0) { if (ball_translation[0] > GOAL_X_LIMIT) { /* ball in the blue goal */ set_scores(++score[0], score[1]); ball_reset_timer = 3; /* wait for 3 seconds before reseting the ball */ } else if (ball_translation[0] < -GOAL_X_LIMIT) { /* ball in the yellow goal */ set_scores(score[0], ++score[1]); ball_reset_timer = 3; /* wait for 3 seconds before reseting the ball */ } } else { ball_reset_timer -= (double) TIME_STEP / 1000.0; if (ball_reset_timer <= 0) { ball_reset_timer = 0; wb_supervisor_field_set_sf_vec3f(ball_translation_field, ball_initial_translation); for (i = 0; i < ROBOTS; i++) { wb_supervisor_field_set_sf_vec3f(robot_translation_field[i], robot_initial_translation[i]); wb_supervisor_field_set_sf_rotation(robot_rotation_field[i], robot_initial_rotation[i]); } } } } wb_robot_cleanup(); return 0; }
static void find_and_enable_devices() { // camera CameraTop = wb_robot_get_device("CameraTop"); CameraBottom = wb_robot_get_device("CameraBottom"); wb_camera_enable(CameraTop, 4 * time_step); wb_camera_enable(CameraBottom, 4 * time_step); // accelerometer accelerometer = wb_robot_get_device("accelerometer"); wb_accelerometer_enable(accelerometer, time_step); // gyro gyro = wb_robot_get_device("gyro"); wb_gyro_enable(gyro, time_step); // inertial unit inertial_unit = wb_robot_get_device("inertial unit"); wb_inertial_unit_enable(inertial_unit, time_step); // ultrasound sensors us[0] = wb_robot_get_device("USSensor1"); us[1] = wb_robot_get_device("USSensor2"); us[2] = wb_robot_get_device("USSensor3"); us[3] = wb_robot_get_device("USSensor4"); int i; for (i = 0; i < 4; i++) wb_distance_sensor_enable(us[i], time_step); // foot sensors fsr3d[0] = wb_robot_get_device("LFsr"); wb_touch_sensor_enable(fsr3d[0], time_step); fsr3d[1] = wb_robot_get_device("RFsr"); wb_touch_sensor_enable(fsr3d[1], time_step); // foot bumpers lfoot_lbumper = wb_robot_get_device("BumperLFootLeft"); lfoot_rbumper = wb_robot_get_device("BumperLFootRight"); rfoot_lbumper = wb_robot_get_device("BumperRFootLeft"); rfoot_rbumper = wb_robot_get_device("BumperRFootRight"); wb_touch_sensor_enable(lfoot_lbumper, time_step); wb_touch_sensor_enable(lfoot_rbumper, time_step); wb_touch_sensor_enable(rfoot_lbumper, time_step); wb_touch_sensor_enable(rfoot_rbumper, time_step); // There are 7 controlable LED groups in Webots leds[0] = wb_robot_get_device("ChestBoard/Led"); leds[1] = wb_robot_get_device("RFoot/Led"); leds[2] = wb_robot_get_device("LFoot/Led"); leds[3] = wb_robot_get_device("Face/Led/Right"); leds[4] = wb_robot_get_device("Face/Led/Left"); leds[5] = wb_robot_get_device("Ears/Led/Right"); leds[6] = wb_robot_get_device("Ears/Led/Left"); // get phalanx motor tags // the real Nao has only 2 motors for RHand/LHand // but in Webots we must implement RHand/LHand with 2x8 motors for (i = 0; i < PHALANX_MAX; i++) { char name[32]; sprintf(name, "LPhalanx%d", i + 1); lphalanx[i] = wb_robot_get_device(name); sprintf(name, "RPhalanx%d", i + 1); rphalanx[i] = wb_robot_get_device(name); } // shoulder pitch motors RShoulderPitch = wb_robot_get_device("RShoulderPitch"); LShoulderPitch = wb_robot_get_device("LShoulderPitch"); // shoulder pitch motors HeadYaw = wb_robot_get_device("HeadYaw"); HeadPitch = wb_robot_get_device("HeadPitch"); //LaserHead = wb_robot_get_device("URG-04LX-UG01"); //wb_camera_enable(LaserHead, 4 * time_step); // keyboard //wb_robot_keyboard_enable(10 * time_step); }
/* * The call to wb_robot_step is mandatory for the function * supervisor_node_was_found to be able to work correctly. */ static void reset(void) { int i; for(i=0; i<POP_SIZE; i++) fitness[i]=-1; srand(time(0)); pF1= fopen("initPop.txt","w+"); //pF2= fopen("real2IntGenome.txt","w+"); //pF3= fopen("encodedPop.txt","w+"); // Initiate the emitter used to send genomes to the experiment emitter = wb_robot_get_device("emittersupervisor"); // Initiate the receiver used to receive fitness receiver = wb_robot_get_device("receiversupervisor"); wb_receiver_enable(receiver, TIME_STEP); // Create a supervised node for the robot robot = wb_supervisor_node_get_from_def("EPUCK"); assert(robot!=NULL); pattern=wb_supervisor_node_get_from_def("FLOOR"); pattern_rotation = wb_supervisor_node_get_field(pattern,"rotation"); assert(pattern!=NULL); assert(pattern_rotation!=NULL); trans_field = wb_supervisor_node_get_field(robot,"translation"); rot_field = wb_supervisor_node_get_field(robot,"rotation"); ctrl_field= wb_supervisor_node_get_field(robot,"controller"); wb_robot_step(0); wb_robot_step(0); //this is magic // set the robot controller to nn const char *controller_name = "drive2"; wb_supervisor_field_set_sf_string(ctrl_field,controller_name); //check whether robot was found if (wb_supervisor_node_get_type(robot) == WB_NODE_NO_NODE) puts("Error: node EPUCK not found!!!"); if(EVOLVING) { //Open log files f1= fopen ("../../data/fitness.txt", "wt"); f2= fopen ("../../data/genomes.txt", "wt"); //pR= fopen("savePop.txt","w+"); //initial weights randomly initializePopulation(); //rtoi(); //real to int conversion before encoding popEncoder(); //puts("NEW EVOLUTION"); //puts("GENERATION 0"); // send genomes to experiment resetRobotPosition(); wb_emitter_send(emitter, (void *)pop_bin[evaluated_inds], GENOME_LENGTH*sizeof(_Bool)); //instead save binary genomes to a file //puts("Genes sent."); } else { // testing best individual // Read best genome from bestgenome.txt and initialize weights. f3= fopen ("../../data/bestgenome.txt", "rt"); fscanf(f3,"%d %d", &generation, &evaluated_inds); //TODO either read binary genome or make sure it is decoded prior to storage for(i=0;i<GENOME_LENGTH;i++) fscanf(f3,"%d ",&pop_bin[0][i]); //printf("TESTING INDIVIDUAL %d, GENERATION %d\n", evaluated_inds, generation); // send genomes to experiment resetRobotPosition(); // wb_emitter_send(emitter, (void *)pop[0], NB_GENES*sizeof(double)); } return; }
int main(int argc, const char *argv[]) { WbDeviceTag speaker, microphone; WbDeviceTag sensors[NUM_SENSORS]; int role = UNKNOWN; int prev_audible = -1; int i, j; // for loops // initialize webots wb_robot_init(); // determine role if (argc >= 2) { if (! strcmp(argv[1], "speaker")) role = SPEAKER; else if (! strcmp(argv[1], "microphone")) role = MICROPHONE; } // use speaker or microphone according to specified role if (role == SPEAKER) speaker = wb_robot_get_device("speaker"); else if (role == MICROPHONE) { // we only use "mic0" in this demo microphone = wb_robot_get_device("mic0"); wb_microphone_enable(microphone, TIME_STEP / 2); } // find distance sensors for (i = 0; i < NUM_SENSORS; i++) { char sensor_name[64]; sprintf(sensor_name, "ps%d", i); sensors[i] = wb_robot_get_device(sensor_name); wb_distance_sensor_enable(sensors[i], TIME_STEP); } // main loop for (;;) { if (role == SPEAKER) { wb_speaker_emit_sample(speaker, SAMPLE, sizeof(SAMPLE)); } else if (role == MICROPHONE) { const short *rec_buffer = (const short *)wb_microphone_get_sample_data(microphone); int numSamples = wb_microphone_get_sample_size(microphone) / sizeof(SAMPLE[0]); if (rec_buffer) { int audible = 0; for (i = 0; i < numSamples; i++) { // warning this demo assumes no noise and therefore depends on the sound plugin configuration ! if (rec_buffer[i] != 0) audible = 1; } if (audible != prev_audible) { printf(audible ? "I hear you now !\n" : "I can't hear you !\n"); prev_audible = audible; } } else printf("received: nothing this time ...\n"); } // read distance sensor values double sensor_values[NUM_SENSORS]; for (i = 0; i < NUM_SENSORS; i++) sensor_values[i] = wb_distance_sensor_get_value(sensors[i]); // compute braitenberg collision avoidance double speed[2]; for (i = 0; i < 2; i++) { speed[i] = 0.0; for (j = 0; j < NUM_SENSORS; j++) speed[i] += EPUCK_MATRIX[j][i] * (1 - (sensor_values[j] / RANGE)); } // set the motors speed wb_differential_wheels_set_speed(speed[0], speed[1]); // simulation step wb_robot_step(TIME_STEP); } return 0; }
// // Reset the robot controller and initiate the sensors and emitter/receiver // static int reset() { int i; mode =1; emitter = wb_robot_get_device("emitter"); //no emitter_enable here on purpose! receiver = wb_robot_get_device("receiver"); wb_receiver_enable(receiver, TIME_STEP); char text[5]="led0"; for(i=0;i<NB_LEDS;i++) { led[i]=wb_robot_get_device(text); // get a handler to the sensor text[3]++; // increase the device name to "ps1", "ps2", etc. } text[0]='p'; text[1]='s'; text[3]='\0'; text[2]='0'; ps[0] = wb_robot_get_device(text); // proximity sensors text[2]='7'; ps[1] = wb_robot_get_device(text); // proximity sensors text[2]='6'; ps[2] = wb_robot_get_device(text); // proximity sensors text[2]='5'; ps[3] = wb_robot_get_device(text); text[2]='4'; ps[4] = wb_robot_get_device(text); text[2]='3'; ps[5] = wb_robot_get_device(text); text[2]='2'; ps[6] = wb_robot_get_device(text); text[2]='1'; ps[7] = wb_robot_get_device(text); // Enable proximity and floor sensors for(i=0;i<NB_DIST_SENS;i++) { wb_distance_sensor_enable(ps[i],TIME_STEP); //printf("ps[%d] is active\n",i); } //get handles for all the floor sensors text[0]='f'; text[2]='1'; fs[0]=wb_robot_get_device(text); //note that fs[0] is a 1x1 array that holds the center floor sensor DeviceTag //enable the center fs just to try wb_distance_sensor_enable(fs[0],TIME_STEP); //enable center floor sensor //printf("fs[%d] is active\n",1); //if this sensor is active increase the fitness // open files for writing //pF1=fopen("act_in.txt","w+"); pF2=fopen("decoded_pop.txt","w+"); // pF3=fopen("nn_values.txt","w+"); return 1; }
// Main function int main(int argc, char **argv) { // Initialize webots wb_robot_init(); // GPS tick data int red_line_tick = 0; int green_circle_tick = 0; // Get robot devices WbDeviceTag left_wheel = wb_robot_get_device("left_wheel"); WbDeviceTag right_wheel = wb_robot_get_device("right_wheel"); // Get robot sensors WbDeviceTag forward_left_sensor = wb_robot_get_device("so3"); wb_distance_sensor_enable(forward_left_sensor, TIME_STEP); WbDeviceTag forward_right_sensor = wb_robot_get_device("so4"); wb_distance_sensor_enable(forward_right_sensor, TIME_STEP); WbDeviceTag left_sensor = wb_robot_get_device("so1"); wb_distance_sensor_enable(left_sensor, TIME_STEP); // Get the compass WbDeviceTag compass = wb_robot_get_device("compass"); wb_compass_enable(compass, TIME_STEP); // Get the GPS data WbDeviceTag gps = wb_robot_get_device("gps"); wb_gps_enable(gps, TIME_STEP); // Prepare robot for velocity commands wb_motor_set_position(left_wheel, INFINITY); wb_motor_set_position(right_wheel, INFINITY); wb_motor_set_velocity(left_wheel, 0.0); wb_motor_set_velocity(right_wheel, 0.0); // Begin in mode 0, moving forward int mode = 0; // Main loop while (wb_robot_step(TIME_STEP) != -1) { // Get the sensor data double forward_left_value = wb_distance_sensor_get_value(forward_left_sensor); double forward_right_value = wb_distance_sensor_get_value(forward_right_sensor); double left_value = wb_distance_sensor_get_value(left_sensor); // Read compass and convert to angle const double *compass_val = wb_compass_get_values(compass); double compass_angle = convert_bearing_to_degrees(compass_val); // Read in the GPS data const double *gps_val = wb_gps_get_values(gps); // Debug printf("Sensor input values:\n"); printf("- Forward left: %.2f.\n",forward_left_value); printf("- Forward right: %.2f.\n",forward_right_value); printf("- Right: %.2f.\n",left_value); printf("- Compass angle (degrees): %.2f.\n", compass_angle); printf("- GPS values (x,z): %.2f, %.2f.\n", gps_val[0], gps_val[2]); // Send acuator commands double left_speed, right_speed; left_speed = 0; right_speed = 0; // List the current modes printf("Mode: %d.\n", mode); printf("Action: "); /* * There are four modes for this controller. * They are listed as below: * 0: Finding initial correct angle * 1: Moving forward * 2: Wall following * 3: Rotating after correct point * 4: Finding green circle + moving on */ // If it reaches GPS coords past the red line if (gps_val[2] > 8.0) { // Up the GPS tick red_line_tick = red_line_tick + 1; } // If the red line tick tolerance reaches // more than 10 per cycle, begin mode 3 if (red_line_tick > 10) { mode = 3; } if (mode == 0) { // Mode 0: Find correct angle printf("Finding correct angle\n"); if (compass_angle < (DESIRED_ANGLE - 1.0)) { // Turn right left_speed = MAX_SPEED; right_speed = 0; } else if (compass_angle > (DESIRED_ANGLE + 1.0)) { // Turn left left_speed = 0; right_speed = MAX_SPEED; } else { // Reached the desired angle, move in a straight line mode = 1; } } else if(mode == 1) { // Mode 1: Move forward printf("Moving forward.\n"); left_speed = MAX_SPEED; right_speed = MAX_SPEED; // When sufficiently close to a wall in front of robot, switch mode to wall following if ((forward_right_value > 500) || (forward_left_value > 500)) { mode = 2; } } else if (mode == 2) { // Mode 2: Wall following if ((forward_right_value > 200) || (forward_left_value > 200)) { printf("Backing up and turning right.\n"); left_speed = MAX_SPEED / 4.0; right_speed = - MAX_SPEED / 2.0; } else { if (left_value > 300) { printf("Turning right away from wall.\n"); left_speed = MAX_SPEED; right_speed = MAX_SPEED / 1.75; } else { if (left_value < 200) { printf("Turning left towards wall.\n"); left_speed = MAX_SPEED / 1.75; right_speed = MAX_SPEED; } else { printf("Moving forward along wall.\n"); left_speed = MAX_SPEED; right_speed = MAX_SPEED; } } } } else if (mode == 3) { // Once arrived, turn to the right printf("Finding correct angle (again)\n"); if (compass_angle < (90 - 1.0)) { // Turn right left_speed = MAX_SPEED; right_speed = MAX_SPEED / 1.75; } else if (compass_angle > (90 + 1.0)) { // Turn left left_speed = MAX_SPEED / 1.75; right_speed = MAX_SPEED; } else { // Reached the desired angle, move in a straight line if (green_circle_tick > 10) { left_speed = 0; right_speed = 0; } else { left_speed = MAX_SPEED; right_speed = MAX_SPEED; } if (gps_val[0] < -3.2) { green_circle_tick = green_circle_tick + 1; } } } // Set the motor speeds. wb_motor_set_velocity(left_wheel, left_speed); wb_motor_set_velocity(right_wheel, right_speed); // Perform simple simulation step } while (wb_robot_step(TIME_STEP) != -1); // Clean up webots wb_robot_cleanup(); return 0; }