firmwareSandsara
Motors Class Reference

Se encarga del control de los motores. More...

#include <Motors.h>

Public Member Functions

 Motors ()
 It's the class constructor. More...
 
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,y. More...
 
void init (double=0, double=0)
 inicializa el objeto Motors More...
 
double getCurrentModule ()
 calcula el modulo de la posicion actual de la esfera. More...
 
double getCurrentAngle ()
 Calcula el angulo de la posicion actual de la esfera. More...
 
void setZCurrent (double)
 moficica el miembro z_current. More...
 
void setThetaCurrent (double)
 moficica el miembro theta_current. More...
 
void setSpeed (int)
 cambia la velocidad de SandSara. More...
 
double getSpeed ()
 obtiene el valor de la velocidad actual de Sandsara en milimetros por segundo More...
 
double getZCurrent ()
 obtiene la variable miembro zCurrent More...
 
double getThetaCurrent ()
 obtiene la varieble miembro thetaCurrent More...
 
double module (double, double, double, double)
 Calcula la distancia entre 2 puntos. More...
 
int position ()
 devuelve un valor para saber en donde se encuentra la esfera. More...
 
void completePath ()
 execute the remaining buffered steps. More...
 
void setRealQ1 (double)
 moficica el miembro realQ1. More...
 
void setRealQ2 (double)
 moficica el miembro realQ2. More...
 
double getRealQ1 ()
 moficica el miembro realQ1. More...
 
double getRealQ2 ()
 moficica el miembro realQ1. More...
 
void stopAndResetPositions ()
 this function resets some variables and replace the position variables to the real positions of Sandsara. More...
 
void setRealSpeed1 (double)
 moficica el miembro realSpeed1. More...
 
void setRealSpeed2 (double)
 moficica el miembro realSpeed2. More...
 
void resetSpeeds ()
 Recalcula las velocidades de los puntos guardados para movimientos futuros. More...
 

Static Public Member Functions

static void rotate (double &, double &, double)
 rota la posicion x,y con centro en 0,0 tantos grados como se desee. More...
 
static double zPolar (double, double)
 calcula el valor del modulo del punto en coordenadas polares More...
 
static double thetaPolar (double, double)
 calcula el angulo que se forma con la horizontal, de un punto x,y. More...
 
static double normalizeAngle (double)
 normaliza un angulo para estar en el rango de [0,2*PI). More...
 
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. More...
 
static void constrainXY (double &x, double &y)
 

Public Attributes

AccelStepper stepper1
 
AccelStepper stepper2
 
MultiStepper steppers
 
int microstepping
 
double degrees_per_step
 
double couplingAngle
 
double x_current
 
double y_current
 
double q1_current
 
double q2_current
 
double millimeterSpeed = 15
 
double _pathSpeed
 
bool lastPoint
 

Detailed Description

Se encarga del control de los motores.

Esta clase se encarga de calcular los pasos necesarios para llegar a una determinada posicion. En esta clase tambien se encuentran todas las matematicas con respecto a la cinematica y cinematica inversa de Sandsara.

Parameters
microsteppingalmacena el valor de microstepping del motor
x_currentalamacena la coordenada x de la posicion actual de Sandsara (en milimetros).
y_currentalamacena la coordenada y de la posicion actual de Sandsara (en milimetros).
q1_currentalmacena el valor actual del angulo del primer eslabon de Sandsara (en radianes).
q2_currentalmacena el valor actual del angulo del segundo eslabon de Sandsara (en radianes).
zCurrentse utiliza como referencia del componente modulo para los archivos thr (en milimetros).
thetaCurrentse utiliza como referencia del componente del angulo para los archivos thr (en radianes).
couplingAnglees un angulo que se utiliza para saber cuanto rotar un archivo.
constantMotorSpeedSi esta variable es true, los motores se moveran a una velocidad constante siempre, si es false la velocidad dependera de la distancia recorrida de un punto a otro.

Constructor & Destructor Documentation

◆ Motors()

Motors::Motors ( )

It's the class constructor.

Member Function Documentation

◆ arcLength()

double Motors::arcLength ( double  deltaZ,
double  deltaTheta,
double  zInit 
)
static

