mirror of
https://gitee.com/dlmu-cone/half-steering-basic-framework
synced 2026-10-23 17:42:20 +08:00
reset again pro
This commit is contained in:
@@ -154,7 +154,7 @@ void ChassisInit()
|
|||||||
.Kp = 6, // 6
|
.Kp = 6, // 6
|
||||||
.Ki = 0,
|
.Ki = 0,
|
||||||
.Kd = 0.495, // 0.5
|
.Kd = 0.495, // 0.5
|
||||||
// .DeadBand = 0.5f,
|
.DeadBand = 0.5f,// 启用死区,值为0.5度
|
||||||
//.CoefA = 0.2,
|
//.CoefA = 0.2,
|
||||||
//.CoefB = 0.3,
|
//.CoefB = 0.3,
|
||||||
//.Improve = PID_Trapezoid_Intergral | PID_DerivativeFilter | PID_DerivativeFilter | PID_Derivative_On_Measurement | PID_Integral_Limit | PID_Derivative_On_Measurement,
|
//.Improve = PID_Trapezoid_Intergral | PID_DerivativeFilter | PID_DerivativeFilter | PID_Derivative_On_Measurement | PID_Integral_Limit | PID_Derivative_On_Measurement,
|
||||||
|
|||||||
@@ -80,11 +80,24 @@ void RobotCMDInit()
|
|||||||
* @brief 根据gimbal app传回的当前电机角度计算和零位的误差
|
* @brief 根据gimbal app传回的当前电机角度计算和零位的误差
|
||||||
* 单圈绝对角度的范围是0~360,说明文档中有图示
|
* 单圈绝对角度的范围是0~360,说明文档中有图示
|
||||||
*
|
*
|
||||||
*/
|
*/static float base_total_angle = 0.0f; // 用于计算偏移的基准角度
|
||||||
static void CalcOffsetAngle()
|
static void CalcOffsetAngle()
|
||||||
{
|
{
|
||||||
static float last_offset_angle = 0;
|
static float last_offset_angle = 0;
|
||||||
const float smooth_factor = 0.3f; // 平滑因子,0~1之间,值越大平滑效果越明显
|
const float smooth_factor = 0.3f; // 平滑因子,0~1之间,值越大平滑效果越明显
|
||||||
|
|
||||||
|
//const float deadband = 0.5f; // 死区值
|
||||||
|
// 新增:跟踪模式变化,用于重置基准角度
|
||||||
|
static chassis_mode_e last_chassis_mode = CHASSIS_NO_FOLLOW;//
|
||||||
|
|
||||||
|
|
||||||
|
// 当从旋转模式切换到跟随模式时,重置基准角度
|
||||||
|
if (last_chassis_mode == CHASSIS_ROTATE && chassis_cmd_send.chassis_mode == CHASSIS_FOLLOW_GIMBAL_YAW)
|
||||||
|
{
|
||||||
|
base_total_angle = gimbal_fetch_data.yaw_motor_total_angle;
|
||||||
|
last_offset_angle = 0.0f; // 同时重置历史偏移值
|
||||||
|
}
|
||||||
|
|
||||||
float new_offset = gimbal_fetch_data.yaw_motor_total_angle - YAW_ALIGN_ANGLE;
|
float new_offset = gimbal_fetch_data.yaw_motor_total_angle - YAW_ALIGN_ANGLE;
|
||||||
#if YAW_ECD_GREATER_THAN_4096
|
#if YAW_ECD_GREATER_THAN_4096
|
||||||
new_offset = -new_offset;
|
new_offset = -new_offset;
|
||||||
@@ -94,8 +107,25 @@ static void CalcOffsetAngle()
|
|||||||
new_offset -= 360.0f;
|
new_offset -= 360.0f;
|
||||||
else if (angle_diff < -180.0f)
|
else if (angle_diff < -180.0f)
|
||||||
new_offset += 360.0f;
|
new_offset += 360.0f;
|
||||||
chassis_cmd_send.offset_angle = last_offset_angle *(1.0f - smooth_factor) + new_offset * smooth_factor;
|
/////
|
||||||
|
// 应用死区
|
||||||
|
//if (fabs(new_offset) < deadband) {
|
||||||
|
// new_offset = 0.0f;
|
||||||
|
// } else if (new_offset > 0) {
|
||||||
|
// new_offset -= deadband;
|
||||||
|
//} else {
|
||||||
|
// new_offset += deadband;
|
||||||
|
//}//////
|
||||||
|
chassis_cmd_send.offset_angle = last_offset_angle *(1.0f - smooth_factor) + new_offset * smooth_factor;
|
||||||
last_offset_angle = chassis_cmd_send.offset_angle;
|
last_offset_angle = chassis_cmd_send.offset_angle;
|
||||||
|
// 更新模式状态
|
||||||
|
last_chassis_mode = chassis_cmd_send.chassis_mode;
|
||||||
|
// 当处于旋转模式时,更新基准角度以防止累积过大误差
|
||||||
|
if (chassis_cmd_send.chassis_mode == CHASSIS_ROTATE)
|
||||||
|
{
|
||||||
|
base_total_angle = gimbal_fetch_data.yaw_motor_total_angle;
|
||||||
|
}
|
||||||
|
|
||||||
// static float angle;
|
// static float angle;
|
||||||
// static float last_diff = 0.0f; // 用于在±180°附近保持上次符号,避免来回跳变
|
// static float last_diff = 0.0f; // 用于在±180°附近保持上次符号,避免来回跳变
|
||||||
// /* 使用 yaw 电机的单圈角度与 `YAW_ALIGN_ANGLE` 对齐(保持原实现的参考系)
|
// /* 使用 yaw 电机的单圈角度与 `YAW_ALIGN_ANGLE` 对齐(保持原实现的参考系)
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ void GimbalInit()
|
|||||||
},
|
},
|
||||||
.controller_param_init_config = {
|
.controller_param_init_config = {
|
||||||
.angle_PID = {
|
.angle_PID = {
|
||||||
.Kp = 0.685, // 8
|
//.Kp = 0.685, // 8
|
||||||
.Ki = 0.315,
|
.Kp = 0.6, // 8
|
||||||
|
//.Ki = 0.315,
|
||||||
|
.Ki = 0.25,
|
||||||
.Kd = 0.022,
|
.Kd = 0.022,
|
||||||
//.DeadBand = 0.1,
|
//.DeadBand = 0.1,
|
||||||
.Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement | PID_DerivativeFilter | PID_ChangingIntegrationRate,
|
.Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement | PID_DerivativeFilter | PID_ChangingIntegrationRate,
|
||||||
@@ -38,7 +40,8 @@ void GimbalInit()
|
|||||||
.Derivative_LPF_RC = 0.001
|
.Derivative_LPF_RC = 0.001
|
||||||
},
|
},
|
||||||
.speed_PID = {
|
.speed_PID = {
|
||||||
.Kp = 8000, // 50
|
.Kp = 8000, // 50
|
||||||
|
//.Kp = 5000, // 50
|
||||||
.Ki = 5000, // 200
|
.Ki = 5000, // 200
|
||||||
.Kd = 0,
|
.Kd = 0,
|
||||||
.CoefB = 1,
|
.CoefB = 1,
|
||||||
@@ -93,7 +96,7 @@ void GimbalInit()
|
|||||||
.close_loop_type = SPEED_LOOP | ANGLE_LOOP,
|
.close_loop_type = SPEED_LOOP | ANGLE_LOOP,
|
||||||
.motor_reverse_flag = MOTOR_DIRECTION_NORMAL,
|
.motor_reverse_flag = MOTOR_DIRECTION_NORMAL,
|
||||||
},
|
},
|
||||||
.motor_type = GM6020,
|
.motor_type = M3508,
|
||||||
};
|
};
|
||||||
// 电机对total_angle闭环,上电时为零,会保持静止,收到遥控器数据再动
|
// 电机对total_angle闭环,上电时为零,会保持静止,收到遥控器数据再动
|
||||||
yaw_motor = DJIMotorInit(&yaw_config);
|
yaw_motor = DJIMotorInit(&yaw_config);
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
// #define CHASSIS_OMNI_WHEEL // 是否为全向轮底盘
|
// #define CHASSIS_OMNI_WHEEL // 是否为全向轮底盘
|
||||||
// #define CHASSIS_MCNAMEE_WHEEL // 是否为麦克纳姆轮底盘
|
// #define CHASSIS_MCNAMEE_WHEEL // 是否为麦克纳姆轮底盘
|
||||||
#define CHASSIS_STEERING_WHEEL // 是否为舵轮
|
#define CHASSIS_STEERING_WHEEL // 是否为舵轮
|
||||||
#define STEERING_CHASSIS_ALIGN_ECD_RF 7294 // 舵电机 A 编码器值,若有机械改动需要修改
|
#define STEERING_CHASSIS_ALIGN_ECD_RF 7367 // 舵电机 A 编码器值,若有机械改动需要修改
|
||||||
#define STEERING_CHASSIS_ALIGN_ECD_LB 1221 // 舵电机 D 编码器值,若有机械改动需要修改
|
#define STEERING_CHASSIS_ALIGN_ECD_LB 1195 // 舵电机 D 编码器值,若有机械改动需要修改
|
||||||
|
|
||||||
#define STEERING_CHASSIS_ALIGN_ANGLE_RF STEERING_CHASSIS_ALIGN_ECD_RF / 8192.f * 360.f // 舵轮 A 对齐角度
|
#define STEERING_CHASSIS_ALIGN_ANGLE_RF STEERING_CHASSIS_ALIGN_ECD_RF / 8192.f * 360.f // 舵轮 A 对齐角度
|
||||||
#define STEERING_CHASSIS_ALIGN_ANGLE_LB STEERING_CHASSIS_ALIGN_ECD_LB / 8192.f * 360.f // 舵轮 D 对齐角度
|
#define STEERING_CHASSIS_ALIGN_ANGLE_LB STEERING_CHASSIS_ALIGN_ECD_LB / 8192.f * 360.f // 舵轮 D 对齐角度
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ void ShootInit()
|
|||||||
.close_loop_type = CURRENT_LOOP | SPEED_LOOP,
|
.close_loop_type = CURRENT_LOOP | SPEED_LOOP,
|
||||||
.motor_reverse_flag = MOTOR_DIRECTION_NORMAL, // 注意方向设置为拨盘的拨出的击发方向
|
.motor_reverse_flag = MOTOR_DIRECTION_NORMAL, // 注意方向设置为拨盘的拨出的击发方向
|
||||||
},
|
},
|
||||||
.motor_type = M2006 // 英雄使用m3508
|
.motor_type = M3508 // 英雄使用m3508
|
||||||
};
|
};
|
||||||
loader = DJIMotorInit(&loader_config);
|
loader = DJIMotorInit(&loader_config);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user