52 lines
1.1 KiB
C++
52 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "ControlledMotor.h"
|
|
#include "LinearAlgebra/Angle.h"
|
|
|
|
namespace RoboidControl {
|
|
|
|
class ServoMotor : public Thing {
|
|
public:
|
|
// Inherit constructors from Thing
|
|
using Thing::Thing;
|
|
|
|
ServoMotor(Participant* participant);
|
|
ServoMotor(Thing* parent);
|
|
|
|
Direction16 rotationAxis = Direction16::up;
|
|
Angle16 minAngle = Angle16::Degrees(-90);
|
|
Angle16 maxAngle = Angle16::Degrees(90);
|
|
|
|
enum ControlMode { Position, Velocity };
|
|
ControlMode controlMode = ControlMode::Position;
|
|
|
|
Thing* target = nullptr;
|
|
|
|
virtual void SetTargetAngle(Angle16 angle);
|
|
virtual Angle16 GetTargetAngle();
|
|
|
|
virtual void SetMaximumVelocity(float maxVelocity);
|
|
|
|
virtual void SetTargetVelocity(float velocity);
|
|
virtual float GetTargetVelocity();
|
|
|
|
virtual void Update(unsigned long currentTimeMs, bool recurse) override;
|
|
|
|
Angle16 limitedTargetAngle = Angle16();
|
|
|
|
protected:
|
|
bool hasTargetAngle = false;
|
|
Angle16 targetAngle = Angle16();
|
|
Angle16 actualAngle = Angle16();
|
|
|
|
float maxSpeed = 0.0F;
|
|
|
|
float targetVelocity = 0.0F;
|
|
|
|
float lastUpdateTimeMs = 0.0F;
|
|
|
|
virtual void SetAngle(Angle16 angle);
|
|
};
|
|
|
|
} // namespace RoboidControl
|