RoboidControl-cpp/Propulsion.h

65 lines
1.7 KiB
C++

#pragma once
#include "ControlledMotor.h"
#include "Placement.h"
// #include "Quadcopter.h"
#include "Vector2.h"
// #include <time.h>
namespace Passer {
namespace RoboidControl {
class Propulsion {
public:
/// @brief Setup sensing
Propulsion();
void Update(float currentTimeMs);
void AddMotors(Placement* motors, unsigned int motorCount);
// void AddQuadcopter(Quadcopter* quadcopter);
// Quadcopter* GetQuadcopter();
unsigned int GetMotorCount();
Motor* GetMotor(unsigned int motorIx);
Placement* GetMotorPlacement(unsigned int motorIx);
/// @brief Set the maximum linear speed.
/// @param maxSpeed The new maximum linear speed
/// For controlled motors, this is rpm.
/// For calibrated controlled motors, this is m/s
/// For uncontrolled motors this is a value between 0 and 1 where 1 is the
/// maximum speed of the motor
void SetMaxSpeed(float maxSpeed);
// Velocity control
virtual void SetTwistSpeed(float forward, float yaw = 0.0F); // 2D
virtual void SetTwistSpeed(Vector2 linear, float yaw = 0.0F); // 2D plus
virtual void SetTwistSpeed(Vector3 linear,
float yaw = 0.0F,
float pitch = 0.0F,
float roll = 0.0F); // 3D
// Position control (or actually, distance control)
bool Drive(Vector3 point, float rotation, float currentTimeMs);
float GetOdometer();
Placement* placement = nullptr;
unsigned int motorCount = 0;
protected:
float maxSpeed = 1;
bool driving = false;
float targetDistance = 0;
bool hasOdometer = false;
float startOdometer;
time_t startTime;
float lastUpdateTime;
};
} // namespace RoboidControl
} // namespace Passer
using namespace Passer::RoboidControl;