firmwareSandsara
Motors.h
Go to the documentation of this file.
1 #pragma once
2 
3 //Speed
4 //#define millimeterSpeed 15;
5 
6 #include "AccelStepper.h"
7 #include "MultiStepper.h"
8 #include "Bluetooth.h"
9 #include "config.h"
10 
28 class Motors {
29  public:
30  AccelStepper stepper1;
31  AccelStepper stepper2;
32  MultiStepper steppers;
35  double couplingAngle;
36  double x_current;
37  double y_current;
38  double q1_current;
39  double q2_current;
40  double millimeterSpeed = 15;
41  double _pathSpeed;
42  bool lastPoint;
43 
44  private:
45  double zCurrent;
46  double thetaCurrent;
47  long maxSpeed;
48  double x_home;
49  double y_home;
50  bool constantMotorSpeed = false;
51  double realSpeed1,realSpeed2;
52  double realQ1, realQ2;
53  bool speedChanging = false;
54  double oldSpeed1 = 0, oldSpeed2 = 0;
55 
56  long q1StepsBuffer[SAMPLES];
57  long q2StepsBuffer[SAMPLES];
58  double distanceBuffer[SAMPLES];
59  double pathSpeedBuffer[SAMPLES];
60  double timesBuffer[SAMPLES];
61  long maxStepsBuffer[SAMPLES];
62  bool fullBuffer = false;
63 
64  double xBuffer[SAMPLES], yBuffer[SAMPLES];
65  int pointerBuffer = 0, cPointerBuffer = 0;
66  int xyPointer = 0, cxyPointer = 0;
67  int xyPointerBuffer[SAMPLES];
68 
69  public:
70  Motors();
71  void moveTo(double x, double y, bool = false);
72  void init(double = 0,double = 0);
73  double getCurrentModule();
74  double getCurrentAngle();
75  void setZCurrent(double );
76  void setThetaCurrent(double );
77  void setSpeed(int );
78  double getSpeed();
79  double getZCurrent();
80  double getThetaCurrent();
81  static void rotate(double& ,double& ,double );
82  static double zPolar(double , double );
83  static double thetaPolar(double , double );
84  static double normalizeAngle(double );
85  static double arcLength(double ,double , double);
86  double module(double , double , double , double );
87  int position();
88  void completePath();
89  void setRealQ1(double );
90  void setRealQ2(double );
91  double getRealQ1();
92  double getRealQ2();
93  void stopAndResetPositions();
94  void setRealSpeed1(double );
95  void setRealSpeed2(double );
96  void resetSpeeds();
97  static void constrainXY(double& x, double& y);
98 
99  private :
100  void moveInterpolateTo(double, double, double, bool);
101  void moveSteps(long, long, double);
102  //mathematics methods
103  long calculate_steps(double , double );
104  void calculate_line_equations();
105  double polarModule(double , double , double , double );
106  void updateVariablesToMovingThread();
107  void ik(double , double , double* , double* );
108 };
double q2_current
Definition: Motors.h:39
double getRealQ2()
moficica el miembro realQ1.
Definition: Motors.cpp:604
void setThetaCurrent(double)
moficica el miembro theta_current.
Definition: Motors.cpp:571
double y_current
Definition: Motors.h:37
double degrees_per_step
Definition: Motors.h:34
static void rotate(double &, double &, double)
rota la posicion x,y con centro en 0,0 tantos grados como se desee.
Definition: Motors.cpp:728
double getSpeed()
obtiene el valor de la velocidad actual de Sandsara en milimetros por segundo
Definition: Motors.cpp:540
MultiStepper steppers
Definition: Motors.h:32
#define SAMPLES
Definition: config.h:184
double getRealQ1()
moficica el miembro realQ1.
Definition: Motors.cpp:596
void init(double=0, double=0)
inicializa el objeto Motors
Definition: Motors.cpp:630
double x_current
Definition: Motors.h:36
Se encarga del control de los motores.
Definition: Motors.h:28
static double zPolar(double, double)
calcula el valor del modulo del punto en coordenadas polares
Definition: Motors.cpp:774
void setRealSpeed1(double)
moficica el miembro realSpeed1.
Definition: Motors.cpp:612
void stopAndResetPositions()
this function resets some variables and replace the position variables to the real positions of Sands...
Definition: Motors.cpp:372
double getThetaCurrent()
obtiene la varieble miembro thetaCurrent
Definition: Motors.cpp:532
double couplingAngle
Definition: Motors.h:35
Motors()
It's the class constructor.
Definition: Motors.cpp:41
double q1_current
Definition: Motors.h:38
AccelStepper stepper1
Definition: Motors.h:30
double getCurrentModule()
calcula el modulo de la posicion actual de la esfera.
Definition: Motors.cpp:481
static double arcLength(double, double, double)
calcula la longitud de arco que se forma al girar de un punto A a un punto B en coordenadas polares...
Definition: Motors.cpp:833
void setSpeed(int)
cambia la velocidad de SandSara.
Definition: Motors.cpp:548
int position()
devuelve un valor para saber en donde se encuentra la esfera.
Definition: Motors.cpp:503
void completePath()
execute the remaining buffered steps.
Definition: Motors.cpp:344
static double normalizeAngle(double)
normaliza un angulo para estar en el rango de [0,2*PI).
Definition: Motors.cpp:810
double _pathSpeed
Definition: Motors.h:41
static double thetaPolar(double, double)
calcula el angulo que se forma con la horizontal, de un punto x,y.
Definition: Motors.cpp:786
void setRealQ1(double)
moficica el miembro realQ1.
Definition: Motors.cpp:580
void moveTo(double x, double y, bool=false)
Esta funcion hace que el robot se mueve de su posicion actual hacia una nueva posicion x...
Definition: Motors.cpp:66
double getZCurrent()
obtiene la variable miembro zCurrent
Definition: Motors.cpp:524
static void constrainXY(double &x, double &y)
Definition: Motors.cpp:920
void setZCurrent(double)
moficica el miembro z_current.
Definition: Motors.cpp:561
int microstepping
Definition: Motors.h:33
void setRealSpeed2(double)
moficica el miembro realSpeed2.
Definition: Motors.cpp:620
double getCurrentAngle()
Calcula el angulo de la posicion actual de la esfera.
Definition: Motors.cpp:491
void resetSpeeds()
Recalcula las velocidades de los puntos guardados para movimientos futuros.
Definition: Motors.cpp:406
bool lastPoint
Definition: Motors.h:42
AccelStepper stepper2
Definition: Motors.h:31
double millimeterSpeed
Definition: Motors.h:40
double module(double, double, double, double)
Calcula la distancia entre 2 puntos.
Definition: Motors.cpp:745
void setRealQ2(double)
moficica el miembro realQ2.
Definition: Motors.cpp:588