Paso 1: Un poco más en profundidad...
El problema físico que B-ROBOT resuelve se llama el péndulo invertido. Este es el mecanismo mismo que necesita equilibrar un paraguas encima de la mano. El punto de giro está en el centro de masa del objeto. Más información en péndulo invertido aquí. La solución matemática del problema no es fácil pero no tenemos que entender para solucionar nuestro problema de equilibrio robot´s. Lo que necesitamos saber es cómo debe hacer para restablecer el equilibrio de robot´s por lo que podemos implementar un algoritmo de Control para resolver el problema.
Un Sistema de Control es muy útil en robótica (Automatización Industrial). Básicamente it´s un código que recibe información de sensores y comandos de destino como entradas y crea, en consecuencia, señales de salida a los actuadores del Robot (los motores en nuestro ejemplo) con el fin de regular el sistema. Estamos utilizando un Pcontrolador de ID (proporcional + Integral y derivado). Este tipo de control tiene 3 constantes para ajustar kP, kD y kI. De Wikipedia: "un controlador PID calcula un valor de 'error' como la diferencia entre una medida [entrada] y un valor de consigna deseado. El controlador intenta minimizar el error por ajuste de [salida]." Así, dicen el PID qué medir (la "entrada") , donde quiera medida que (la "consigna",) y la variable que desea ajustar para hacer que suceda (la "salida".)
El PID ajusta entonces la salida tratando de hacer a la entrada igual el punto de referencia. Para referencia, un tanque de agua que queremos llenar a un nivel, la entrada de Setpointy salida sería el nivel según el sensor de nivel de agua, el nivel de agua deseado y el agua que se bombea en el tanque. kP es la parte proporcional y es la parte principal del control, esta parte es proporcional al error. kD es la parte de derivado y se aplica al derivado del error. Esta parte depende de la dinámica del sistema (depende de la robot, motores de ´s peso, inercias...). La última de ellas, kI se aplica a la integral del error y se utiliza para reducir los errores constantes, es como un ajuste en el resultado final (creo que en los botones de ajuste de un volante de coche de RC que el coche vaya totalmente recto, kI elimina el desplazamiento entre el objetivo requerido y el valor real).
En B-ROBOT el comando dirección del usuario se agrega a la salida de los motores (un motor con un signo positivo y el otro con signo negativo). Por ejemplo si el usuario envía el comando dirección 6 para girar a la derecha (de -10 a 10) tenemos que añadir 6 a la izquierda de motor valor y restar 6 del motor derecho. Si el robot no se mueve hacia adelante o hacia atrás, el resultado del comando dirección es un giro del robot