float direction_pid_point=0;
float direction_pid_kp=17;
float direction_pid_kd=2;
float direction_pid_uk=0;
void Direction_Pid_Parameter_Init(float set_point,float set_kp,float set_kd)
{
direction_pid_point=set_point;
direction_pid_kp=set_kp;
direction_pid_kd=set_kd;
}
void Direction_Pid_Calculate(float feedbackValue1,float feedbackValue2)
{
float out=0;
float direction_pid_ek=0;
direction_pid_ek=direction_pid_point-feedbackValue1;
out=direction_pid_kp*direction_pid_ek+direction_pid_kd*feedbackValue2;
if(out<-300) out=-300;
else if(out>300) out=300;
direction_pid_uk=out;
}
void Car_Move_Control(void)
{
float set_forward_speed=0;
float set_spin_speed=0;
float car_speed_max;
if(car_move_flag)
{
if(set_go_step_flag)
{
Set_Go_Step_Pid_Calculate(set_go_step_distance);
car_speed_forward=set_go_step_pid_uk;
}
if(tracking_flag)
{
if(!set_go_step_flag)
{
car_speed_max=set_car_speed_forward-S2(error)*0.02f;
if(car_speed_max<50) car_speed_max=50;
if(car_speed_forward<car_speed_max) car_speed_forward+=8;
else car_speed_forward=car_speed_max;
}
Direction_Pid_Calculate(error,-z_angular_speed);
set_spin_speed=-direction_pid_uk;
}
if(set_spin_step_flag)
{
Set_Spin_Step_Pid_Calculate(yaw);
set_spin_speed=-set_spin_step_pid_uk;
}
set_forward_speed=car_speed_forward;
if((set_forward_speed>0 && tracking_flag) || !tracking_flag)
Mecanum_Wheel_Motor_Calculate(set_forward_speed,0,set_spin_speed);
else Mecanum_Wheel_Motor_Calculate(set_forward_speed,0,0);
}
else
{
Mecanum_Wheel_Motor_Calculate(0,0,0);
}
}
void Calculate_Angular_Speed(void)
{
x_angular_speed=(float)mpu_gyro_x/gyro_LSB-gyro_biso_x;
y_angular_speed=(float)mpu_gyro_y/gyro_LSB-gyro_biso_y;
z_angular_speed=(float)mpu_gyro_z/gyro_LSB-gyro_biso_z;
}