svoe
Dependencies: mbed mbed-STM32F103C8T6 MPU6050_1
motion.h
- Committer:
- dima285
- Date:
- 2019-02-10
- Revision:
- 17:bd6b6ac89e0e
- Parent:
- 15:960b922433d1
- Child:
- 19:2fe650d29823
File content as of revision 17:bd6b6ac89e0e:
//3 main parameters of the movement: //float accel (defined in motor.h) float speed = 1;//cm/s float radius = 100; bool tupic = 0; //int corrected_obstacle [100]; bool infinite_flag = 0; void go(float distance_m, bool brake = 1){ target.path = current.path + distance_m; // wifi.printf("%.2f %.2f %.2f %.2f;",target_path,current_path,distance_m,current_speed); // while(abs(target.path - current.path) > 0.01){ // gyro_process(); // wifi.printf("%.2f %.2f %.2f %.2f;",target_path,current_path,target_path,current_speed);} } void correct_obstacle(){ for(int point = 1;point <= 12;point ++){ for(int test_point = 1;test_point <= 12;test_point ++){ switch(abs(test_point - point)){ case 1: if((obstacle[test_point] < 40) && (obstacle[test_point] < obstacle[point])) corrected_obstacle[point] = obstacle[test_point];break; case 2: if((obstacle[test_point] < 20) && (obstacle[test_point] < obstacle[point])) corrected_obstacle[point] = 0.85 * obstacle[test_point];break; case 3: if((obstacle[test_point] < 15) && (obstacle[test_point] < obstacle[point])) corrected_obstacle[point] = 0.7 * obstacle[test_point];break; case 4: if((obstacle[test_point] < 12) && (obstacle[test_point] < obstacle[point])) corrected_obstacle[point] = 0.5 * obstacle[test_point];break; } } } /*for(int i = 0;i <= 12;i++){ obstacle[i] = corrected_obstacle[i]; }*/ } void analyze_obstacle(){ min_dist = 400; max_dist = 0; front_dist = obstacle[6]; for(int point = 0;point <= 12;point ++){ if(obstacle[point]<min_dist) {min_dist=obstacle[point];min_dist_angle = point*15-90;} if(obstacle[point]>max_dist) {max_dist=obstacle[point];max_dist_angle = point*15-90;} } target.azimuth = current.azimuth + max_dist_angle/57.3; target.x = current.x + 0.01*(cos(target.azimuth) * 25);//(max_dist - 200); target.y = current.y + 0.01*(sin(target.azimuth) * 25);//(max_dist - 200); /*if (max_dist < 0.3) tupic = 1; if (tupic == 1) { target.azimuth += pi * (rand() % 10 + 5)/10; if (target.azimuth > pi) target.azimuth -= pi; target.x = current.x; target.y = current.y; } */ } /* void go_no_wait(int cm, bool brake = 1){ if(cm != 0) { stop_flag = 0; infinite_flag = 0; motor_enable = 1; target_path =old_path + cm; old_path = target_path; if(cm > 0) path_dir = 1; else path_dir = 0; angle_task = 0; motor_busy = 1; //while(motor_busy == 1){proc_counter++;} } } void turn(int deg, bool brake = 1){ if(deg != 0) { stop_flag = 0; infinite_flag = 0; motor_enable = 1; target_angle = old_angle + deg; old_angle = target_angle; if(deg > 0) angle_dir = 1; else angle_dir = 0; angle_task = 1; motor_busy = 1; while(motor_busy == 1){proc_counter++;} old_path = current_path; } } void stop(){ motor_enable = 1; stop_flag = 1; motor_busy = 1; while(motor_busy == 1){} target_path = current_path; //motor_enable = 0; } void dance(float dance_speed,float dance_accel){ speed = dance_speed; accel=dance_accel; radius=20; go(25); go(-50); go(25); turn(90); speed = -dance_speed; turn(-180); speed = dance_speed; turn(90); turn(-360); turn(360); go(20); speed = -dance_speed; turn(-90); speed = dance_speed; turn(-90); speed = -dance_speed; turn(-90); speed = dance_speed; turn(-90); go(-20); radius =0; turn(720); turn(-720); } */