39 lines
968 B
C++
39 lines
968 B
C++
#pragma once
|
|
|
|
#include "Motor.h"
|
|
#include "RelativeEncoder.h"
|
|
|
|
namespace RoboidControl {
|
|
|
|
/// @brief A motor with speed control
|
|
/// It uses a feedback loop from an encoder to regulate the speed
|
|
/// The speed is measured in revolutions per second.
|
|
class ControlledMotor : public Motor {
|
|
public:
|
|
ControlledMotor(Motor& motor, RelativeEncoder& encoder, Thing& parent = Thing::LocalRoot());
|
|
|
|
float pidP = 1;
|
|
float pidD = 0;
|
|
float pidI = 0;
|
|
|
|
/// @brief The actual velocity in revolutions per second
|
|
float actualVelocity;
|
|
|
|
enum Direction { Forward = 1, Reverse = -1 };
|
|
Direction rotationDirection;
|
|
|
|
virtual void Update(bool recurse = false) override;
|
|
|
|
/// @brief Set the target verlocity for the motor controller
|
|
/// @param speed the target velocity in revolutions per second
|
|
virtual void SetTargetVelocity(float velocity) override;
|
|
|
|
Motor& motor;
|
|
RelativeEncoder& encoder;
|
|
|
|
protected:
|
|
float lastUpdateTime;
|
|
};
|
|
|
|
} // namespace RoboidControl
|