User Guide
1. // SECOND MAIN LOOP BODY
2. follow_segment();
3. // Drive straight while slowing down, as before.
4. set_motors(50,50)
5. delay_ms(50);
;
n
a longitud de lo recordado se incrementa en 1. Si tu laberinto, por ejemplo
onsecuencias será un ‘RLRLRLRL’ en la LCD. No hay atajo
ión por una ruta más rápida, sólo la estrategia de la mano
ando encontramos un
BL.
)
= 90;
as a number between 0 and 360 degrees.
;
ith a single one.
)
6. set_motors(40,40);
7. delay_ms(200);
8. // Make a turn according to the instruction stored i
9. // path[i].
10. turn(path[i]);
8.e Simplificando la solución
Después de cada giro l
tiene largos zigzags sin salida las c
que te lleve a través de esta secc
izquierda en la pared.
Sin embargo, cuando nos encontramos con un callejón sin salida, podemos simplificar el
camino. Considera la posibilidad de la secuencia “LBL”, donde “B” significa “volver” y las
medidas adoptadas cu
callejón sin salida. Esto es lo que sucede si
existe un giro a izquierda en una vía recta que
conduce de inmediato a un callejón sin salida.
Después de girar 90 ° a izquierda, 180º a
derecha, y 90 ° de nuevo a izquierda, el
efecto es que el robot se dirige en la dirección
original de nuevo. La ruta puede ser
simplificada con giro de 0 °: un único ‘S’.
Otro ejemplo es la intersección en T con un
callejón sin salida a izquierda: ‘LBS’. El giro
90° a derecha. La secuencia puede repetirse ree
será 90° izquierda, 180°, y 0°, para un total de
mplazándola con un simple ‘R’.
del tipo ‘xBx’, podemos reemplazar los tres giros En efecto, siempre que tengamos la secuencia
con un giro que sea el Angulo total (90+180+90=360), eliminando el giro U y acelerando la
solución. El código será:
1. // Path simplification. The strategy is that whenever we encounter a
2. // sequence xBx, we can simplify it by cutting out the dead end. For
3. // example, LBL -> S, because a single S bypasses the dead end
4. // represented by L
5. void simplify_path(
6. {
7. // only simplify the path if the second-to-last turn was a ‘B’
8. if(path_length < 3 || path[path_length-2] != ‘B’)
9. return;
; 10. int total_angle = 0
nt i; 11. i
12. for(i=1;i<=3;i++)
13. {
h[path_length-i]) 14. switch(pat
15. {
‘R’: 16. case
17. total_angle +
break; 18.
19. case ‘L’:
total_angle += 270; 20.
21. break;
22. case ‘B’:
le += 180; 23. total_ang
24. break;
25. }
26. }
27. // Get the angle
28. total_angle = total_angle % 360
those turns w29. // Replace all of
switch(total_angle30.
31. {










