J’ai eu l’occasion récente d’acquérir le fabuleux set de Lego « Mindstorm NXT 2 ».
Pour ceux qui ne le savent pas, il s’agit d’un coffret de Lego Technic contenant un bloc programmable, des moteurs (trois éléments qui peuvent tourner, afin d’animer roues, bras et autres), et des capteurs (deux de toucher, un de distance et un de lumière).
Rien de mieux pour réveiller en moi les joies de la construction improbable et de pouvoir leur donner vie !
Les avantages du Lego Mindstorms NXT sont nombreux : c’est un kit d’apprentissage à la robotique à moindre frais (~300€), il est fait en Lego (donc très simple pour l’assemblage, et la nostalgie empêche de baisser les bras trop vite), mais surtout, on peut faire du développement en Java !
Pour cela, il existe une API très bien faite, dénommé « LeJOS« , et qui fonctione de la manière suivante :
- En premier lieu, on flashe le bloc programmable avec les outils fournis. Cela passe par un outil très simple qui prend toute l’opération en charge.
- Ensuite, il suffit de développer une application avec les JAR fournis avec l’API (qui regroupe une JVM simplifiée et l’API d’accès aux moteurs et capteurs).
- Il n’y a plus qu’à compiler avec les outils donnés et à faire le push du programme sur le bloc programmable.
L’API est très bien documentée, ainsi que tous les outils de compilation / publication.
Pour vous montrer la simplicité du développement, voilà un exemple de code avec la machine qui va avec :
La machine :
Deux moteurs sont utilisés pour l’avancement de la voiture, et le troisième est utilisé pour la direction des roues avant. Le capteur d’ultrason est mis à l’avant de la voiture pour éviter les colisions sur les murs et les objets.
Pour activer cette petite voiture, un programme simple va la faire avancer, sauf si il y a un objet devant, auquel cas elle va reculer et changer de direction.
Le code pour cela est le suivant :
import lejos.nxt.Button;
import lejos.nxt.Motor;
import lejos.nxt.MotorPort;
import lejos.nxt.SensorPort;
import lejos.nxt.UltrasonicSensor;
/** Programme pour la voiture Lego. */
public class Car {
//Les deux moteurs pour les roues arrières.
private static Motor back1 = new Motor(MotorPort.A);
private static Motor back2 = new Motor(MotorPort.B);
//Le moteur utilisé pour la direction avant.
private static Motor direction = new Motor(MotorPort.C);
//Le capteur d'ultrason.
private static UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S1);
//La boucle principale.
public static void main(String[] args) throws Exception {
//Boucle jusqu'à ce qu'on presse le bouton d'échappement.
while (!Button.ESCAPE.isPressed()) {
//Récupère la distance en CM.
int distance = sonic.getDistance();
if (distance <10) {
changeDirection();
} else {
moveForward();
}
}
}
//Fait tourner les roues avant et recule.
private static void changeDirection() {
direction.rotate(35, false);
moveBackward();
direction.rotate(-35, false);
}
//Avance.
private static void moveForward() {
back1.rotate(360, true);
back2.rotate(360, true);
}
//Recule.
private static void moveBackward() {
back1.rotate(-360, true);
back2.rotate(-360, true);
}
}

Laisser un commentaire