Estoy trabajando con un vehículo acuático que usa cuatro motores para moverse. Se colocan en la esquina y son fijos. De ahí que los movimientos se obtengan cambiando la velocidad de cada uno.
El vehículo puede moverse a lo largo de tres ejes: Y (adelante, atrás), X (izquierda, derecha), Z (guiñada, CW y CCW). Recibo el setpoint para cada uno, ejemplo:
Esto significa que el vehículo debe avanzar al 50 % de la velocidad máxima permitida y, al mismo tiempo, debe girar en sentido antihorario al 20 %.
Mi código asigna a cada motor un valor basado en el valor anterior, utilizando el principio de superposición. Ejemplo:
Funciona, pero para mejorar el comportamiento debemos tener en cuenta que el empuje que ejerce el motor no es lineal. Y si gira al revés la curva es diferente.
Ya midí e interpolé las curvas y terminé con dos funciones que describen el comportamiento: f(x)_fwd y f(x)_bck.
Debido a que el empuje depende tanto de la velocidad como de la dirección, no entiendo cómo compensar eso. Quiero decir, no puedo simplemente poner el valor de velocidad final en la variable 'x' porque este valor es la suma de diferentes contribuciones (ejes x, y, z) y cada uno requiere una compensación diferente.
Tampoco puedo aplicar esta corrección al principio, antes de sumar cada contribución porque aún no sé la velocidad final y la dirección del motor, por lo que no puedo saber qué ecuación usar.
Un pensamiento es el siguiente:
No es óptimo porque terminará con diferentes velocidades (debido a la corrección) que cambiarán nuevamente el punto de trabajo e incluso la ecuación (es decir, si un motor inicialmente se configuró en -5%, después de la corrección se puede cambiar a + 5%!).
¿Cuál es el enfoque correcto en tal caso? Estoy seguro de que es un problema muy común, pero no sé las palabras exactas que se deben usar para buscar literatura al respecto.
Agrego algunos detalles para mejorar la pregunta. Primero, el vehículo es como una pequeña plataforma (1 x 2 metros) con cuatro motores en cada esquina. Los motores se colocan a 45° grados de esta manera:
Donde la flecha indica el empuje que se ejerce cuando se aplica un voltaje positivo al motor.
Necesito proporcionar movimientos manuales básicos (adelante/atrás, traducir izquierda/derecha, girar CW/CCW) solamente .
Mirando la imagen de arriba, está claro que tengo que controlar cada motor de una manera diferente para obtener el movimiento deseado. Por ejemplo, para avanzar, cada motor debe configurarse con el mismo valor X. Para rotar los motores CW, 1 y 2 (abajo a la izquierda y arriba a la izquierda) deben ser negativos, mientras que 3 y 4 (arriba a la derecha y abajo a la derecha) deben ser positivos.
El problema es que el empuje ejercido por el motor no es lineal con el voltaje de control y cuando se invierte el empuje es mucho menor. Por lo tanto, si quiero girar y aplicar el mismo voltaje ±X a cada uno, no girará sobre su centro, porque los que giran al revés proporcionan mucho menos empuje.
Una primera corrección es controlar las que giran hacia adelante con un 30% menos que las que giran negativamente. Esto mejora mucho la rotación pero no es preciso porque la relación entre empuje positivo y negativo depende del voltaje de control.
Con la ecuación que encontré, ahora puedo establecer con precisión cada voltaje de control teniendo en cuenta el empuje real, pero el principal problema es dónde colocar esta ecuación .
Como decía en la pregunta original, si pongo esta ecuación en el valor final de cada motor no funcionará, porque es la suma de todos los movimientos. Ejemplo: si tengo solo un movimiento de rotación, dos motores girarán hacia adelante y dos hacia atrás. Pero si al mismo tiempo el vehículo debe avanzar, todos los motores girarán hacia adelante, pero unos más que otros (para proporcionar también la rotación).
Por lo tanto, los valores finales de la tensión de control ya no tienen la información sobre cuáles fueron los comandos de los ejes, mientras que el comando de los ejes aún no tiene los valores finales de la tensión de control (para decidir qué ecuación usar: positiva o negativa).
No es una respuesta, más bien un comentario largo:
Esta pregunta está más relacionada con las matemáticas, por lo que debería buscar en algún foro de matemáticas. Suponga que tiene tres motores, entonces debe medir la velocidad precisa para diferentes configuraciones. Ahora obtendrá N ecuaciones con N coeficientes para calcular. Esto se hace por varios métodos. Etiquetas: Eliminación de Gauss, Determinante de Jacobi, Derivadas parciales,... El sistema puede seguir siendo un sistema lineal: más medidas, más puntos de interpolación, más precisión.
Puede tomar, por ejemplo, algunas técnicas de calibración para magnetómetro MEMS, acelerómetro.
Sin embargo, sería la mejor opción para determinar el patrón exacto de medidas, que tendría en cuenta la valiosa información del sistema.
Dado que las RPM frente al voltaje son solo lineales sin carga [kV/RPM]. El efecto de la carga es reducir las RPM en un 20 % si se adapta bien a la tarea. Habrá un voltaje de arranque que puede ser del 15 al 30 % estimado, dependiendo del umbral de fricción estática. El % de reducción de RPM con la carga de agua puede aumentar con las RPM según el diseño de la hélice en comparación con el funcionamiento en seco.
La mejor manera es probar el motor y el impulsor en el agua y medir las RPM, el voltaje, la corriente y el empuje del vehículo [N]. Usaría esta tabla de valores o obtendría una ecuación para usar para la potencia de entrada [W] frente a la fuerza de empuje o PWM. Voltaje vs RPM.
Luego puede acumular los amperios-hora consumidos o los vatios-hora pueden restarse de la capacidad de la batería para el indicador de combustible. La capacidad de la batería debe reducirse para una tasa de consumo inferior a la calificación de 20 h.
Tony Estuardo EE75
Tony Estuardo EE75
Marca