7namespace tinyrobotics {
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
32 SpeedFromThrottleWithInertia(
float maxSpeedMps,
float accelerationMps2, uint8_t numMotors = 1)
34 throttlePercent.resize(numMotors, 0.0f);
35 lastUpdateMs.resize(numMotors, 0);
37 SpeedFromThrottleWithInertia(
Speed maxSpeed,
float accelerationMps2, uint8_t numMotors = 1)
39 throttlePercent.resize(numMotors, 0.0f);
40 lastUpdateMs.resize(numMotors, 0);
43 void setAcceleration(
float a) { acceleration = a; }
44 float getAcceleration()
const {
return acceleration; }
48 if (motor >= numMotors)
return;
49 throttlePercent[motor] = throttle;
50 lastUpdateMs[motor] = millis();
55 void setSpeedInstant(
float speed, uint8_t motor = 0) {
56 if (motor >= numMotors)
return;
57 speedMps[motor] = speed;
58 sendSpeedMessage(motor);
63 return Speed(speedMps[motor], SpeedUnit::MPS);
69 float target = getSpeedMPS(throttlePercent[motor]);
70 float delta = target - speedMps[motor];
71 float maxDelta = acceleration * deltaTimeMs / 1000.0f;
72 if (fabs(delta) <= maxDelta) {
73 speedMps[motor] = target;
75 speedMps[motor] += (delta > 0 ? maxDelta : -maxDelta);
77 sendSpeedMessage(motor);
78 lastUpdateMs[motor] = millis();
79 return Speed(speedMps[motor], SpeedUnit::MPS);
84 std::vector<
float> throttlePercent;
85 std::vector<
unsigned long> lastUpdateMs;
Estimates speed from throttle with acceleration/inertia modeling (for boats, etc).
Definition: SpeedFromThrottleWithInertia.h:30
void setThrottlePercent(float throttle, uint8_t motor=0) override
Define the actual throttle value.
Definition: SpeedFromThrottleWithInertia.h:47
Speed getSpeed(uint8_t motor=0) const override
Get the actual speed based on the last throttle value.
Definition: SpeedFromThrottleWithInertia.h:61
Speed updateSpeed(uint32_t deltaTimeMs, uint8_t motor=0) override
For sources with inertia, call this in your main loop with the elapsed time (in milliseconds) to upda...
Definition: SpeedFromThrottleWithInertia.h:67
Estimates vehicle speed from throttle percentage using calibration data.
Definition: SpeedFromThrottle.h:59
Represents a speed measurement with unit conversion support.
Definition: Speed.h:40
SpeedUnit
Supported speed units for conversion and representation.
Definition: Speed.h:10