Marc Silanus

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 :