calcula la longitud de arco que se forma al girar de un punto A a un punto B en coordenadas polares.

En otras palabras, se calcula la distancia que se recorre en una trayectoria espiral de un punto A a un punto B, el numero de grados totales que gira esta definido por el parametro deltaTheta.

Parameters
deltaZes la diferencia entre la componente modulo del punto final menos la componente modulo del punto inicial.
deltaThetaes la diferencia entre la componente angulo del punto final menos la componente angulo del punto inicial.
zInites la componente modulo del punto inicial.

◆ completePath()

void Motors::completePath ( )

execute the remaining buffered steps.

◆ constrainXY()

void Motors::constrainXY ( double &  x,
double &  y 
)
static

calculus of theta

if x,y is out of range, z will be the maximun radius possible

Delimiter module z

◆ getCurrentAngle()

double Motors::getCurrentAngle ( )

Calcula el angulo de la posicion actual de la esfera.

Returns
El angulo, medido desde la horizontal, de la posicion actual del robot.
Note
el angulo se encuentra en el rango de [0 , 2*PI)

◆ getCurrentModule()

double Motors::getCurrentModule ( )

calcula el modulo de la posicion actual de la esfera.

Returns
La distancia entre el centro y la posicion actual del robot.

◆ getRealQ1()

double Motors::getRealQ1 ( )

moficica el miembro realQ1.

Returns
la variable miembro realQ1.

◆ getRealQ2()

double Motors::getRealQ2 ( )

moficica el miembro realQ1.

Returns
la variable miembro realQ2.

◆ getSpeed()

double Motors::getSpeed ( )

obtiene el valor de la velocidad actual de Sandsara en milimetros por segundo

Returns
la variable miembro millimeterSpeed.

◆ getThetaCurrent()

double Motors::getThetaCurrent ( )

obtiene la varieble miembro thetaCurrent

Returns
the variable member thetaCurrent

◆ getZCurrent()

double Motors::getZCurrent ( )

obtiene la variable miembro zCurrent

Returns
the variable member zCurrent

◆ init()

void Motors::init ( double  xInit = 0,
double  yInit = 0 
)

inicializa el objeto Motors

Parameters
xInites la coordenada en el eje x, medida en milimetros, que se desea como posicion inicial, por defecto es 0.
yInites la coordenada en el eje y, medida en milimetros, que se desea como posicion inicial, por defecto es 0.

◆ module()

double Motors::module ( double  x1,
double  y1,
double  x2,
double  y2 
)

Calcula la distancia entre 2 puntos.

Parameters
x1es el valor en el eje x del primer punto.
y1es el valor en el eje y del primer punto.
x2es el valor en el eje x del segundo punto.
y2es el valor en el eje y del segundo punto.
Returns
la distancia entre ambos puntos.

◆ moveTo()

void Motors::moveTo ( double  x,
double  y,
bool  littleMovement = false 
)

Esta funcion hace que el robot se mueve de su posicion actual hacia una nueva posicion x,y.

Si las coordenadas x,y se encuentran fuera del espacio de trabajo, la funcion se encarga de limitarlas. La posicion x,y se mide en milimetros. Si la distancia que tiene que recorrer es menor a 0.5 milimetros entonces no avanza a menos que el parametro littleMovement sea verdadero. Si la distancia a recorrer es mayor a 1.1 milimetros, entonces se avanza en linea recta al nuevo punto en una trayectoria de puntos equidistantes a 1 mm formando una linea recta.

Parameters
xes la coordenada en el eje x, medida en milimetros, hacia donde se desea avanzar.
yes la coordenada en el eje y, medida en milimetros, hacia donde se desea avanzar.
littleMovementes una variable que si su valor es false entonces no se movera a menos que la distancia minima sea 0.5 mm y true para que se mueva en cualquier caso.

◆ normalizeAngle()

double Motors::normalizeAngle ( double  angle)
static

normaliza un angulo para estar en el rango de [0,2*PI).

Parameters
anglees el angulo, medido en radianes, que se desea normalizar.
Returns
un valor con el rango de [0 , 2*PI).

