feat: add direction flag to feedforward controller with init config struct

- add DM_Feedforward_Init_Config_s with Kp and dir fields
- replace plain DM_Feedforward_Kp in DM_Motor_Init_Config_s
- apply direction flag in DMMotorControl to negate feedforward when reverse
- set yaw feedforward: Kp=0.9, dir=REVERSE
This commit is contained in:
2026-06-07 16:22:16 +08:00
parent 89aa777d5c
commit ed6d509c72
3 changed files with 18 additions and 5 deletions
+5 -3
View File
@@ -186,8 +186,9 @@ DMMotorInstance *DMMotorInit(DM_Motor_Init_Config_s *config)
config->motor_config.can_init_config.id = motor;
motor->motor_can_instance = CANRegister(&config->motor_config.can_init_config);
/* 设置前馈控制器增益 */
motor->feedforward_controller.Kp = config->DM_Feedforward_Kp;
/* 设置前馈控制器 */
motor->feedforward_controller.Kp = config->feedforward_config.Kp;
motor->feedforward_controller.dir = config->feedforward_config.dir;
/* register daemon */
Daemon_Init_Config_s conf = {
@@ -237,7 +238,8 @@ void DMMotorControl(void)
if (motor->output_reverse == OUTPUT_DIRECTION_REVERSE)
pid_out *= -1;
pid_out += feedforward_controller.Kp * feedforward_controller.feed_input;
float ff = feedforward_controller.Kp * feedforward_controller.feed_input;
pid_out += (feedforward_controller.dir == OUTPUT_DIRECTION_REVERSE) ? -ff : ff;
float vel_cmd = pid_out * DEGREE_2_RAD;
LIMIT_MIN_MAX(vel_cmd, DM_V_MIN, DM_V_MAX);