-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathController.cpp
35 lines (26 loc) · 945 Bytes
/
Controller.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
double desiredModelCrankPosition(double t) {
double whole, frac;
frac = modf(t, &whole);
return frac * 360.0;
}
double desiredModelCrankVelocity(double t) {
return 2 * Pi;
}
class PedalController : public Controller {
public:
PedalController(double aKp, double aKv) : Controller(), kp(aKp), kv(aKv) {}
void computeControls(const SimTK::State& s, SimTK::Vector& controls) const override {
double t = s.getTime();
double crankDes = desiredModelCrankPosition(t);
double crankVelDes = desiredModelCrankVelocity(t);
const Coordinate& crankCoord = _model->getCoordinateSet().get("crankAngle");
double crankPos = crankCoord.getValue(s);
double crankVel = crankCoord.getSpeedValue(s);
double pErr = kp * (crankDes - crankPos);
double vErr = kv * (crankVelDes - crankVel);
double desAcc = pErr + vErr;
}
private:
double kp;
double kv;
};