libstp
Robotics library for Botball
Loading...
Searching...
No Matches
IMotor.hpp
Go to the documentation of this file.
1//
2// IMotor interface for dependency injection and testing
3//
4#pragma once
5
7
9{
16 struct IMotor
17 {
18 virtual ~IMotor() = default;
19
21 virtual void setSpeed(int percent) = 0;
23 virtual void setVelocity(int velocity) = 0;
25 virtual void moveToPosition(int velocity, int goalPosition) = 0;
27 virtual void moveRelative(int velocity, int deltaPosition) = 0;
28 [[nodiscard]] virtual int getPosition() const = 0;
29 [[nodiscard]] virtual int getBemf() const = 0;
30 [[nodiscard]] virtual bool isDone() const = 0;
32 virtual void brake() = 0;
34 virtual void off() = 0;
36 virtual void resetPositionCounter() = 0;
37
38 [[nodiscard]] virtual const foundation::MotorCalibration& getCalibration() const = 0;
39 virtual void setCalibration(const foundation::MotorCalibration& calibration) = 0;
40 [[nodiscard]] virtual int getPort() const = 0;
41 [[nodiscard]] virtual bool isInverted() const = 0;
42
51 virtual void setFirmwarePidGains(float kp, float ki, float kd)
52 {
53 (void)kp;
54 (void)ki;
55 (void)kd;
56 }
57
66 virtual void getLastFirmwarePidGains(float& kp, float& ki, float& kd) const
67 {
68 kp = 0.0f;
69 ki = 0.0f;
70 kd = 0.0f;
71 }
72 };
73}
Calibration constants commonly needed for motor encoder conversions.
Definition motor.hpp:32
Interface for motor abstraction.
Definition IMotor.hpp:17
virtual ~IMotor()=default
virtual const foundation::MotorCalibration & getCalibration() const =0
virtual void moveRelative(int velocity, int deltaPosition)=0
Move by a relative position delta using firmware-side control.
virtual void setCalibration(const foundation::MotorCalibration &calibration)=0
virtual void resetPositionCounter()=0
Reset the position counter to zero.
virtual int getBemf() const =0
virtual void getLastFirmwarePidGains(float &kp, float &ki, float &kd) const
Read back the gains last passed to setFirmwarePidGains().
Definition IMotor.hpp:66
virtual bool isDone() const =0
virtual void setFirmwarePidGains(float kp, float ki, float kd)
Push per-motor firmware-side velocity PID gains to the driver.
Definition IMotor.hpp:51
virtual bool isInverted() const =0
virtual void off()=0
Disable this motor completely (no power, no brake — free-spinning).
virtual void setSpeed(int percent)=0
Open-loop percent output.
virtual void brake()=0
Stop this motor using the implementation's preferred strategy.
virtual int getPort() const =0
virtual void moveToPosition(int velocity, int goalPosition)=0
Move to an absolute position using firmware-side control.
virtual void setVelocity(int velocity)=0
Set a velocity target in firmware-specific BEMF units.
virtual int getPosition() const =0