diff --git a/stm32/include/command.h b/stm32/include/command.h
index 9b094c7e2418c72267d2b29b2fc2da733e052f72..7f5d5e170072c8478f09b080cab725ae1dc2c044 100644
--- a/stm32/include/command.h
+++ b/stm32/include/command.h
@@ -1,8 +1,18 @@
 #include "Angle.h"
 #include "PositionPlusAngle.h"
 
+
 class Command
 {
+public:
+	virtual void update(PositionPlusAngle positionPlusAngleActuelle, Angle vitesse_angulaire_atteinte, float vitesse_lineaire_atteinte) = 0;
+
+	virtual float getLinearSpeed() = 0;
+	virtual Angle getAngularSpeed() = 0;
+};
+
+class TrapezoidalCommand : public Command
+{
 private:
         float vitesse_lineaire_a_atteindre;
         Angle vitesse_angulaire_a_atteindre;
@@ -17,7 +27,7 @@ private:
         bool direction;
         bool stop;
 public:
-	Command();
+	TrapezoidalCommand();
 	void update(PositionPlusAngle positionPlusAngleActuelle, Angle vitesse_angulaire_atteinte, float vitesse_lineaire_atteinte);
 
         void goTo(Position position, bool stop=true);
diff --git a/stm32/include/simul/robot.h b/stm32/include/simul/robot.h
index a77838eae2a327f6e3bf32641f194cc7d2b18eed..95a086dcbc564473d09105f04b29bac23533b863 100644
--- a/stm32/include/simul/robot.h
+++ b/stm32/include/simul/robot.h
@@ -17,7 +17,7 @@ public:
 	PositionPlusAngle pos;
 	PositionPlusAngle deriv;
 	boost::circular_buffer<PositionPlusAngle> olds;
-	class Command* command;
+	class TrapezoidalCommand* command;
 	class OdoRobot* odometrie;
 	class Strategie* strategie;
 	
diff --git a/stm32/include/strategie.h b/stm32/include/strategie.h
index f908d2f893924043f7c74dd10781fba0121de122..3e2640dec6d21da3a8a608b9ee705a8facb78d8e 100755
--- a/stm32/include/strategie.h
+++ b/stm32/include/strategie.h
@@ -7,13 +7,13 @@
 
 #include <stdint.h>
 
-class Command;
+class TrapezoidalCommand;
 class Odometrie;
 
 class Strategie {
     private:
     bool is_blue;
-    Command* command;
+    TrapezoidalCommand* command;
     void doNext();
     int instruction_nb;
     bool collision_detected;
@@ -21,7 +21,7 @@ class Strategie {
 
     public:
     void collisionDetected();
-    Strategie(bool is_blue, Command* command, Odometrie* odometrie);
+    Strategie(bool is_blue, TrapezoidalCommand* command, Odometrie* odometrie);
     void foundOtherRobot();
     void done();
     void doNthInstruction(uint16_t n);
diff --git a/stm32/src/command.cpp b/stm32/src/command.cpp
index b3d448bd60779dc2de6565d74b323ced0ae08eaa..8f301f0559d1b44539afe5164188fa6b54c5c26f 100644
--- a/stm32/src/command.cpp
+++ b/stm32/src/command.cpp
@@ -11,7 +11,7 @@ template<class T> T max(T a, T b)
 	return a > b ? a : b;
 }
 
-Command::Command() :
+TrapezoidalCommand::TrapezoidalCommand() :
     vitesse_lineaire_a_atteindre(0),
     vitesse_angulaire_a_atteindre(0),
 #if 0
@@ -30,7 +30,7 @@ Command::Command() :
 
 #include <iostream>
 
-void Command::update(PositionPlusAngle positionPlusAngleActuelle, Angle vitesse_angulaire_atteinte, float vitesse_lineaire_atteinte)
+void TrapezoidalCommand::update(PositionPlusAngle positionPlusAngleActuelle, Angle vitesse_angulaire_atteinte, float vitesse_lineaire_atteinte)
 {
 	Position vecteur_pos_actuelle_pos_arrivee = destination-positionPlusAngleActuelle.position;
 	
@@ -50,7 +50,7 @@ void Command::update(PositionPlusAngle positionPlusAngleActuelle, Angle vitesse_
 
 
 
-Distance Command::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse_lineaire_atteinte, Distance distance_restante, Angle angle_restant)
+Distance TrapezoidalCommand::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse_lineaire_atteinte, Distance distance_restante, Angle angle_restant)
 {
 
     // Le pivot est la distance que l'on parcourerait si on commencait à décélérer dès maintenant jusqu'une vitesse nulle
@@ -90,7 +90,7 @@ Distance Command::getVitesseLineaireAfterTrapeziumFilter(Distance vitesse_lineai
     }
 }
 
-Angle Command::getVitesseAngulaireAfterTrapeziumFilter(Angle vitesse_angulaire_atteinte, Angle angle_restant)
+Angle TrapezoidalCommand::getVitesseAngulaireAfterTrapeziumFilter(Angle vitesse_angulaire_atteinte, Angle angle_restant)
 {
     if(fabs(wrapAngle(angle_restant))>M_PI_2 + 0.01)
     {
@@ -109,7 +109,7 @@ Angle Command::getVitesseAngulaireAfterTrapeziumFilter(Angle vitesse_angulaire_a
     }
 }
 
-void Command::goTo(Position position, bool stop)
+void TrapezoidalCommand::goTo(Position position, bool stop)
 {
     destination = position;
     direction = false;
diff --git a/stm32/src/simul/robot.cpp b/stm32/src/simul/robot.cpp
index 0534d86c538e9a9a11bedc4324b1be41e94d55d1..be62c536734d9eb695504707846b8f2f0764bd81 100644
--- a/stm32/src/simul/robot.cpp
+++ b/stm32/src/simul/robot.cpp
@@ -51,7 +51,7 @@ Robot::Robot(b2World & world) : world(world), olds(10000)
 	level = 0;
 
 	odometrie = new OdoRobot(this);
-	command = new Command;
+	command = new TrapezoidalCommand;
 	Asservissement* asservissement = new Asservissement(odometrie, command);
 	strategie = new Strategie(true, command, odometrie);
 	asservissement->strategie = strategie;
diff --git a/stm32/src/strategie.cpp b/stm32/src/strategie.cpp
index 9d497705da967ae170ab6923b2b46c74694cdaca..c8d51763ca85b2e5ceede8b71b1f2330bd93837e 100755
--- a/stm32/src/strategie.cpp
+++ b/stm32/src/strategie.cpp
@@ -12,7 +12,7 @@
 
 #define INSTRUCTION_COLLISION 128
 
-Strategie::Strategie(bool is_blue, Command* command, Odometrie* odometrie) :
+Strategie::Strategie(bool is_blue, TrapezoidalCommand* command, Odometrie* odometrie) :
 collision_detected(false)
 {
     this->is_blue = is_blue;
@@ -66,7 +66,7 @@ void Strategie::doNthInstruction(uint16_t n){
     int cote = (is_blue ? 1:-1);
 
     if(n==1)
-        command->goTo(Position(1500, 700));
+        command->goTo(Position(1500, 1000));
     return;
 //rouleau.recracheBoule();
 //return;