mirror of
https://gitee.com/dlmu-cone/half-steering-basic-framework
synced 2026-10-24 01:52:20 +08:00
小陀螺旗舰版
This commit is contained in:
@@ -284,7 +284,8 @@ static void SteeringWheelCalculate()
|
|||||||
vt_rf = 0, vt_lb = 0;
|
vt_rf = 0, vt_lb = 0;
|
||||||
} else {
|
} else {
|
||||||
// 生成预计算变量,减少计算量,空间换时间
|
// 生成预计算变量,减少计算量,空间换时间
|
||||||
float w = chassis_cmd_recv.wz * CHASSIS_WHEEL_OFFSET * SQRT2;
|
//float w = chassis_cmd_recv.wz * CHASSIS_WHEEL_OFFSET * SQRT2;
|
||||||
|
float w = chassis_cmd_recv.wz * CHASSIS_WHEEL_OFFSET ;
|
||||||
// float temp_x = chassis_vx - w, temp_y = chassis_vy - w;
|
// float temp_x = chassis_vx - w, temp_y = chassis_vy - w;
|
||||||
// arm_sqrt_f32(temp_x * temp_x + temp_y * temp_y, &vt_lf); // lf:y- , x-
|
// arm_sqrt_f32(temp_x * temp_x + temp_y * temp_y, &vt_lf); // lf:y- , x-
|
||||||
// temp_y = chassis_vy + w; // 重复利用变量,temp_x = chassis_vy - w;与上次相同因此注释
|
// temp_y = chassis_vy + w; // 重复利用变量,temp_x = chassis_vy - w;与上次相同因此注释
|
||||||
@@ -408,25 +409,55 @@ void ChassisTask() {
|
|||||||
{
|
{
|
||||||
single_round_offset += 360.0f;
|
single_round_offset += 360.0f;
|
||||||
}
|
}
|
||||||
chassis_cmd_recv.wz = -PIDCalculate(&chassis_follow_pid, single_round_offset, 0)/70.0f;
|
chassis_cmd_recv.wz = -PIDCalculate(&chassis_follow_pid, single_round_offset, 0)/60.0f;
|
||||||
break;
|
break;
|
||||||
case CHASSIS_ROTATE: // 自旋,同时保持全向机动;当前wz维持定值,后续增加不规则的变速策略
|
case CHASSIS_ROTATE: // 自旋,同时保持全向机动;当前wz维持定值,后续增加不规则的变速策略
|
||||||
chassis_cmd_recv.wz = 0.95;//实验版
|
chassis_cmd_recv.wz = 1.00;//实验版
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float sin_theta, cos_theta;
|
static float sin_theta, cos_theta;
|
||||||
|
// ------------------ 【修改部分:加入相位滞后动态补偿】 ------------------
|
||||||
|
// 提取当前的云台-底盘夹角
|
||||||
|
float real_offset_angle = chassis_cmd_recv.offset_angle;
|
||||||
|
|
||||||
|
// 如果处于小陀螺模式(或者 wz 不为 0),根据旋转速度进行超前补偿
|
||||||
|
if (chassis_cmd_recv.chassis_mode == CHASSIS_ROTATE )
|
||||||
|
{
|
||||||
|
// 补偿系数 K 需要实车微调。
|
||||||
|
// 根据你的描述 wz=0.95 时偏差约45度,初始 K 值可以设为 45.0 / 0.95 ≈ 47.3f
|
||||||
|
float lag_compensation_K = 45.0f;//47.3f;
|
||||||
|
|
||||||
|
// 符号(+或-)取决于你的电机正方向、底盘旋转正方向,如果不正就改成减号
|
||||||
|
real_offset_angle -= (chassis_cmd_recv.wz * lag_compensation_K);
|
||||||
|
cos_theta = arm_cos_f32(real_offset_angle * DEGREE_2_RAD);
|
||||||
|
sin_theta = arm_sin_f32(real_offset_angle * DEGREE_2_RAD);
|
||||||
|
|
||||||
|
}else if (chassis_cmd_recv.chassis_mode == CHASSIS_FOLLOW_GIMBAL_YAW)
|
||||||
|
{
|
||||||
cos_theta = arm_cos_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
cos_theta = arm_cos_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
||||||
sin_theta = arm_sin_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
sin_theta = arm_sin_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
||||||
|
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
chassis_vx = (chassis_cmd_recv.vx * cos_theta + chassis_cmd_recv.vy * sin_theta)/4;
|
chassis_vx = (chassis_cmd_recv.vx * cos_theta + chassis_cmd_recv.vy * sin_theta)/4;
|
||||||
chassis_vy = (-chassis_cmd_recv.vx * sin_theta + chassis_cmd_recv.vy * cos_theta)/4;
|
chassis_vy = (-chassis_cmd_recv.vx * sin_theta + chassis_cmd_recv.vy * cos_theta)/4;
|
||||||
|
|
||||||
|
// 使用补偿后的角度进行坐标系投影
|
||||||
|
|
||||||
|
|
||||||
|
// static float sin_theta, cos_theta;
|
||||||
|
// cos_theta = arm_cos_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
||||||
|
// sin_theta = arm_sin_f32(chassis_cmd_recv.offset_angle * DEGREE_2_RAD);
|
||||||
|
// chassis_vx = (chassis_cmd_recv.vx * cos_theta + chassis_cmd_recv.vy * sin_theta)/4;
|
||||||
|
// chassis_vy = (-chassis_cmd_recv.vx * sin_theta + chassis_cmd_recv.vy * cos_theta)/4;
|
||||||
|
|
||||||
// 根据控制模式进行正运动学解算,计算底盘输出
|
// 根据控制模式进行正运动学解算,计算底盘输出
|
||||||
SteeringWheelCalculate();
|
SteeringWheelCalculate();
|
||||||
// MecanumCalculate();
|
// MecanumCalculate();
|
||||||
|
|
||||||
|
|
||||||
// 根据裁判系统的反馈数据和电容数据对输出限幅并设定闭环参考值
|
// 根据裁判系统的反馈数据和电容数据对输出限幅并设定闭环参考值
|
||||||
LimitChassisOutput();
|
LimitChassisOutput();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user