◆ position()

int Motors::position ( )

devuelve un valor para saber en donde se encuentra la esfera.

Returns
un entero que puede significar lo siguiente. 0, se encuentra en el centro o a 2 mm. 1, no se encuentra ni en el centro ni en la orilla. 2, se cuentra en la orilla o a 2 mm.

◆ resetSpeeds()

void Motors::resetSpeeds ( )

Recalcula las velocidades de los puntos guardados para movimientos futuros.

◆ rotate()

void Motors::rotate ( double &  x,
double &  y,
double  angle 
)
static

rota la posicion x,y con centro en 0,0 tantos grados como se desee.

por ejemplo, si se rota la posicion (1,0) 90 grados el resultado seria un punto (0,1).

Parameters
xcoordenada en el eje x.
ycoordenada en el eje y.
anglees el angulo que se desea rotar los puntos x,y.
Note
los valores x,y se pasan por referencia.

◆ setRealQ1()

void Motors::setRealQ1 ( double  q1)

moficica el miembro realQ1.

Parameters
q1es el valor que se le va a asignar a la variable miembro realQ1.

◆ setRealQ2()

void Motors::setRealQ2 ( double  q2)

moficica el miembro realQ2.

Parameters
q2es el valor que se le va a asignar a la variable miembro realQ1.

◆ setRealSpeed1()

void Motors::setRealSpeed1 ( double  speed1)

moficica el miembro realSpeed1.

Parameters
speed1es el valor que se le va a asignar a la variable miembro realQ1.

◆ setRealSpeed2()

void Motors::setRealSpeed2 ( double  speed2)

moficica el miembro realSpeed2.

Parameters
speed2es el valor que se le va a asignar a la variable miembro realQ1.

◆ setSpeed()

void Motors::setSpeed ( int  speed)

cambia la velocidad de SandSara.

Parameters
speedes la nueva valocidad, en milimetros por segundo, que va a tener de SandSara.

◆ setThetaCurrent()

void Motors::setThetaCurrent ( double  theta)

moficica el miembro theta_current.

Parameters
thetaes el valor que se le va a asignar a la variable miembro thetaCurrent.
Note
Esto es importante para que los archivos .thr tengan una referencia de donde empezar a moverse.

◆ setZCurrent()

void Motors::setZCurrent ( double  z)

moficica el miembro z_current.

Parameters
zes el valor que se le va a asignar a la variable miembro zCurrent.
Note
Esto es importante para que los archivos .thr tengan una referencia de donde empezar a moverse.

◆ stopAndResetPositions()

void Motors::stopAndResetPositions ( )

this function resets some variables and replace the position variables to the real positions of Sandsara.

◆ thetaPolar()

double Motors::thetaPolar ( double  x,
double  y 
)
static

calcula el angulo que se forma con la horizontal, de un punto x,y.

Parameters
xes el valor de la coordenada en el eje x, medido en milimetros.
yes el valor de la coordenada en el eje y, medido en milimetros.
Returns
el angulo, medido desde la horizontal, del punto x,y.
Note
el angulo se encuentra en el rango de [0 , 2*PI)

◆ zPolar()

double Motors::zPolar ( double  x,
double  y 
)
static

calcula el valor del modulo del punto en coordenadas polares

Parameters
xes el valor en el eje x del punto.
yes el valor en el eje y del punto.
Returns
el modulo del punto en coordenadas polares.

Member Data Documentation

◆ _pathSpeed

double Motors::_pathSpeed

◆ couplingAngle

double Motors::couplingAngle

◆ degrees_per_step

double Motors::degrees_per_step

◆ lastPoint

bool Motors::lastPoint

◆ microstepping

int Motors::microstepping

◆ millimeterSpeed

double Motors::millimeterSpeed = 15

◆ q1_current

double Motors::q1_current

◆ q2_current

double Motors::q2_current

◆ stepper1

AccelStepper Motors::stepper1

◆ stepper2

AccelStepper Motors::stepper2

◆ steppers

MultiStepper Motors::steppers

◆ x_current

double Motors::x_current

◆ y_current

double Motors::y_current

The documentation for this class was generated from the following files: