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

Leer propiedades de modelo y simulación de Gazebo

Este ejemplo muestra cómo interactuar con el simulador de® de Gazebo de MATLAB®. Se muestra cómo pausar la simulación gazebo, leer las propiedades de la física, y recuperar información sobre los objetos en el mundo gazebo.

Requisitos previos:Empiece con gazebo y un TurtleBot simulado

Conéctese a un gazebo World

Abra un mundo gazebo desde el escritorio en su máquina virtual o máquina Linux®. Si está utilizando la máquina virtual de Ubuntu®, utilice gazebo Empty o gazebo Playground.Empiece con gazebo y un TurtleBot simulado

En la instancia de MATLAB en el equipo host, ejecute los siguientes comandos, reemplazando con la dirección IP de la máquina virtual.ipaddress Este comando inicializa ROS y conecta su instancia de MATLAB con el maestro ROS en la dirección IP especificada.

ipaddress = '192.168.203.129'; % Replace with your IP rosinit(ipaddress)
Initializing global node /matlab_global_node_41902 with NodeURI http://192.168.203.1:56855/ 

Si la red que está utilizando para conectarse a la simulación no es su red predeterminada, puede especificar manualmente su dirección IP.Note: La sintaxis es la siguiente. Reemplace IP_OF_VM con la dirección IP de la simulación y IP_OF_HOST_COMPUTER con la dirección IP del host.

rosinit('IP_OF_VM','NodeHost','IP_OF_HOST_COMPUTER'); 

Muestra todos los temas de ROS disponibles en la red de ROS.

rostopic list
/camera/depth/camera_info                                    /camera/depth/image_raw                                      /camera/depth/points                                         /camera/parameter_descriptions                               /camera/parameter_updates                                    /camera/rgb/camera_info                                      /camera/rgb/image_raw                                        /camera/rgb/image_raw/compressed                             /camera/rgb/image_raw/compressed/parameter_descriptions      /camera/rgb/image_raw/compressed/parameter_updates           /camera/rgb/image_raw/compressedDepth                        /camera/rgb/image_raw/compressedDepth/parameter_descriptions /camera/rgb/image_raw/compressedDepth/parameter_updates      /camera/rgb/image_raw/theora                                 /camera/rgb/image_raw/theora/parameter_descriptions          /camera/rgb/image_raw/theora/parameter_updates               /clock                                                       /cmd_vel_mux/active                                          /cmd_vel_mux/input/navi                                      /cmd_vel_mux/input/safety_controller                         /cmd_vel_mux/input/teleop                                    /cmd_vel_mux/parameter_descriptions                          /cmd_vel_mux/parameter_updates                               /depthimage_to_laserscan/parameter_descriptions              /depthimage_to_laserscan/parameter_updates                   /gazebo/link_states                                          /gazebo/model_states                                         /gazebo/parameter_descriptions                               /gazebo/parameter_updates                                    /gazebo/set_link_state                                       /gazebo/set_model_state                                      /joint_states                                                /laserscan_nodelet_manager/bond                              /mobile_base/commands/motor_power                            /mobile_base/commands/reset_odometry                         /mobile_base/commands/velocity                               /mobile_base/events/bumper                                   /mobile_base/events/cliff                                    /mobile_base/sensors/bumper_pointcloud                       /mobile_base/sensors/core                                    /mobile_base/sensors/imu_data                                /mobile_base_nodelet_manager/bond                            /odom                                                        /rosout                                                      /rosout_agg                                                  /scan                                                        /tf                                                          /tf_static                                                   

Si no se muestra la lista de temas, la red no se ha configurado correctamente. Para ver los pasos de configuración de red, consulte.Empiece con gazebo y un TurtleBot simulado

Establecer una conexión con el mundo gazebo a través de la clase, lo que hace que la interacción con gazebo sea más fácilExampleHelperGazeboCommunicator

gazebo = ExampleHelperGazeboCommunicator;

Leer propiedades físicas del motor gazebo

Utilizando el objeto, extraiga las propiedades físicas de la simulación.ExampleHelperGazeboCommunicator

phys = readPhysics(gazebo)
phys = struct with fields:
                      Gravity: [0 0 -9.8000]
                   UpdateRate: 100
                     TimeStep: 0.0100
             SimulationStatus: 0
                DisableBodies: 0
    PreconditioningIterations: 0
              InnerIterations: 50
                   Relaxation: 1.3000
            ErrorToleranceRMS: 0
                 ContactWidth: 1.0000e-03
        MaxCorrectingVelocity: 100
          ConstantForceMixing: 0
      ErrorReductionParameter: 0.2000
                  MaxContacts: 20

