Modelar y validar un sistema
Modele cada componente dentro de la estructura del sistema para representar el comportamiento físico y funcional del componente. Verifique el comportamiento básico del componente simulándolo con datos de prueba.
Abrir la estructura del sistema
Una visión general de toda la estructura del sistema resulta útil cuando se modelan componentes individuales. Empiece cargando el modelo de la estructura. En la línea de comandos de MATLAB®, introduzca:
open_system('system_layout.slx')
Modelar los componentes
Un modelo de Simulink® de un componente se basa en varios puntos de partida:
Una relación matemática explícita entre la salida y la entrada de un componente físico: puede calcular las salidas del componente a partir de las entradas, directa o indirectamente, utilizando cálculos algebraicos e integrando ecuaciones diferenciales. Por ejemplo, el cálculo del nivel de agua en un depósito a partir de la tasa de entrada es una relación explícita. Cada bloque de Simulink se ejecuta basándose en la definición de los cálculos de las entradas a las salidas.
Una relación matemática implícita entre las variables del modelo de un componente físico: puesto que las variables son interdependientes, asignar una entrada y una salida al componente no se realiza de forma directa. Por ejemplo, el voltaje en el extremo
+
de un motor conectado en un circuito y el voltaje en el extremo-
tienen una relación implícita. Para modelar una relación de este tipo en Simulink, puede utilizar herramientas de modelado físico como Simscape™ o modelar estas variables como parte de un componente más grande que permita la definición de entrada/salida. En ocasiones, una inspección más detallada de los objetivos de modelado y las definiciones de los componentes ayuda a definir las relaciones de entrada/salida.Datos obtenidos de un sistema real: ha medido los datos de entrada/salida a partir del componente real, pero no existe una relación matemática totalmente definida. Muchos dispositivos cuentan con componentes no modelados que encajan en esta descripción. Por ejemplo, el calor que disipa una televisión. Puede utilizar System Identification Toolbox™ para definir la relación de entrada/salida para sistemas de este tipo.
Una definición funcional explícita: defina las salidas de un componente funcional a partir de las entradas utilizando cálculos algebraicos y lógicos. Por ejemplo, la lógica de conmutación de un termostato. Puede modelar la mayoría de las relaciones funcionales como bloques y subsistemas de Simulink.
Este tutorial modela componentes físicos y funcionales con relaciones explícitas de entrada/salida. En este tutorial:
Utilizará las ecuaciones del sistema para crear un modelo de Simulink.
Añadirá y conectará bloques de Simulink en el editor de Simulink. Los bloques representan coeficientes y variables a partir de ecuaciones.
Construirá el modelo para cada componente de forma independiente. La forma más efectiva de construir un modelo de sistema es considerar primero los componentes de forma independiente.
Empezará construyendo modelos simples utilizando aproximaciones del sistema. Identificará supuestos que puedan afectar a la precisión de su modelo. Añadirá detalles iterativamente hasta que el nivel de complejidad cumpla los requisitos de modelado y precisión.
Modelar los componentes físicos
Describa las relaciones entre componentes, por ejemplo, datos, energía y transferencia de fuerza. Utilice las ecuaciones del sistema para construir un modelo gráfico del sistema en Simulink.
Estas son algunas cuestiones que deberá considerar antes de empezar a modelar un componente:
¿Cuáles son las constantes para cada componente? ¿Qué valores no cambian a menos que los cambie?
¿Cuáles son las variables para cada componente? ¿Qué valores cambian con el tiempo?
¿Cuántas variables de estado tiene un componente?
Derive las ecuaciones para cada componente utilizando principios científicos. Muchas ecuaciones de sistema encajan en tres categorías:
En el caso de sistemas continuos, las ecuaciones diferenciales describen la tasa de cambio para variables con las ecuaciones definidas para todos los valores de tiempo. Por ejemplo, una ecuación diferencial de primer orden proporciona la velocidad de un automóvil:
En el caso de sistemas discretos, las ecuaciones de diferencias describen la tasa de cambio para variables, pero las ecuaciones se definen solo en momentos específicos. Por ejemplo, la señal de control de un controlador proporcional-derivativo discreto:
Las ecuaciones sin derivadas son ecuaciones algebraicas. Por ejemplo, una ecuación algebraica proporciona la corriente total en un circuito paralelo con dos componentes:
Ruedas y movimiento lineal. En una rueda actúan dos fuerzas:
Fuerza aplicada por el motor: la fuerza F actúa en la dirección del cambio de velocidad y es una entrada en los subsistemas de la rueda.
Fuerza de resistencia: la fuerza Fdrag actúa contra la dirección del cambio de velocidad y es una función de velocidad.
La aceleración es proporcional a la suma de estas fuerzas:
Donde kdrag es el coeficiente de resistencia y m es la masa del robot. Cada rueda soporta la mitad de esta masa.
Construya el modelo de la rueda:
En el modelo
system_layout
, haga doble clic en el subsistema denominadoRight Wheel
para mostrar el subsistema vacío.Para modelar la velocidad y la aceleración, añada un bloque Integrator. Deje la condición inicial establecida en
0
. La entrada de este bloque es la aceleración Vdot y la salida es la velocidad V.Para modelar la fuerza de resistencia, añada un bloque MATLAB Function de la biblioteca User-Defined Functions. El bloque MATLAB Function proporciona una forma rápida de implementar expresiones matemáticas en un modelo. Para editar la función, haga doble clic en el bloque para abrir MATLAB Function Block Editor.
En MATLAB Function Block Editor, introduzca el código de MATLAB® para calcular la fuerza de resistencia.
function Fdrag=get_fdrag(V,k_drag) Fdrag=k_drag*V*abs(V);
Defina argumentos para el bloque MATLAB Function. En MATLAB Function Block Editor, haga clic en Edit Data . Haga clic en k_drag, establezca Scope en Parameter y haga clic en Apply.
Reste la fuerza de resistencia a la fuerza del motor utilizando el bloque Subtract. Complete la ecuación de fuerza-aceleración utilizando un bloque Gain con el parámetro Gain especificado como
1/(m/2)
.Para invertir la dirección del bloque MATLAB Function, seleccione el bloque. Luego, en la barra de herramientas de Simulink, en la pestaña Format, haga clic en Flip left-right . Conecte los bloques.
La dinámica de ambas ruedas es la misma. Haga una copia del subsistema denominado
Right Wheel
que acaba de crear y péguela en el subsistema denominadoLeft Wheel
.Para ver el nivel superior del modelo, haga clic en Navigate Up To Parent .
Movimiento rotativo. Cuando las dos ruedas giran en direcciones opuestas, se mueven en un círculo de radio r, provocando el movimiento rotativo del robot. Cuando las ruedas giran en la misma dirección, no hay rotación. Si se asume que las velocidades de las ruedas son siempre iguales en magnitud, puede modelar el movimiento rotativo de forma que dependa de la diferencia de las dos velocidades de las ruedas VR y VL:
Construya el modelo de dinámica rotativa:
En el nivel superior del modelo
system_layout
, haga doble clic en el subsistema denominadoRotation
para mostrar el subsistema vacío. Elimine la conexión entre los bloques Inport y Outport.Para modelar la velocidad angular y la posición, añada un bloque Integrator. Deje la condición inicial establecida en
0
. La salida de este bloque es la posición de rotación theta y la entrada es la velocidad angular theta_dot.Calcule la velocidad angular a partir de la velocidad tangencial. Añada un bloque Gain y establezca el parámetro Gain del bloque en
1/(2*r)
.Conecte los bloques.
Para ver el nivel superior del modelo, haga clic en Navigate Up To Parent .
Modelar los componentes funcionales
Describa la función desde la entrada de una función a la salida. Esta descripción puede incluir ecuaciones algebraicas y construcciones lógicas, que puede utilizar para construir un modelo gráfico del sistema en Simulink.
Transformación de coordenadas. La velocidad del robot en las coordenadas x e y, VX y VY, está relacionada con la velocidad lineal VN y el ángulo theta:
Construya el modelo de transformación de coordenadas:
En el nivel superior del modelo
system_layout
, haga doble clic en el subsistema denominadoCoordinate Transform
para mostrar el subsistema vacío.Para modelar funciones trigonométricas, añada un bloque SinCos de la biblioteca Math Operations.
Para modelar multiplicaciones, añada dos bloques Product de la biblioteca Math Operations.
Conecte los bloques.
Para ver el nivel superior del modelo, haga clic en Navigate Up To Parent .
Establecer los parámetros de un modelo
Puede determinar valores adecuados para los parámetros del modelo utilizando varias fuentes, incluidas las siguientes:
Especificaciones escritas, como tablas de propiedades estándar, o fichas técnicas del fabricante
Mediciones directas en un sistema existente
Estimaciones utilizando la entrada/salida del sistema
Este modelo utiliza los siguientes parámetros:
Parámetro | Símbolo | Valor |
---|---|---|
Masa | m | 2.5 kg |
Resistencia a la rodadura | k_drag | 30 Ns2/m |
Radio del robot | r | 0.15 m |
Un modelo de Simulink puede acceder a los valores de parámetro definidos utilizando variables en el área de trabajo de MATLAB. Defina estas variables introduciendo los comandos en la ventana de comandos de MATLAB.
m = 2.5; k_drag = 30; r = 0.15;
Validar componentes utilizando la simulación
Valide componentes proporcionando una entrada y observando la salida. Incluso una validación tan simple como esta puede mostrar formas inmediatas de mejorar el modelo. Este ejemplo valida estos comportamientos:
Cuando se aplica una fuerza de forma continua a una rueda, la velocidad aumenta hasta que se alcanza una velocidad de estado estacionario.
Cuando las ruedas giran en direcciones opuestas, el ángulo de rotación aumenta a un ritmo constante.
Validar un componente de rueda
Cree y ejecute un modelo de prueba para el componente de rueda:
Cree un nuevo modelo. En la pestaña Simulation, haga clic en New . Copie el bloque Subsystem denominado
Right Wheel
en el nuevo modelo.Para crear una entrada de prueba, añada un bloque Step desde la biblioteca Sources y conéctelo a la entrada del subsistema denominado
Right Wheel
. Deje el parámetro Step time establecido en1
.Añada un visor scope a la salida. Haga clic con el botón secundario en el puerto de salida del bloque del subsistema denominado
Right Wheel
y seleccione Create & Connect Viewer > Simulink > Scope.Simule el modelo. En la pestaña Simulation, haga clic en Run .
Los resultados de la simulación muestran que el modelo presenta el comportamiento general esperado. No se produce ningún movimiento hasta que se aplica fuerza en la unidad de tiempo. Cuando se aplica fuerza, la velocidad empieza a aumentar y se estabiliza en una constante cuando la fuerza aplicada y la fuerza de resistencia alcanzan un equilibrio. Además de la validación, la simulación también muestra la velocidad máxima de la rueda para la fuerza proporcionada.
Validar el componente de rotación
Cree y ejecute un modelo de prueba para el componente de rotación:
Para crear un nuevo modelo, haga clic en New . Copie el bloque del subsistema denominado
Rotation
en el nuevo modelo.Para crear una entrada de prueba en el nuevo modelo, añada un bloque Step de la biblioteca Sources. Deje el parámetro Step time establecido en
1
. Conecte la salida del bloque Step a la entrada del subsistema denominadoRotation
. Esta entrada representa la diferencia entre las velocidades de las ruedas cuando rotan en direcciones opuestas.Añada un visor scope a la salida del subsistema denominado
Rotation
. Haga clic con el botón secundario en el puerto de salida del subsistema y seleccione Create & Connect Viewer > Simulink > Scope.Simule el modelo. En la pestaña Simulation, haga clic en Run .
Esta simulación muestra que el ángulo aumenta de forma constante cuando las ruedas giran con la misma velocidad en direcciones opuestas. Mejore el modelo para facilitar la interpretación de la salida del ángulo. Por ejemplo, puede:
Convertir las unidades de señal de salida de radianes a grados añadiendo un bloque Gain con una ganancia de
180/pi
.Mostrar el valor de salida en ciclos de 360 grados añadiendo un bloque Math Function con la función
mod
.
Las funciones trigonométricas de MATLAB utilizan entradas en radianes.
Validar el modelo
Después de validar componentes individuales, puede realizar una validación similar del modelo completo. Este ejemplo valida estos comportamientos:
Cuando se aplica la misma fuerza a ambas ruedas y en la misma dirección, el robot se mueve en una línea.
Cuando se aplica la misma fuerza a ambas ruedas en direcciones opuestas, el robot rota en su lugar.
En el modelo
system_layout
, haga doble clic en el subsistema denominadoInputs
para mostrar el subsistema vacío.Cree una entrada de prueba añadiendo un bloque Step. Deje el parámetro Step time establecido en
1
. Conecte la salida del bloque Step con ambos bloques Outport.En el nivel superior del modelo, conecte ambas señales de salida al mismo visor scope.
Simule el modelo.
La línea amarilla en el visor scope es la dirección X y la línea azul es la dirección Y. Puesto que el ángulo es cero y no cambia, el vehículo se mueve solo en la dirección X, tal y como se esperaba.
Haga doble clic en el subsistema denominado
Inputs
. Para invertir la dirección de la rueda izquierda, añada un bloque Gain entre la fuente y la segunda salida y establezca el parámetro Gain en-1
.Añada un visor scope a la salida del ángulo.
Simule el modelo.
El visor scope conectado a las señales de velocidad x e y muestra que no se produce ningún movimiento en el plano X-Y.
El visor scope conectado a la señal del ángulo muestra un movimiento angular constante.
Puede utilizar este modelo final para responder a muchas preguntas sobre el modelo cambiando la entrada.
¿Qué ocurre cuando el ángulo inicial no es cero?
¿Cuánto tiempo tarda el movimiento en detenerse cuando la fuerza desciende hasta cero?
¿Qué ocurre cuando el robot es más pesado?
¿Qué ocurre cuando el robot se mueve sobre una superficie más lisa con un coeficiente de resistencia inferior?