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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user