Gazebo utiliza unidades del SI.

Para explorar, cambie la gravedad de la simulación para que vaya en la dirección opuesta en z. Reduzca el valor, también. Restablezca la simulación para que la física afecte a todos los objetos.

phys.Gravity = [0 0 0.1];       % Units are m/s^2 setPhysics(gazebo,phys); resetSim(gazebo);  pause(5);                        % Let gravity take effect for 5 seconds

Pausar, anular pausa y reiniciar la simulación

Usted ve el TurtleBot® (y cualquier otra cosa en el mundo) acelerando lentamente hacia arriba y lejos del suelo. PAUSE la simulación utilizando el.ExampleHelperGazeboCommunicator

pauseSim(gazebo); pause(3);

Cuando se pausa, la escena puede verse como esta figura:

Reanude la simulación. Comprueba que los objetos empiecen a moverse de nuevo.

resumeSim(gazebo); pause(3);

El TurtleBot flota de nuevo

La función no restablece la física a los valores originales.resetSim Restablecer manualmente la física utilizando.setPhysics

Ejecute Simulation a 1/8 Speed

Esta sección describe cómo ejecutar el simulador de Gazebo en cámara lenta. El uso de cámara lenta puede ser muy útil para un examen cuidadoso de interacciones y comportamientos físicos bruscos o a corto plazo.

Ejecute la simulación a una velocidad reducida cambiando la velocidad de actualización de la física. Se puede ver cómo se ve funcionando a 1/8 velocidad.

pauseSim(gazebo); phys = readPhysics(gazebo); phys.UpdateRate = phys.UpdateRate/8; setPhysics(gazebo,phys);

Vuelva a establecer la gravedad en el valor normal.

phys.Gravity = [0 0 -9.8];   % Set gravity back to normal value (m/s^2) setPhysics(gazebo,phys); resumeSim(gazebo); pause(5);

Cuando reanude la simulación, el TurtleBot vuelve a caer al suelo, pero a cámara lenta.

Cambie la velocidad de actualización a normal para que la simulación se ejecute en tiempo real.

phys.UpdateRate = phys.UpdateRate*8;   % Set update rate back to normal value setPhysics(gazebo,phys); pause(3);

Restablezca la simulación.

resetSim(gazebo);

Obtener lista de modelos en gazebo mundo

La clase le permite encontrar todos los modelos en el mundo.ExampleHelperGazeboCommunicator

models = getSpawnedModels(gazebo)
models = 2×1 cell array
    {'ground_plane'}
    {'mobile_base' }

Obtener vínculos de un modelo

Recupere información específica sobre un modelo (el Kobuki® TurtleBot® en este caso) creando un objeto para él con la clase.ExampleHelperGazeboSpawnedModel

kobuki = ExampleHelperGazeboSpawnedModel('mobile_base',gazebo)
kobuki =    ExampleHelperGazeboSpawnedModel with properties:        Name: 'mobile_base'      Links: {3×1 cell}     Joints: {2×1 cell}  
[kobukiLinks, kobukiJoints] = getComponents(kobuki)
kobukiLinks = 3×1 cell array
    {'base_footprint'  }
    {'wheel_left_link' }
    {'wheel_right_link'}

kobukiJoints = 2×1 cell array
    {'wheel_left_joint' }
    {'wheel_right_joint'}

Leer propiedades de un modelo-pose y orientación

Utilizando el objeto para el TurtleBot, obtener la posición, la orientación y la velocidad mediante el uso de la función.ExampleHelperGazeboSpawnedModelgetState

[position, orientation, velocity] = getState(kobuki)
position = 1×3

   -0.0005    0.0001   -0.0011

orientation = 1×3

   -0.2551   -0.4581    0.0049

velocity = struct with fields:
     Linear: [0.0011 6.9205e-05 -1.3551e-05]
    Angular: [8.9766e-04 1.6358e-04 0.0025]

Obtener lista de todos los modelos de Gazebo online modelo base de datos

Utilice la función para obtener todos los modelos de Gazebo disponibles para su descarga desde el sitio web de gazebo.exampleHelperGazeboListModels

builtInModels = exampleHelperGazeboListModels;

Apagado

Borre el espacio de trabajo de los editores, suscriptores y otros objetos relacionados con ROS cuando haya terminado con ellos.

clear

Utilice una vez que haya terminado de trabajar con la red de ROS.rosshutdown Apague el nodo global y desconéctese de gazebo.

rosshutdown
Shutting down global node /matlab_global_node_41902 with NodeURI http://192.168.203.1:56855/ 

Próximos pasos