-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTransController.cpp
64 lines (41 loc) · 1023 Bytes
/
TransController.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "TransController.h"
TransController::TransController() {
}
TransController::TransController(int _id, float _Kp, float _Ki) {
id = _id;
Kp=_Kp;
Ki=_Ki;
powerMax = 255;
powerMin = -255;
reset();
}
int TransController::update(int speed, int error){
int time = millis();
float deltaTime = 0;
if(lastTime) {
deltaTime = (time-lastTime)*0.001;
}
float spw = 1.0f*speed/powerMax; // spw = shall be speed dependant
float siw = 1.0f*(1/(speed+1)); // siw = shall be speed dependant
/*
float powerDelta = 1.0f*spw*(Kp*(error-lastError)+Ki*deltaTime*error);
float power = constrain(lastPower+powerDelta,powerMin,powerMax);
*/
ITerm += error;
float power = spw * Kp * error + siw * Ki * ITerm;
power = constrain(power,powerMin,powerMax);
if(abs(error) <= 3) {
power = 0;
ITerm = 0;
}
lastTime = time;
lastError = error;
lastPower = power;
return power;
}
void TransController::reset() {
lastTime = 0;
lastError = 0;
lastPower = 0;
ITerm = 0;
}