Realizar cosimulación entre Simulink y Gazebo
Este ejemplo muestra cómo configurar una simulación sincronizada entre Simulink™ y Gazebo para enviar comandos y recibir datos de Gazebo.
Configurar el entorno de simulación Gazebo
Para este ejemplo, use su propio entorno Linux con Gazebo o descargue el equipo virtual (VM) proporcionado con ROS y Gazebo. En el equipo virtual (VM), el complemento de Gazebo necesario se encuentra en /home/user/src/GazeboPlugin.
Para obtener más información sobre el equipo virtual (VM) Linux y los requisitos para configurar su propio entorno Linux con Gazebo, consulte Requisitos y limitaciones del entorno de simulación Gazebo.
En la configuración del equipo virtual, desactive Accelerate 3D graphics. En la configuración de VM, VM > Settings > Hardware > Display (VM > Configuración> Hardware > Visualización), desactive Accelerate 3D graphics (Acelerar gráficos 3D).
Si usa su propio entorno Linux, siga los pasos para Instalar el complemento de Gazebo de forma manual. De lo contrario, vaya a Iniciar el entorno de simulación Gazebo.
Instalar el complemento de Gazebo de forma manual
Obtenga el código fuente del complemento como un paquete zip. Esta función crea una carpeta denominada GazeboPlugin
en el directorio de trabajo actual y la comprime en el archivo GazeboPlugin.zip
.
packageGazeboPlugin
Copie el archivo GazeboPlugin.zip
en su equipo Linux que cumpla con el siguiente requisito:
Descomprima el paquete en su plataforma Linux; para este ejemplo lo descomprimimos en /home/user/src/GazeboPlugin
.
Ejecute estos comandos en el terminal para compilar el complemento.
cd /home/user/src/GazeboPlugin
Si la carpeta build
ya existe, elimínela.
rm -r build
Instale el complemento.
mkdir build cd build cmake .. make
La ubicación del complemento es /home/user/src/GazeboPlugin/export/lib/libGazeboCoSimPlugin.so
.
Elimine el complemento generado del equipo host.
if exist('GazeboPlugin', 'dir') rmdir('GazeboPlugin', 's'); end if exist('GazeboPlugin.zip', 'file') delete('GazeboPlugin.zip'); end
Iniciar el entorno de simulación Gazebo
Abra un terminal en el VM o en su propio sistema operativo Linux y ejecute los siguientes comandos para iniciar el simulador Gazebo.
cd /home/user/src/GazeboPlugin/export export SVGA_VGPU10=0 gazebo ../world/multiSensorPluginTest.world --verbose
Estos comandos inician un simulador Gazebo con:
Dos telémetros láser:
hokuyo0
yhokuyo1
Dos cámaras RGB:
camera0
ycamera1
Dos cámaras de profundidad:
depth_camera0
ydepth_camera1
Dos sensores IMU:
imu0
yimu1
Modelo de caja unitaria:
unit_box
El multiSensorPluginTest.world
se encuentra en la carpeta /home/user/src/GazeboPlugin/world
. Este archivo del mundo incluye el complemento de Gazebo para la cosimulación con Simulink usando 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 de Gazebo compilado. Esta ruta puede ser relativa a la ubicación en la que se inicia Gazebo o puede añadirla a la ruta de búsqueda del complemento de Gazebo ejecutando:
export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:/home/user/src/GazeboPlugin/export
Configurar cosimulación con Gazebo
Abra el modelo performCoSimulationWithGazebo
, que demuestra cómo recibir datos de sensores de estos sensores simulados y cómo activar el modelo de caja unitaria de Simulink.
open_system("performCoSimulationWithGazebo")
Antes de simular el modelo, configure la cosimulación con Gazebo usando el bloque Gazebo Pacer (Pacer de Gazebo):
hilite_system('performCoSimulationWithGazebo/Gazebo Pacer')
Abra el bloque y haga clic en el enlace Configure Gazebo network and simulation settings (Configurar la red de Gazebo y las opciones de simulación).
open_system('performCoSimulationWithGazebo/Gazebo Pacer')
En el menú desplegable Network Address (Dirección de red), seleccione Custom
. Introduzca la dirección IP de su equipo Linux. El Puerto predeterminado para Gazebo es el 14581
. Configure Response timeout (Tiempo de respuesta) en 10 segundos.
Haga clic en el botón Test (Probar) para probar la conexión con el simulador Gazebo en ejecución.
Obtener datos de sensores
Use el bloque Gazebo Read (Lectura de Gazebo) para obtener datos sobre temas específicos de tres sensores:
IMU,
/gazebo/default/imu0/link/imu/imu
Escaneo de LiDAR,
/gazebo/default/hokuyo0/link/laser/scan
Cámara RGB,
/gazebo/default/camera0/link/camera/image
Muestre las lecturas del IMU y visualice el escaneo de LiDAR y la imagen RGB usando los bloques de funciones de MATLAB®.
Accionar modelo de Gazebo
Use el bloque Gazebo Apply Command (Aplicar comando de Gazebo) para aplicar una fuerza constante en la dirección z de la caja unitaria que produce una aceleración de 1 . Cree un mensaje ApplyLinkWrench
en blanco usando Gazebo Blank Message (Mensaje en blanco de Gazebo). Especifique elementos del mensaje para aplicar la fuerza a la entidad unit_box/link
usando el bloque Bus Assignment (Asignación de bus). Use Gazebo Read (Lectura de Gazebo) para generar la pose de validación ground-truth en el suelo de la caja. El desplazamiento de la caja durante un período de 1 segundo debe ser cercano a 0,5 metros.
Realizar cosimulación
Para iniciar la cosimulación, haga clic en Run (Ejecutar). También puede avanzar la simulación usando Step Forward (Avanzar). Step Back (Retroceder) no se admite durante la cosimulación.
Mientras se ejecuta la simulación, observe que el simulador Gazebo y la hora de Simulink están sincronizados.
Este modelo visualiza los datos del sensor de Gazebo usando el bloque de función de MATLAB y las funcionalidades de representación gráfica de MATLAB. Esta es una instantánea de los datos de imagen obtenidos de la cámara de Gazebo:
Esta es una instantánea de la imagen del escaneo de LiDAR:
El diagrama de tiempo de la posición del bloque de la caja unitaria en la dirección z se puede visualizar usando Data Inspector. El bloque sigue una forma parabólica debido a la aceleración constante en el tiempo.
La posición de la caja unitaria al final de la simulación es 1,001, lo que genera 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 de Gazebo. Reduzca el tamaño de paso máximo en el motor de física de Gazebo para reducir este error.
Sincronización de tiempo
Durante la cosimulación, puede pausar Simulink y el simulador Gazebo en cualquier momento usando Pause (Pausa)
Nota: Gazebo se detiene una unidad de tiempo antes de la simulación.
Esto se debe a la siguiente secuencia de tiempo de cosimulación:
Los datos del sensor y los comandos de accionamiento se intercambian en la unidad de tiempo correcta. La ejecución elige primero el paso de Gazebo y luego Simulink. La ejecución de la simulación todavía está en t+1, Simulink solo permanece en el tiempo del paso anterior hasta que reanude el modelo.