summaryrefslogtreecommitdiff
path: root/i/marvin/src/motor/motor.hh
diff options
context:
space:
mode:
authorhaller2005-11-17 11:10:17 +0000
committerhaller2005-11-17 11:10:17 +0000
commitda4a77ff094a0dc74414ec1de2cac08e8b7b60f4 (patch)
tree402c39246c164af44648fd98d2ea85500d58df58 /i/marvin/src/motor/motor.hh
parent164d8870bc058450e6967a594dd9033d088316af (diff)
Importation brut du code récupérable de robert
Diffstat (limited to 'i/marvin/src/motor/motor.hh')
-rw-r--r--i/marvin/src/motor/motor.hh128
1 files changed, 128 insertions, 0 deletions
diff --git a/i/marvin/src/motor/motor.hh b/i/marvin/src/motor/motor.hh
new file mode 100644
index 0000000..b527525
--- /dev/null
+++ b/i/marvin/src/motor/motor.hh
@@ -0,0 +1,128 @@
+#ifndef motor_hh
+#define motor_hh
+// motor.hh
+// robert - programme du robot 2005 {{{
+//
+// Copyright (C) 2005 Nicolas Haller
+//
+// Robot APB Team/Efrei 2005.
+// Web: http://assos.efrei.fr/robot/
+// Email: robot AT efrei DOT fr
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+// }}}
+
+#include "config/config.hh"
+#include "asserv/asserv.hh"
+
+#include <queue>
+
+/// Gère les moteurs de déplacement du robot
+class Motor : public Asserv::Receiver
+{
+ struct ordre
+ {
+ // Ordre (true pour linéaire, false pour rotation
+ bool ordre_;
+ double arg_;
+ // Constructeur
+ ordre(bool ordre, double arg) { ordre_ = ordre; arg_ = arg; }
+ };
+ private:
+ /// Communication avec l'asservissement
+ Asserv asserv_;
+ /// Système de log
+ Log log_;
+ /// Pile de commande
+ std::queue<ordre> fOrdre_;
+ /// position
+ double posX_;
+ double posY_;
+ double posA_;
+ double speed_;
+ /// Etat des commandes
+ bool idle_;
+ /// Drapeau pour quand on a reçu un F
+ bool doneDone_;
+ /// Drapeau levé quand on a envoyé un "Ta Gueule"
+ bool f0Sended_;
+ /// Paramètre de conf
+ int pStatPosition_;
+ int pStatMotor_;
+ /// Etat du port d'entrée
+ int pinState_;
+ bool pinUpdated_;
+
+ public:
+ /// Constructeur
+ Motor (const Config & config);
+ /// Initialise les moteurs
+ void init(void);
+ ///Arrête les moteurs
+ void stop(void);
+ /// Renvoie la position X
+ double getX(void);
+ /// Renvoie la position Y
+ double getY(void);
+ /// Renvoie l'angle A
+ double getA(void);
+ /// On set les positions dans l'avr
+ void setPosition(double x, double y, double a);
+ /// Ammène le robot à la position x,y
+ void goTo(double x, double y, double a);
+ /// Recale le robot
+ void recalage(void);
+ /// Indique si les moteurs sont occupé ou non
+ bool idle (void);
+ /// Execute un déplacement linéaire
+ void linearMove(double d);
+ /// Execute une rotation(argument en radian)
+ void rotation(double newA);
+ /// set de la vitesse des moteurs
+ void setMaxSpeed(int maxLspeed, int maxRspeed);
+ /// set de l'acceleration des moteurs
+ void setAccel(int accel);
+ /// récupère la vitesse linéaire maximum
+ int getMaxLSpeed(void);
+ /// Syncronisation
+ bool sync(void);
+ /// On attend...
+ void wait(int timeout);
+ /// Récupère le File Descriptor
+ int getFd(void);
+ /// Retoure l'état du jack (false entrée et true sortie)
+ bool jackState(void);
+ /// Retourne la couleur selectionné
+ bool colorState (void);
+ /// déclaration des fonctions de receiver
+ void receiveCounter (double lMotor, double rMotor);
+ void receivePosX (double xPos);
+ void receivePosY (double yPos);
+ void receivePosA (double aPos);
+ void receiveSpeedStat (int leftError, int leftInt, int rightError,
+ int rightInt);
+ void receivePwm (double leftPwm, double rightPwm);
+ // Défini les valeurs de la PWM
+ void setPwm(int leftPwm = 0, int rightPwm = 0);
+ void receiveTiming (int motorTimer4,
+ int motorTimer3, int motorTimer2,
+ int motorTimer1, int motorTimer0);
+ void receiveInPort (int port);
+ void receiveSharp (int sharp1, int sharp2, int sharp3);
+ void receiveTazState(int state, int subState); // XXX Vérifier les formats
+ void done (void);
+};
+#endif // motor.hh