diff --git a/application/chassis/chassis.c b/application/chassis/chassis.c index b462c0b..846da79 100644 --- a/application/chassis/chassis.c +++ b/application/chassis/chassis.c @@ -347,7 +347,7 @@ static void LimitChassisOutput() // referee_data->PowerHeatData.chassis_power_buffer; // 完成功率限制后进行电机参考输入设定 - + // LKMotorSetRef( motor_lf , vt_lf ); // LKMotorSetRef( motor_rb , vt_rb ); diff --git a/application/cmd/robot_cmd.c b/application/cmd/robot_cmd.c index d8e1c3d..716ee43 100644 --- a/application/cmd/robot_cmd.c +++ b/application/cmd/robot_cmd.c @@ -249,7 +249,7 @@ static void MouseKeySet() chassis_cmd_send.vy = rc_data[TEMP].key[KEY_PRESS].w * 40 - rc_data[TEMP].key[KEY_PRESS].s * 40; // a向左,d向右 gimbal_cmd_send.yaw += (float)rc_data[TEMP].mouse.x / 660 * 10; // 系数待测 - gimbal_cmd_send.pitch += (float)rc_data[TEMP].mouse.y / 660 * 10; + gimbal_cmd_send.pitch += (float)rc_data[TEMP].mouse.y / 660 * 8; // 云台软件限位 if (gimbal_cmd_send.pitch > PITCH_MAX_ANGLE) diff --git a/application/gimbal/gimbal.c b/application/gimbal/gimbal.c index 25681e5..d001b27 100644 --- a/application/gimbal/gimbal.c +++ b/application/gimbal/gimbal.c @@ -70,18 +70,43 @@ void GimbalInit() .can_handle = &hcan2, .tx_id = 2,//2 }, + // .controller_param_init_config = { + // .angle_PID = { + // .Kp = 40, // 10 + // .Ki = 0, + // .Kd = 0, + // .MaxOut = 1000, + // }, + // .speed_PID = { + // .Kp = 60, // 50 + // .Ki = 15, // 350 + // .Kd = 0.6, // 0 + // .MaxOut = 20000,//20000 + // }, .controller_param_init_config = { .angle_PID = { - .Kp = 40, // 10 - .Ki = 0, - .Kd = 0, - .MaxOut = 1000, + .Kp = 0.75, //0.55 + .Ki = 0.05,//0.05 + .Kd = 0.02,//0.02 + .CoefA =0.5,//0.5 + .CoefB = 0.6,//0.6 + .Output_LPF_RC = 0.01, + .DeadBand = 0.005,//0.02 + .Derivative_LPF_RC=0.01,//0.008 + .Improve = PID_Trapezoid_Intergral |PID_ChangingIntegrationRate| PID_Integral_Limit |PID_Derivative_On_Measurement | PID_OutputFilter |PID_DerivativeFilter, + .IntegralLimit = 1, + .MaxOut = 600, }, .speed_PID = { - .Kp = 60, // 50 - .Ki = 15, // 350 - .Kd = 0.6, // 0 - .MaxOut = 20000,//20000 + .Kp = 500,//22000 + .Ki = 0,// + .Kd =0.0005, + // .CoefA = 0.8, + // .CoefB = 0.1, + .Output_LPF_RC = 0.002,//0.002 + .Improve = PID_Trapezoid_Intergral |PID_Integral_Limit |PID_Derivative_On_Measurement | PID_OutputFilter, + .IntegralLimit = 5000, + .MaxOut = 20000, }, .other_angle_feedback_ptr = &gimba_IMU_data->Pitch, // 还需要增加角速度额外反馈指针,注意方向,ins_task.md中有c板的bodyframe坐标系说明 @@ -96,6 +121,7 @@ void GimbalInit() // .close_loop_type = SPEED_LOOP, .motor_reverse_flag = MOTOR_DIRECTION_NORMAL, }, + .motor_type = GM6020, }; // 电机对total_angle闭环,上电时为零,会保持静止,收到遥控器数据再动 diff --git a/application/shoot/shoot.c b/application/shoot/shoot.c index afd3de6..612ccef 100644 --- a/application/shoot/shoot.c +++ b/application/shoot/shoot.c @@ -163,7 +163,7 @@ void ShootTask() case LOAD_1_BULLET: DJIMotorOuterLoop(loader, ANGLE_LOOP);// 切换到角度环 static float target_angle = -1900; - target_angle += 51*36; + target_angle += 51.2*36; //float target_angle = loader->measure.total_angle + 51*36; DJIMotorSetRef(loader, target_angle); hibernate_time = DWT_GetTimeline_ms(); // 记录触发指令的时间 @@ -176,9 +176,9 @@ void ShootTask() // hibernate_time = DWT_GetTimeline_ms(); // 记录触发指令的时间 // dead_time = 300; // 完成3发弹丸发射的时间 // break; - DJIMotorOuterLoop(loader, ANGLE_LOOP);// 切换到角度环 + DJIMotorOuterLoop(loader, ANGLE_LOOP);// 切换到角度环. //static float target_angle = -1872; - target_angle += (51*36)*3; + target_angle += (51.2*36)*3; //float target_angle = loader->measure.total_angle + 51*36; DJIMotorSetRef(loader, target_angle); hibernate_time = DWT_GetTimeline_ms(); // 记录触发指令的时间