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

Prueba de autonomía robot en simulación

Este ejemplo explora el control de MATLAB® del simulador de® de gazebo.

Cuando se utilizan simuladores de robot, es importante probar algoritmos autónomos y alterar dinámicamente el entorno en el mundo mientras se ejecuta la simulación. Este ejemplo muestra cómo crear la autonomía básica del robot con gazebo y cómo interactuar con él. En este ejemplo el robot es la plataforma TurtleBot®. Para ver ejemplos concretos relacionados con el TurtleBot, consulte el ejemplo.Comuníquese con el TurtleBot

En este ejemplo, se utiliza a para controlar los aspectos autónomos del movimiento TurtleBot.timer Los temporizadores permiten que los procesos se ejecuten en segundo plano en intervalos de ejecución regulares sin bloquear la línea de comandos de MATLAB®. Aunque puede utilizar bucles y otros métodos para examinar la autonomía básica, la ejecución programada y la naturaleza no bloqueante de los temporizadores los convierten en la mejor opción para lograr un comportamiento autónomo.

Requisitos previos:Empiece con gazebo y un TurtleBot simuladoLeer propiedades de modelo y simulación de GazeboAgregar, compilar y quitar objetos en gazeboAplicar fuerzas y torques en gazebo

Conéctese a gazebo

En la máquina Linux®, inicie gazebo. Si está utilizando la máquina virtual, utilice el mundo gazebo vacío.Empiece con gazebo y un TurtleBot simulado

Inicializar ROS reemplazando la dirección IP de ejemplo (192.168.1.1) por la dirección IP de la máquina virtual. Cree una instancia de la clase.ExampleHelperGazeboCommunicator

ipaddress = '192.168.203.129'; rosinit(ipaddress)
Initializing global node /matlab_global_node_57640 with NodeURI http://192.168.203.1:64500/ 
gazebo = ExampleHelperGazeboCommunicator;

Construye un muro en el mundo.

 wall = ExampleHelperGazeboModel('grey_wall','gazeboDB');  spawnModel(gazebo,wall,[-2 4 0]);

Todas las unidades en gazebo se especifican utilizando la Convención SI.

Cree un objeto para la base móvil y cambie su estado de orientación.ExampleHelperGazeboSpawnedModel Gire manualmente el TurtleBot por 90 grados (pi/2 radianes) para que se enfrente directamente a la pared.

 kobuki = ExampleHelperGazeboSpawnedModel('mobile_base',gazebo);  setState(kobuki,'orientation',[0 0 pi/2]);

Inicie la evitación de obstáculos de TurtleBot

En esta sección se describe una forma sencilla de crear un comportamiento autónomo en un TurtleBot en gazebo. Utilice un comportamiento de evasión de obstáculos básico para el TurtleBot. El comportamiento es conducir hacia adelante y girar cuando el robot se acerca a un obstáculo detectado por el escáner láser.

Cree variables globales para el publicador y el mensaje del publicador para que el algoritmo de control pueda acceder a ellos.

 global robot  global velmsg

Cree el editor para la velocidad y el mensaje ROS para llevar la información.

 robot = rospublisher('/mobile_base/commands/velocity');  velmsg = rosmessage(robot);

Suscríbase al tema de escaneo láser.

 timerHandles.sub = rossubscriber('/scan');

Crear un temporizador para controlar el bucle de control principal de la TurtleBot.

 t = timer('TimerFcn',{@exampleHelperGazeboAvoidanceTimer,timerHandles},'Period',0.1,'ExecutionMode','fixedSpacing');

En la función de devolución de llamada para el temporizador, define la función de devolución de llamada de escaneo láser y ejecuta un algoritmo básico para permitir que el TurtleBot Evite golpear objetos a medida que se mueve.exampleHelperGazeboAvoidanceTimer El archivo se encuentra en el directorio + gazebo.

Inicie el temporizador.

start(t);

Añadir objetos

El TurtleBot conduce hacia la pared. Una vez que se pone muy cerca de la pared, debe girar a la izquierda para evitar correr en él.

Si el TurtleBot se bloquea en la pared, el escaneo láser probablemente no se está publicando a través de gazebo.Note: Reinicia tu sesión de gazebo y vuelve a intentarlo.

Todavía puede hacer cambios en el mundo mientras el TurtleBot se está moviendo. Añade una nueva pared al mundo. Si lo agregas pronto, puede bloquear el TurtleBot para que Evite golpear la pared.

 spawnModel(gazebo,wall,[-5.85 0.15 0],[0, 0, pi/2]);    pause(20);     % TurtleBot avoids walls for 20 seconds

Quite modelos y apague

Detenga el temporizador para detener el algoritmo del robot.

stop(t)

Encuentra todos los objetos del mundo y elimina los añadidos manualmente

list = getSpawnedModels(gazebo)
list = 4×1 cell array
    {'ground_plane'}
    {'mobile_base' }
    {'grey_wall'   }
    {'grey_wall_0' }

Quite los dos muros, utilizando los siguientes comandos:

removeModel(gazebo,'grey_wall'); removeModel(gazebo,'grey_wall_0');

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_57640 with NodeURI http://192.168.203.1:64500/ 

Cuando haya terminado, cierre la ventana de Gazebo en la máquina virtual