summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/motor/motor.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/motor/motor.cc')
-rw-r--r--2004/i/nono/src/motor/motor.cc28
1 files changed, 26 insertions, 2 deletions
diff --git a/2004/i/nono/src/motor/motor.cc b/2004/i/nono/src/motor/motor.cc
index 902e46f..3fcb626 100644
--- a/2004/i/nono/src/motor/motor.cc
+++ b/2004/i/nono/src/motor/motor.cc
@@ -80,7 +80,10 @@ Motor::updateCounter (int l, int r, bool zero)
if (!movement_)
{
if (!nextMovement ())
+ {
+ asserv_.speed (0, 0);
return;
+ }
}
if (movement_)
{
@@ -89,7 +92,6 @@ Motor::updateCounter (int l, int r, bool zero)
if (!nextMovement ())
{
// C'est la fin.
- asserv_.stop ();
return;
}
}
@@ -159,7 +161,29 @@ Motor::speed (double l, double a, double dist, double angle)
double liml, lima;
liml = computeSpeed (dist);
lima = computeSpeed (tracker_.getAngleDistance (angle));
- speedLimit (l - a, l + a, liml, lima);
+ speedLimit (l - a, l + a, liml, lima);
+}
+
+/// Paramètre la vitesse linéaire (-1..+1) gauche et droite. Limite la
+/// vitesse pour pouvoir freiner au bout de dist (mm) et au bout de
+/// l'angle (rad).
+void
+Motor::speedLR (double l, double r, double dist, double angle)
+{
+ double liml, lima;
+ liml = computeSpeed (dist);
+ lima = computeSpeed (tracker_.getAngleDistance (angle));
+ speedLimit (l, r, liml, lima);
+}
+
+/// Paramètre la vitesse angulaire (-1..+1). Limite la vitesse pour
+/// pouvoir freiner au bout de l'angle (rad).
+void
+Motor::rotate (double a, double angle)
+{
+ double lima;
+ lima = computeSpeed (tracker_.getAngleDistance (angle));
+ speedLimit (-a, +a, maxSpeed_, lima);
}
/// Paramètre la vitesse des moteurs (-1..+1).