Main Content

Controlar el robot con tracción diferencial en Gazebo con Simulink

En este ejemplo se muestra cómo controlar un robot con tracción diferencial en la cosimulación con Gazebo mediante Simulink. El robot sigue un conjunto de waypoints mediante la lectura de la pose y las posiciones del codificador de rueda, y genera comandos de control del par motor para dirigirlo.

Ejecutar el VM

Siga las instrucciones de Realizar cosimulación entre Simulink y Gazebo para descargar el equipo virtual (VM) con Gazebo.

Mundo Gazebo

En este ejemplo se utiliza un mundo facilitado en el VM, differentialDriveRobot.world, como un plano terrestre sencillo con la configuración de física predeterminada. El mundo utiliza un robot Pioneer sin los controladores predeterminados, de modo que los controladores incorporados no compitan con los par motores que proporciona Simulink. El robot Pioneer está disponible en las instalaciones predeterminadas de Gazebo. El complemento de Gazebo hace referencia al complemento necesario para la conexión con Simulink, como se detalla en Realizar cosimulación entre Simulink y Gazebo.

Haga doble clic en el icono Gazebo Differential Drive Robot (Robot con tracción diferencial Gazebo).

Como alternativa, ejecute estos comandos en el terminal:

cd /home/user/src/GazeboPlugin/export 
export SVGA_VGPU10=0 
gazebo ../world/differentialDriveRobot.world

Si el simulador de Gazebo no se abre, es posible que tenga que volver a instalar el complemento. Consulte Instalar el complemento de Gazebo de forma manual en Realizar cosimulación entre Simulink y Gazebo.

Visión general del modelo

Abra el modelo:

open_system('GazeboDifferentialDriveControl') 

El modelo tiene cuatro secciones:

  • Gazebo Pacer (Pacer de Gazebo)

  • Read Sensor Data (Leer los datos de los sensores)

  • Control Mobile Robot (Controlar el robot móvil)

  • Send Actuation Data to Gazebo (Enviar datos de accionamiento a Gazebo)

Gazebo Pacer (Pacer de Gazebo)

En esta sección se establece la conexión con Gazebo. Haga doble clic en el bloque Gazebo Pacer (Pacer de Gazebo) para abrir sus parámetros y, a continuación, haga clic en el enlace Configure Gazebo network and simulation settings (Configurar la red de Gazebo y las opciones de simulación). Se abrirá un cuadro de diálogo.

Especifique la dirección IP del VM. De forma predeterminada, Gazebo se conecta al puerto 14581. Haga clic en el botón Test (Probar) para verificar la conexión con Gazebo.

Si la prueba no es satisfactoria, asegúrese de comprobar las instrucciones de Realizar cosimulación entre Simulink y Gazebo, y constatar que Gazebo esté bien configurado y el mundo asociado esté en funcionamiento.

Salidas de los sensores de Gazebo

Las salidas de los sensores leen los datos de los sensores de Gazebo y los pasan a los bloques de Simulink correspondientes. Una gráfica XY representa la posición actual del robot y los datos de pose se guardan en la salida de la simulación.

El subsistema Read Gazebo Sensors (Leer sensores de Gazebo) extrae los datos de los sensores de poses y ruedas del robot. Los datos de pose son las coordenadas xy y un cuaternión de cuatro elementos para la orientación. Las velocidades de las ruedas se calculan según la tasa de cambio de las posiciones de las ruedas al girar.

Mobile Robot Control (Control del robot móvil)

La sección Mobile Robot Control acepta un conjunto de waypoints de destino, la pose actual y las velocidades actuales de las ruedas, y emite los par motores de las ruedas necesarios para que el robot siga una trayectoria que persiga los waypoints.

Existen tres componentes principales.

El bloque Pure Pursuit es un controlador que especifica la velocidad del vehículo y la velocidad angular de la dirección del vehículo necesarias para seguir los waypoints a una velocidad fija, dada la pose actual.

El bloque de función de MATLAB Set Wheel Speed (Definir velocidades de las ruedas) convierte la velocidad del vehículo y la velocidad angular de la dirección en las velocidades de la rueda izquierda y derecha mediante la cinemática de un robot de tracción diferencial:

ϕ˙L=1r(v-𝜔d2)

ϕ˙R=1r(v+𝜔d2)

ϕ˙L y ϕ˙R son las velocidades de la rueda izquierda y derecha, v es la velocidad del vehículo, 𝜔 es la velocidad angular de la dirección, d es el ancho de vía y r es el radio de la rueda. Además, esta función de MATLAB® incluye código para acelerar la velocidad de las ruedas. Debido a que el bloque Pure Pursuit utiliza una velocidad fija en todo momento, dentro del bloque de función de MATLAB, hay dos instrucciones if. La primera reduce la velocidad a un ritmo proporcional a la distancia a la meta cuando el robot se encuentra dentro de un determinado umbral de distancia. La segunda instrucción if detiene el robot cuando se encuentra dentro de un umbral reducido. Esto ayuda a que el robot se detenga lentamente.

Por último, el subsistema Pioneer Wheel Control (Control de ruedas Pioneer) convierte las velocidades deseadas de las ruedas en par motores mediante un controlador proporcional.

Comandos de par motor del actuador

La última sección del modelo toma los comandos de par motor producidos por el controlador y los envía a Simulink mediante bloques de la biblioteca de cosimulación de Gazebo.

Dentro de cada uno de los subsistemas de este bloque, se utiliza un bloque Bus Assignment (Asignación de bus) para asignar el par motor de la articulación a la articulación correcta.

Por ejemplo, dentro del subsistema Left Wheel Gazebo Torque Command (Comando de par motor de Gazebo de la rueda izquierda) que se muestra arriba, se utiliza un mensaje en blanco de Gazebo con el tipo de comando ApplyJointTorque para especificar el tipo de bus. El modelo y el nombre de la articulación los proporciona el bloque Gazebo Select Entity (Seleccionar entidad de Gazebo), que está vinculado a la articulación asociada a la rueda izquierda en el mundo Gazebo, left_wheel_hinge. El par motor se aplica durante todo el tiempo del paso, 0,01 segundos, especificado en nanosegundos, ya que estas entradas deben proporcionarse como números enteros. La salida del bus se pasa a un bloque Gazebo Apply Command (Aplicar comando de Gazebo).

Simular el robot

Para ejecutar el modelo, inicialice los waypoints y establezca el tiempo de muestreo:

waypoints = [0 0; 4 2; 3 7; -3 6];
sampleTime = 0.01;

Haga clic en el botón Play o utilice el comando sim para ejecutar el modelo. Durante la ejecución, el robot debe moverse en Gazebo, y una gráfica XY actualiza la pose observada en Simulink.

Las figuras representan el conjunto de waypoints y la trayectoria final ejecutada del robot.