Ahora toca hablar del algoritmo antichoques implementado.
Con el objetivo final de la implementación de un algoritmo capaz de evitar las colisiones entre los dos robots, se realizaron diversos ajustes en el código que lo permitieran. Entre ellos, destaca un uso mucho mayor del bluetooth, pues ahora no envía “novedades“, sino que envía información sobre cada punto por el que pasa, de manera que el otro robot tenga la información más actualizada posible sobre la posición de su compañero. Esto hizo que tuviéramos que hacer pruebas más intensivas de los algoritmos de comunicación y del protocolo utilizado, resultando efectivos en todos ellos.
Por ello, tras cada recepción de mensaje, se guarda en variables globales la posición del otro enemigo, y con ella es con la que se comenzó a trabajar en el algoritmo antichoques.
El algoritmo antichoques basa su funcionamiento en una función matemática que calcula las distancias entre el punto siguiente al que se va a mover el robot, y la posición del compañero. Si esta distancia es menor de dos puntos (queriendo esto decir que el robot está próximo a [1] o sobre el [0] robot), impedimos que pueda realizar ese movimiento y, por el contrario, tratará de alcanzar un punto distinto.
Este algoritmo, aunque comprobamos que es efectivo y funciona de manera satisfactoria, podría dar lugar a algunos problemas, como puede ser un mucho mayor tiempo de recorrido, pues hace necesario desviarse del camino deseado para poder esquivar al compañero. Sin embargo, tras debatir sobre los distintos algoritmos posibles, se llegó a la conclusión de que, probablemente, este fuera el más efectivo posible, teniendo en cuenta lo bien que podía ajustarse al código actual y su poca repercusión en él.
Se tuvieron en consideración otras ideas, como fue que el robot enviara la posición destino antes de moverse, y así el compañero poder predecir cuándo podrían chocarse. El problema de esta idea, es que se dependía en exceso de una más que cuestionable velocidad de transmisión del mensaje, de manera que pudiera darse que el mensaje llegara una vez hubiéramos empezado el movimiento. En el algoritmo implementado, en cambio, no dependes tanto del destino al que se mueve el otro robot sino de su posición actual, además de disponer siempre del colchón que supone hacer los cálculos sobre el punto siguiente al que te vas a mover, y no sobre tu posición actual.