Bonjour à tous, je vous partage ce qui pourrait être une base pour un simulateur pour la coupe de france de robotique qui tourne sous processing : https://processing.org/
Voici à quoi ça ressemble :
Pour le moment c'est quelque chose de très basique ça prend une image png de la table correctement dimensionnée en pixel ( et que je joint aussi :
Et ça permet de déplacer un robot ( actuellement représenté par un carré jaune ) avec les touches du clavier ( z q s d pour la translation du robot et a e pour la rotation ... ) et ça affiche des données comme la position du robot, son orientation etc ... Cela peut être pratique pour "planifier" les différents trajets que doit faire votre robot pendant un match .. mais ça peut assez facilement être modifié pour :
- d'autres type de table / carte, ( il suffit de changer l'image / les dimensions )
- être connecté à une arduino par un port série pour afficher des données en temps réel,
- être mis en 3D au lieu d'être uniquement 2D .
- mettre plus de robot ...
Ci joint le code :
// Code réalisé par Mike118 de www. robot-maker.com. // Ce Sketch peut servir de base pour un simulateur de robot pour la coupe de france de robotique // la table est orientée de sorte à ce que l'axe de x soit la longeur de la table ( 3000mm ) // l'axe des y est la largeur de la table (2000mm) et l'origine au milieu bas. // x € [ -1500, 1500] et y € [0, 2000] // Utilisez les touches du clavier a z e q s d pour déplacer le robot. // Dimensions de la table en mm int tablex = 3000; int tabley = 2000; // Coordonnées du robot en mm int x=-1400; int y=1200; float z=0; // vitesse du robot modifiées par le clavier int vx=0; int vy=0; float vz = 0; PImage table; int framerate = 25; int vmax = 500; // mm/s float vzmax = PI/64; // en Rad/s void setup() { size(1200, 700); frameRate(framerate); table = loadImage("tablegrille.png"); // 750 * 500 pixel 1 pixel = 4mm } void draw() { background(0); println(frameCount + ": " + key); imageMode(CENTER); image(table,width/2,height/2); drawData() ; int l = 180; // Largeur du robot int L= 180; // Longuer du robot int margin =int(max(L/2,l/2)*sqrt(2)); // marge par rapport au bord x = constrain(x + vx, -tablex/2 + margin, tablex/2 - margin); y = constrain(y + vy, 0 + margin, tabley - margin); z += vz; if( z > 2 * PI) { z-= 2*PI; } else if (z < 0) { z+= 2*PI; } drawRobot(x, y, z, 255, 255, 0, 180, 180); } // Fonctions de conversions de position en mm en postion en pixels int xToPixel(int x) { return x/4 + width/2 ; // /4 car 1 pixel = 4mm } int yToPixel(int y) { return -y/4 + height -100; // /4 car 1 pixel = 4mm et -100 pour la bordure de noir } // drawRobot(int x, int y, float z, int r, int g, int b, int l, int L) // x y position en mm // z angle en radian // r g b, entier entre 0 et 255 pour définir la couleur du robot // l et L en mm largeur et Longueur du robot. void drawRobot(int x, int y, float z, int r, int g, int b, int l, int L) { rectMode(CENTER); int largeurRobot = l / 4; int longueurRobot = L/ 4; fill(r,g,b); translate(xToPixel(x), yToPixel(y)); rotate(z); rect(0, 0, largeurRobot,longueurRobot); } void keyPressed() { if(key == 'z') vy=vmax/framerate; else if(key == 's') vy=-vmax/framerate; else if(key == 'q') vx=-vmax/framerate; else if(key == 'd') vx=vmax/framerate; else if(key == 'a') vz=-vzmax; else if(key == 'e') vz=vzmax; } void keyReleased() { vx=0; vy=0; vz=0; } void drawData() { textSize(18); fill(0,0,255); text("x = " + x, 30,20); text("y = " + y, 30,40); text("z = " + z, 30,60); text("vx = " + vx, 30,80); text("vy = " + vy, 30,100); text("vz = " + vz, 30,120); }
Pour tester c'est assez simple :
- Téléchargez la version de processing qui vous faut : https://processing.org/download installez le et lancez le. Vous aurez alors un fichier vierge .pde qui s'ouvre.
- Copiez y le code ci dessus, et enregistrez le fichier.
- Téléchargez l'image .png et mettez là dans le dossier qui vient d'être crée en enregistrant le fichier.pde.
- Cliquez sur le bouton " play " en haut à gauche, la fenêtre de l'appli s'ouvre et vous pourrez alors déplacer le "robot " avec le clavier.
N'hésitez pas à tester et à modifier.
Si ça vous intéresse / que vous l'utilisez, n'hésitez pas à commenter ce post avec votre application / vos modifications.
Je pourrais éventuellement également proposer plus de chose sur cette base d'application si il y a des gens qui ont des idées ou des besoins...
En espérant que ça puisse donner quelques idées à certains.