huge_flt.c

 
#include "PID_Data.h" #include "math.h" #include <string.h> class PIDController { private: PID_BASE PID_base; PID_EXTRA PID_extra; float output; //输出 public: PIDController(void); }; class PID_Eval { private: PID_EXTRA PID_extra_eval; float TotalPer[TOTAL_MAX]; int k; public: void Set_PID_Extra(PID_EXTRA PID_extra); float PID_Evaluate(PID_BASE PID_base_eval); PID_Eval(void); }; //PID性能评估 float PID_Eval::PID_Evaluate(PID_BASE PID_base_eval) { int flag = 0; float totalPerformance = 0; float output = (PID_extra_eval.error - PID_extra_eval.lastError) * PID_base_eval.kd + PID_extra_eval.error * PID_base_eval.kp + PID_extra_eval.integral * PID_base_eval.ki; float Ji = 0.999 * fabs(PID_extra_eval.error) + 0.001 * output * output; // 如果误差为负,增加额外惩罚 if(PID_extra_eval.error < 0) Ji += 10 * fabs(PID_extra_eval.error); TotalPer[k] = Ji; k = (k + 1) % TOTAL_MAX; for(int i = 0;i < TOTAL_MAX;i++) { totalPerformance += TotalPer[i]; if(fabs(TotalPer[i]) < 1e-6) flag = 1; } if(flag == 1) totalPerformance = FLT_MAX; return totalPerformance; } void PID_Eval::Set_PID_Extra(PID_EXTRA PID_extra) { PID_extra_eval = PID_extra; } PID_Eval::PID_Eval(void) { PID_extra_eval.error = 0; PID_extra_eval.integral = 0; PID_extra_eval.lastError = 0; PID_extra_eval.maxIntegral = MAXI; memset(TotalPer, 0, sizeof(TotalPer)); k = 0; } PIDController::PIDController(void) { PID_base.kp = 0; PID_base.ki = 0; PID_base.kd = 0; PID_extra.error = 0; PID_extra.integral = 0; PID_extra.lastError = 0; PID_extra.maxIntegral = MAXI; output = 0; } 帮我看一下有没有语法上的错误
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值