Simulateur Azolla
Il existe de nombreux simulateurs robotique :
- Guido van Robot ( http://gvr.sourceforge.net/) : Simulateur très simple utilisé pour s'initier à la programmation. La syntaxe est proche du python.
- Rossum's Playhouse (RP1) (http://rossum.sourceforge.net/) : Simulateur associé au "Fire Fighting Home robot Contest" du Trinity College. Ce concour existe depuis 18 ans et propose comme scénario de rechercher et d'éteindre un incendie dans une maison. La programmation du robot se fait en java. Il faut définir le robot, créer le monde (en 2D) et programmer le comportement. La prise en main n'est pas facile...
- Azolla (http://www.codeproject.com/Articles/33587/2D-LUA-Based-Robot-Simulator) : Simulation d'un ou plusieurs robots à plateforme différentielle. Il dispose d'un nombre de sonars paramétrables pour détecter des obstacles et d'une boussole qui indique son orientation. Sa programmation se fait en Lua, langage orienté objet dont la syntaxe est proche du Pascal et facile à mettre en oeuvre.
- Microsoft Robotics Developer Studio (http://www.microsoft.com/robotics/) : La suite robotique de Microsoft, gratuite, associée à Visual Studio Express 2010. Elle permet de simuler certaine bases robotiques (Lego NXT, Parallax, Roomba, ...) en utilisant soit un langage graphique (VPL) ou un langage textuel (VB, C++, C#, Python).
- Webot (http://www.cyberbotics.com) : Simulateur professionnel. Modélisation du robot et du monde dans le quel il doit évoluer en 3D, programmation des comportement en différent langages, simulation et programmation du robot réel.
- Marilou (http://www.anykode.fr): Concurrent du précédent, il est développé par une société française et présente l'avantage de disposer d'une base de données de composants industriels présents sur le marché afin de modéliser le robot plus facilement.
J'ai choisi d'utiliser Azolla. Ce dernier permet de créer très simplement des mondes à l'aide d'une interface graphique et la plateforme robotique simulée ressemble à celle que l'on peut utilisé en laboratoire (plateforme différentielle, capteurs à ultrason ou IR pour la détection d'obstacles).
Les élèves le prennent rapidement en main et l'utilisation du langage Lua ne semble pas les perturber (http://www.lua.org/manual/5.2/ - http://fr.wikipedia.org/wiki/Lua)
Utilisation du simulateur Azolla
http://www.codeproject.com/Articles/33587/2D-LUA-Based-Robot-Simulator
Introduction
Azolla est un simulateur 2D de robot mobile. Avec ce simulateur, nous pouvons concevoir les règles de navigation d’un ou plusieurs robots dans un monde en 2D.
Les règles sont conçues à l'aide de script Lua. C’est un langage de script intégrable puissant, rapide et léger. Utiliser Lua nous offrira de nombreux avantages dans la conception d'algorithmes pour les robots mobiles.
L'éditeur de monde est graphique et intuitif. Les utilisateurs peuvent créer un environnement pour tester les robots en utilisant la souris.
Le robot
Les méthodes d’Azolla
- readsensor(integer index) : accepts the sensor index; returns the measured distance of the active robot.
- setspeed(integer left, integer right): accepts the left and right wheel speed of the active robot; returns nothing.
- getangle() : accepts nothing; returns the current angular position of the active robot (in radians).
- getnumofrobots() : accepts nothing; returns number of existing robots.
- getposition() : accepts nothing; returns x and y position of active robot.
- gettarget(int index) : accepts index of target; returns x and y position of selected target.
- textline(string msg) : accepts the message to be displayed; returns nothing.
- setactiverobot(integer index) : activates a certain robot.
- stepforward() : runs simulation one time step.
Structure d’un programme
function azolla.main(azolla) while true do -- User code here end end |
Exemple :
function azolla.main(azolla) while true do -- Read sensors states front = azolla:readsensor(0) left = azolla:readsensor(1) rigth = azolla:readsensor(5) -- if there is an obstacle, turn, else forward if(front<10 or left<10 or rigth<10) then azolla:setspeed(-20,20) else azolla:setspeed(20,20) end azolla:stepforward() end end |
Exemple avec écriture de fonctions :
function azolla.main(azolla) -- déclaration des fonctions function avancer(vit) azolla:setspeed(vit,vit) return 0 end function demiTour() azolla:setspeed(5,-5) turn=true while (turn) do if ((azolla:getangle()<3.15 and azolla:getangle()>3.14) or (azolla:getangle()<0.01)) then turn=false end azolla:stepforward() end return 0 end -- Programme principal front=25 while true do if(front<10) then demiTour() else avancer(20) end front = azolla:readsensor(0) azolla:stepforward() end end |
Exemple recherche de cible :
function azolla.main(azolla) azolla:setspeed(20,20) xt,yt=azolla:gettarget(0) pasTrouver=true while pasTrouver do x,y=azolla:getposition(0) azolla:textline("Target : "..xt..","..yt.." Robot : "..x..","..y) if ((x<xt+5) and (x>xt-5) and (y<yt+5) and (y>yt-5)) then pasTrouver=false else front = azolla:readsensor(0) left = azolla:readsensor(1) rigth = azolla:readsensor(5) if(front<10 or left<10 or rigth<10) then azolla:setspeed(-20,20) else azolla:setspeed(20,20) end end azolla:stepforward() end end |
Demo :