Skip to content

Paranoiaque

Hugo Ducommun edited this page Sep 20, 2018 · 13 revisions

Précédent | Home | Suivant

Créatures de Braitenberg : Paranoïaque

  1. Lorsque le robot détecte un objet, il avance. S’il ne détecte aucun objet, il tourne à gauche.
  2. Lorsque capteur central du robot détecte un objet, le robot avance. Lorsque c’est le capteur droit (mais pas le capteur central) qui détecte un objet, le robot tourne à droite. Lorsque c’est le capteur gauche (mais pas le capteur central) qui détecte un objet, le robot tourne à gauche.
  3. Tâche similaire à Paranoïaque, mais cette fois changer à chaque seconde la direction dans laquelle le robot tourne. Indice : Utilisez des états pour retenir la direction actuelle et un minuteur pour changer d’état.

Thymio VPL

Exercice 1

RobotParano1

Lorsque le capteur avant détecte un objet, il avancera. En revanche lorsque ce dernier ne capte rien, il tourne à gauche.


Exercice 2

RobotParano2

Lorsque le capteur avant détecte un objet, le Thymio avance, lorsque c'est le capteur gauche, il tourne à gauche et pour le capteur de droite, il tourne à droite. Trois actions, trois lignes.


Exercice 3

RobotParano3

Les deux premières lignes sont à peu près similaires à l'exercice 1. La ligne deux ajoute néanmoins un état allumé lorsque le Thymio ne détecte rien et lance un timer de 1sec. Lorsque ce timer est écoulé, Thymio effectue la troisième ligne d'événement, où il va tourner cette fois-ci à droite et enclenché un timer de 1sec encore une fois. Il passe également son état à éteint. Lorsque le timer s'éteint alors que l'état est éteint. Thymio effectue alors la dernière ligne d’événement, qui lui fait tourner à gauche et enclenche un timer de 1sec tout en allumant l'état. En conclusion, si Thymio ne détecte pas d'objet devant lui, il tourner 1sec à gauche puis 1sec à droite en boucle.

Code

Exercice 1

# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)

onevent prox
	when prox.horizontal[2] >= 2000 do
		motor.left.target = 200
		motor.right.target = 200
		emit pair_run 0
	end

	when prox.horizontal[2] <= 1000 do
		motor.left.target = -200
		motor.right.target = 200
		emit pair_run 1
	end


Exercice 2

# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)

onevent prox
	when prox.horizontal[2] >= 2000 do
		motor.left.target = 200
		motor.right.target = 200
		emit pair_run 0
	end

	when prox.horizontal[0] >= 2000 do
		motor.left.target = -200
		motor.right.target = 200
		emit pair_run 1
	end

	when prox.horizontal[4] >= 2000 do
		motor.left.target = 200
		motor.right.target = 400
		emit pair_run 2
	end


Exercice 3

# variables for state
var state[4] = [0,0,0,0]
var new_state[4] = [0,0,0,0]

# stop timer 0
timer.period[0] = 0
# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)

# subroutine to display the current state
sub display_state
	call leds.circle(0,state[1]*32,0,state[3]*32,0,state[2]*32,0,state[0]*32)

onevent prox
	when prox.horizontal[2] >= 2000 do
		motor.left.target = 200
		motor.right.target = 200
		emit pair_run 0
	end

	when prox.horizontal[2] <= 1000 do
		new_state[0] = 1
		motor.left.target = -200
		motor.right.target = 200
		timer.period[0] = 1000
		emit pair_run 1
	end

	call math.copy(state, new_state)
	callsub display_state


onevent timer0
	timer.period[0] = 0
	if state[0] == 1 then
		new_state[0] = 0
		motor.left.target = 200
		motor.right.target = -200
		timer.period[0] = 1000
		emit pair_run 2
	end

	if state[0] == 0 then
		new_state[0] = 1
		motor.left.target = -200
		motor.right.target = 200
		timer.period[0] = 1000
		emit pair_run 3
	end

	call math.copy(state, new_state)
	callsub display_state

Clone this wiki locally