Paso 4: Planificación de los movimientos del Robot
Aunque el robot tiene sólo dos motores, es capaz de realizar una serie de movimientos complejos. Para mantener este Instructable tan simple como sea posible, he decidido definir solamente cerca de tres docenas de movimientos uniformes básicos y unos movimientos complejos formados por la combinación de los movimientos básicos.
Como se puede ver en las fotos en el paso 2, yo no uso sensores de rotación de las ruedas, sensores de ultrasonido o cualquier otro tipo de sensor para medir la distancia de los objetos o la distancia viajada. Esto evita que el robot ejecute movimientos de alta precisión. Sin embargo, controlar solamente la dirección y la velocidad de los motores puede alcanzar un nivel de precisión suficiente para moverse el robot.
Lo primero que necesita saber para poder calcular el tiempo de ejecución necesario para cada movimiento es la velocidad media del robot. Para hacer eso, coloque una cinta métrica paralela al robot y activar ambos motores simultáneamente por uno o dos segundos, mida la distancia viajada y deducir la velocidad. En mi configuración tengo 13,7 centímetros por segundo empleando 62,5% de la velocidad máxima del motor (250/400, véase Pololu Arduino biblioteca). En otras palabras, para mover el robot de 1 metro (100 cm) por delante, los motores tuvieron que activarse simultáneamente para 7.299270... segundos. He decidido mantener el tiempo de conteo en la resolución de milisegundos, pero si quiere lograr una mayor precisión de movimiento, la posibilidad de elevar la resolución de microsegundos. Cuento largo, para mover el robot de 1 metro, tengo que activar ambos motores simultáneamente para 7299 milisegundos. De este número, todo se convierte en regla de tres para otras distancias. Para realizar el arco o movimientos circulares, una rueda debe moverse más rápido que el otro. Para activar el robot a los lados, solamente una rueda debe ser activado o ambos en direcciones opuestas (girar sobre su propio eje). Aquí deberás utilizar algunos trigonometría para calcular la distancia recorrida por cada rueda y por cuánto tiempo se debe activar en cada motor. Un buen punto de partida para estos conceptos puede encontrarse en los siguientes enlaces (no pretendo ir más allá en este aquí): http://rossum.sourceforge.net/papers/CalculationsForRobotics/CirclePath.htm y http://math.stackexchange.com/questions/60176/move-two-wheeled-robot-from-one-point-to-another.
Como se puede ver el final del video de arriba, también hago el robot "dibujar" algunas formas geométricas básicas (cuadrado, triángulo y círculo) en el piso. Estos movimientos se logran mediante la combinación de movimientos básicos (avanzar, girar, ir hacia adelante, girar, etc..). La combinación de estos movimientos se hace en el servidor de BitVoicer Esquema de voz y no los verás en el sketch de Arduino presentado en el siguiente paso.