Simplificando La Solución - Pololu 3pi Guía De Usuario

Tabla de contenido
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);
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
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.
2.
// sequence xBx, we can simplify it by cutting out the dead end.
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
11.
i
nt i;
12.
for(i=1;i<=3;i++)
13.
{
14.
switch(pat
15.
{
16.
case
17.
total_angle +
18.
break;
19.
case 'L':
20.
total_angle += 270;
21.
break;
22.
case 'B':
23.
total_ang
24.
break;
25.
}
26.
}
27.
// Get the angle
28.
total_angle = total_angle % 360
29.
// Replace all of
30.
switch(total_angle
31.
{
;
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
The strategy is that whenever we encounter a
BL.
)
;
h[path_length-i])
'R':
= 90;
le += 180;
as a number between 0 and 360 degrees.
those turns w
)
n
será 90° izquierda, 180°, y 0°, para un total de
mplazándola con un simple 'R'.
del tipo 'xBx', podemos reemplazar los tres giros
;
ith a single one.
For
Tabla de contenido
loading

Tabla de contenido