Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Realizar co-simulación entre Simulink y Gazebo

Este ejemplo muestra cómo configurar la simulación sincronizada entre Simulink y Gazebo, cómo recibir datos de Gazebo y enviar comandos a Gazebo.

Configurar el entorno de simulación de Gazebo

Para este ejemplo, utilice su propio entorno Linux con Gazebo o descargue Máquina virtual con ROS 2 Melodic y Gazebo. En la máquina virtual (VM), el complemento Gazebo requerido se encuentra en/home/user/src/GazeboPlugin.

Los requisitos de software (incluidos en la máquina virtual) son:

Ubuntu Xenial Xerus o Ubuntu Bionic BeaverSistema operativo:

cmake 2.8, gazebo9, y libgazebo9-devDependencia del software:

Si utiliza su propio entorno Linux, siga los pasos descritos en .Instalar Gazebo Plugin manualmente

Instalar Gazebo Plugin manualmente

Obtenga el código fuente del plugin como un paquete zip. Esta función crea una carpeta llamada en el directorio de trabajo actual y la comprime como .GazeboPluginGazeboPlugin.zip

packageGazeboPlugin

Copie el equipo Linux que cumpla los siguientes requisitos:GazeboPlugin.zip

Descomprima el paquete en su plataforma Linux, para este ejemplo desempaquetamos en ./home/user/src/GazeboPlugin

Ejecute los siguientes comandos en el terminal para compilar el complemento en ./home/user/src/GazeboPlugin/export/lib/libGazeboCoSimPlugin.so

cd /home/user/src/GazeboPlugin mkdir build cd build cmake .. make 

Elimine el complemento generado del equipo host.

if exist('GazeboPlugin', 'dir')     rmdir('GazeboPlugin', 's'); end  if exist('GazeboPlugin.zip', 'file')     delete('GazeboPlugin.zip'); end

Inicie el entorno de simulación de Gazebo

Abra un terminal en la máquina virtual o en su propio sistema operativo Linux, ejecute los siguientes comandos para iniciar el simulador de Gazebo.

cd /home/user/src/GazeboPlugin/export export SVGA_VGPU10=0 gazebo ../world/multiSensorPluginTest.world --verbose 

Estos comandos lanzan un simulador Gazebo con:

  • Dos buscadores de rango láser: yhokuyo0hokuyo1

  • Dos cámaras RGB: ycamera0camera1

  • Dos cámaras de profundidad: ydepth_camera0 depth_camera1

  • Dos sensores IMU: yimu0imu1

  • Modelo de caja de unidades:unit_box

El se encuentra en la carpeta.multiSensorPluginTest.world/home/user/src/GazeboPlugin/world Este archivo de mundo incluye el plugin Gazebo para la co-simulación con Simulink utilizando las siguientes líneas en su . Cuerpo:xml

<plugin name="GazeboPlugin" filename="lib/libGazeboCoSimPlugin.so"><portNumber>14581</portNumber></plugin> 

El campo de nombre de archivo debe apuntar a la ubicación del complemento Gazebo compilado. Esta ruta puede ser relativa a la ubicación en la que se inicia Gazebo, o podría agregarla a la ruta de búsqueda del plugin Gazebo ejecutando:

export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/user/src/GazeboPlugin/export 

Configurar la co-simulación de Gazebo

Abra el modelo, que muestra cómo recibir datos del sensor de estos sensores simulados y cómo accionar el modelo de caja de unidades de Simulink.performCoSimulationWithGazebo

open_system("performCoSimulationWithGazebo")

Antes de simular el modelo, configure Gazebo Co-Simulation utilizando el bloque:Gazebo Pacer

hilite_system('performCoSimulationWithGazebo/Gazebo Pacer')

Abra el bloque y haga clic en el vínculo.Configurar la red de Gazebo y los ajustes de simulación

open_system('performCoSimulationWithGazebo/Gazebo Pacer')

En el menú desplegable, seleccione .Dirección de redCustom Introduzca la dirección IP de su máquina Linux. El valor predeterminado para Gazebo es .Puerto14581 Establézalo en 10 segundos.Tiempo de espera de respuesta

Haga clic en el botón para probar la conexión con el simulador Gazebo en ejecución.Prueba

Obtener datos del sensor

Utilice el bloque para obtener datos sobre temas específicos de tres sensores:Gazebo Read

  • Imu/gazebo/default/imu0/link/imu/imu

  • Lidar Scan,/gazebo/default/hokuyo0/link/laser/scan

  • Cámara RGB,/gazebo/default/camera0/link/camera/image

Visualice las lecturas de IMU y visualice el Lidar Scan y la imagen RGB utilizando los bloques de funciones MATLAB®.

Modelo Actuate Gazebo

Utilice el bloque para aplicar una fuerza constante en la dirección -al cuadro de unidad que da como resultado una aceleración de 1Gazebo Apply Commandz

<math display="block">
<mrow>
<mi>m</mi>
<mo>/</mo>
<msup>
<mrow>
<mi>s</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
. Cree un mensaje en blanco utilizando .ApplyLinkWrenchGazebo Blank Message Especifique los elementos del mensaje para aplicar la fuerza a la entidad mediante el bloque.unit_box/linkBus Assignment Se utiliza para generar la pose de la verdad del suelo de la caja.Gazebo Read El desplazamiento de la caja durante un período de 1 segundo debe ser cercano a 0,5 metros.

Realizar co-simulación

Para iniciar la cosimulación, haga clic en .Ejecutar También puede realizar la simulación utilizando . no se admite durante la co-simulación.Paso adelantePaso atrás

Mientras se ejecuta la simulación, observe que el simulador de Gazebo y la hora de Simulink están sincronizados.

Este modelo visualiza los datos del sensor Gazebo mediante el bloque de funciones MATLAB y las funcionalidades de trazado de MATLAB. Aquí está una instantánea de los datos de imagen obtenidos de la cámara Gazebo:

Aquí está una instantánea de la imagen del escaneo LIDAR:

La gráfica de tiempo de la posición del bloque de caja de unidad es en -direction se puede ver utilizando .zInspector de datos El bloque realiza un seguimiento de una forma parabólica debido a la aceleración constante en el tiempo.

La posición del cuadro de unidad al final de la simulación es 1.001, lo que conduce a un desplazamiento de 0.5001, que es ligeramente diferente del valor esperado de 0.5. Esto se debe al error del motor de física Gazebo. Haga que el tamaño máximo del paso en el motor de física Gazebo sea más pequeño para reducir este error.

Sincronización horaria

Durante la co-simulación, puede pausar Simulink y el Simulador Gazebo en cualquier momento usandoPausa

Gazebo pausa un paso por delante de la simulación.Nota:

Esto se debe a la siguiente secuencia de tiempo de co-simulación:

Los datos del sensor y los comandos de accionamiento se intercambian en el paso de tiempo correcto. La ejecución elige el paso Gazebo primero, luego Simulink. La ejecución de la simulación todavía está en el , Simulink sólo permanece en el tiempo de paso anterior hasta que se reanuda el modelo.t+1

Próximos pasos