Mercurial > hg > beaglert
view core/Pid.cpp @ 152:8f98b32d0e23 ClockSync
Last commit on this branch for a while. Overall not very succesful
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Mon, 05 Oct 2015 13:06:14 +0100 |
parents | 134bff10e561 |
children |
line wrap: on
line source
/* * Pid.cpp * * Created on: 14 Sep 2015 * Author: giulio */ #include "Pid.h" Pid::Pid(){ integralError = 0; pastError = 0; error = 0; differentialError = 0; kp = 5; ki = 2;// 2; kd = 0.8; //0.8; gain = 1; idleTimeout = 0; timeoutCount = 0; output = 0; // printf("----------%f %f %f %f %f %f\n", kp, error, ki, integralError, kd, differentialError); } void Pid::updateIntegralError(){ integralError += (error + pastError) * 0.5 * ts; } void Pid::updateDifferentialError(){ differentialError = (error - pastError) / ts; } float Pid::setError(float anError){ pastError = error; error = anError; ts = 1; //TODO: this should be passed as a parameter, unless setError() gets always called at constant intervals updateIntegralError(); updateDifferentialError(); output = gain * (kp * error + ki * integralError + kd * differentialError); // printf("%f %f %f %f %f %f %f\n", output, kp, error, ki, integralError, kd, differentialError); return output; } float Pid::getOutput(){ return output; } void Pid::setProportionalGain(float proportionalGain){ kp = proportionalGain; } void Pid::setDerivativeGain(float derivativeGain){ kd = derivativeGain; } void Pid::setIntegralGain(float integralGain){ ki = integralGain; } void Pid::setGlobalGain(float globalGain){ gain = globalGain; } float Pid::getProportionalGain(){ return kp; } float Pid::getDerivativeGain(){ return kd; } float Pid::getIntegralGain(){ return ki; } float Pid::getGlobalGain(){ return gain; } float Pid::getIntegralError(){ return integralError; }