summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ai
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ai')
-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 réinitialise
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'entrée 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 réinit la PWM" << std::endl;
+ motor_.setPwm (0, 0);
// Attend la première 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 précisemment
void Ai::recale (void)
{
motor_.recalage();
@@ -219,12 +226,22 @@ void Ai::basic (double d)
void Ai::rotation (double a)
{
// On vérifie que ca ne fasse pas moins de trois degré
- // XXX
- motor_.rotation(a);
- do
- {
- update();
- }while (!motor_.idle()); // XXX Gérer le cas d'une rotation trop petite
+ // On récupère l'angle
+ double destNorm;
+ // On normalise si besoin
+ if (a < 0)
+ destNorm += 2 * M_PI;
+ // On récupère la différence 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