summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ai/ai.cc
diff options
context:
space:
mode:
authordufourj2005-05-05 13:47:18 +0000
committerdufourj2005-05-05 13:47:18 +0000
commiteebc8595234bd4999b66fbd7b88e040ace900d6a (patch)
tree45f291b245174947347800999a72e0861be3786b /2005/i/robert/src/ai/ai.cc
parentdc1defb9c6dbc965782f1da84979010f2520809c (diff)
Config :
* ralentissement de la vitesse et accélération Ai : * réinitialisation de la PWM à zéro * gestion de rotations inutiles Motor : * fonction pour reset de la PWM sur asserv
Diffstat (limited to '2005/i/robert/src/ai/ai.cc')
-rw-r--r--2005/i/robert/src/ai/ai.cc35
1 files changed, 26 insertions, 9 deletions
diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc
index c184f95..34eb75d 100644
--- a/2005/i/robert/src/ai/ai.cc
+++ b/2005/i/robert/src/ai/ai.cc
@@ -43,14 +43,16 @@ Ai::Ai(const Config & config)
roundDuration_(config.get<int>("ai.roundDuration")),
vitesseAsc_(config.get<int>("ai.vitesseAsc"))
{
- //instance = this
scheduler_.insert (schedulableMotor_);
scheduler_.insert (schedulableEs_);
}
+/// Destructeur
Ai::~Ai (void)
{
+ // On rinitialise
init ();
+ // On sync
do {
update ();
}
@@ -75,6 +77,11 @@ void Ai::stop(void)
{
// Stop les moteurs
motor_.stop();
+ // On sync
+ do
+ {
+ update ();
+ } while (!motor_.idle ());
}
/// Lance le robot
@@ -86,7 +93,8 @@ void Ai::run(void)
// Attend l'entre du jack "pret initialiser"
std::cout << "On attend le jack" << std::endl;
waitJack(false);
- std::cout << "Le jack est mis" << std::endl;
+ std::cout << "Le jack est mis, on rinit la PWM" << std::endl;
+ motor_.setPwm (0, 0);
// Attend la premire sortie du jack(init)
waitJack(true);
std::cout << "Le jack est sorti" << std::endl;
@@ -193,7 +201,6 @@ void Ai::goTo (double x, double y ,double a)
}
/// Recale contre une bordure.
-// XXX Voir ca plus prcisemment
void Ai::recale (void)
{
motor_.recalage();
@@ -219,12 +226,22 @@ void Ai::basic (double d)
void Ai::rotation (double a)
{
// On vrifie que ca ne fasse pas moins de trois degr
- // XXX
- motor_.rotation(a);
- do
- {
- update();
- }while (!motor_.idle()); // XXX Grer le cas d'une rotation trop petite
+ // On rcupre l'angle
+ double destNorm;
+ // On normalise si besoin
+ if (a < 0)
+ destNorm += 2 * M_PI;
+ // On rcupre la diffrence d'angle
+ double diff = motor_.getA () - destNorm;
+ double limit = 3 / 360 * 2 * M_PI; // 3 degr en radian XXX
+ if (diff > limit || diff < - limit)
+ {
+ motor_.rotation(a);
+ do
+ {
+ update();
+ } while (!motor_.idle());
+ }
}
/// Monte(vrai) ou descend(faux) l'ascenceur