Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Seguimiento de caminos con evasión de obstáculos en Simulink

Utilice Simulink ® para evitar obstáculos mientras sigue la ruta de un robot con accionamiento diferencial. Este ejemplo utiliza ROS para enviar y recibir información de un simulador basado en MATLAB. Puede reemplazar el simulador con otros simuladores basados ​​en ROS como Gazebo®.

Prerrequisitos: Connect to ROS-enabled Robot from Simulink (ROS Toolbox)

Introducción

Este ejemplo utiliza un modelo que implementa un controlador de seguimiento de ruta con evitación de obstáculos. El controlador recibe la pose del robot y los datos del escaneo láser del robot simulado y envía comandos de velocidad para conducir el robot por una trayectoria determinada. Puede ajustar los parámetros mientras el modelo se está ejecutando y observar el efecto en el robot simulado.

Iniciar un simulador de robot

Inicie un simulador simple basado en MATLAB:

  • Escriba rosinit (ROS Toolbox) en la línea de comandos MATLAB®. Esto crea un maestro ROS local con dirección de red (URI) de http://localhost:11311.

  • Escriba ExampleHelperSimulinkRobotROS('ObstacleAvoidance') para iniciar el Simulador de robot. Esto abre una ventana de figura:

Este simulador basado en MATLAB es un simulador basado en ROS para un robot de accionamiento diferencial. El simulador recibe y envía mensajes sobre los siguientes temas:

  • Recibe comandos de velocidad, como mensajes de tipo geometry_msgs/Twist, en el tema /mobile_base/commands/velocity

  • Envía información de la postura del robot sobre la ground-truth , como mensajes de tipo nav_msgs/Odometry, al tema /ground_truth_pose

  • Envía datos de alcance láser, como mensajes de tipo sensor_msgs/LaserScan, al tema /scan

Reemplazo del simulador basado en MATLAB con Gazebo:

También puedes utilizar el simulador Gazebo con un TurtleBot® simulado. Consulte Get Started with Gazebo and Simulated TurtleBot (ROS Toolbox) para obtener instrucciones sobre cómo configurar el entorno Gazebo. Consulte Connect to ROS-enabled Robot from Simulink (ROS Toolbox) para obtener instrucciones sobre cómo configurar la conexión de red con Gazebo. Después de iniciar la máquina virtual, inicie el mundo Gazebo Office usando el acceso directo del escritorio. El Turtlebot simulado en el simulador Gazebo, recibe comandos de velocidad, como mensajes de tipo geometry_msgs/Twist, en el tema /cmd_vel. También necesitas un algoritmo de localización para obtener la posición del robot en el Gazebo. Consulte Localice TurtleBot utilizando el algoritmo de localización Monte Carlo para obtener instrucciones sobre cómo encontrar la ubicación del robot en el entorno de Gazebo.

Abrir modelo existente

Este modelo implementa el algoritmo de seguimiento de ruta con evasión de obstáculos. El modelo se divide en cuatro subsistemas. Las siguientes secciones explican cada subsistema.

open_system('pathFollowingWithObstacleAvoidanceExample');

Entradas del proceso

El subsistema 'Entradas' procesa todas las entradas del algoritmo.

Hay dos suscriptores para recibir datos del simulador. El primer suscriptor recibe los mensajes enviados en el tema /scan. Luego, el mensaje de escaneo láser se procesa para extraer rangos y ángulos de escaneo. El segundo suscriptor recibe los mensajes enviados en el tema /ground_truth_pose. Luego, la ubicación (x,y) y la orientación de guiñada del robot se extraen del mensaje de pose.

La ruta se especifica como un conjunto de puntos de referencia. Este ejemplo utiliza una entrada constante de 3x2. Puede especificar cualquier número de puntos de referencia como un arreglo Nx2. Para cambiar el tamaño de la ruta en tiempo de ejecución, puede utilizar una señal de tamaño variable o una señal de tamaño fijo con relleno NaN. Este ejemplo utiliza una entrada de tamaño fijo con relleno NaN para los puntos de referencia que son desconocidos.

open_system('pathFollowingWithObstacleAvoidanceExample/Inputs','tab');

Calcular velocidad y rumbo para seguir la trayectoria

El subsistema 'Calcular velocidad y rumbo para seguir la trayectoria' calcula los comandos de velocidad lineal y angular y la dirección de movimiento del objetivo utilizando el bloque Pure Pursuit. El bloque Pure Pursuit se encuentra en la subbiblioteca Algoritmos de robots móviles dentro de la pestaña Robotics System Toolbox en el Navegador de bibliotecas. Alternativamente, puede escribir robotalgslib en la línea de comando para abrir la subbiblioteca Mobile Robot Algorithms.

También debes detener el robot una vez que alcance un punto objetivo. En este ejemplo, el objetivo es el último punto de referencia de la ruta. Este subsistema también compara la pose actual del robot y el punto objetivo para determinar si el robot está cerca de la meta.

open_system('pathFollowingWithObstacleAvoidanceExample/Compute Velocity and Heading for Path following','tab');

Ajustar la velocidad para evitar obstáculos

El subsistema 'Ajustar velocidades para evitar obstáculos' calcula ajustes a las velocidades lineales y angulares calculadas por el seguidor de trayectoria.

El bloque Histograma de campo vectorial utiliza las lecturas del alcance del láser para verificar si la dirección del objetivo calculada usando el bloque Pure Pursuit está libre de obstáculos o no según los datos del escaneo láser. Si hay obstáculos a lo largo de la dirección del objetivo, el bloque Histograma de campo vectorial calcula la dirección de dirección más cercana a la dirección del objetivo y libre de obstáculos. El bloque Vector Field Histogram también se encuentra en la subbiblioteca Mobile Robot Algorithms.

La dirección de dirección es el valor NaN cuando no hay direcciones libres de obstáculos en el campo de visión del sensor. En este caso, se requiere un movimiento de recuperación, en el que el robot gira sobre el terreno hasta que esté disponible una dirección libre de obstáculos.

Basado en la dirección de la dirección, este subsistema calcula ajustes en velocidades lineales y angulares.

open_system('pathFollowingWithObstacleAvoidanceExample/Adjust Velocities to Avoid Obstacles','tab');

Enviar comandos de velocidad

El subsistema 'Salidas' publica las velocidades lineales y angulares para impulsar el robot simulado. Agrega las velocidades calculadas utilizando el algoritmo de seguimiento de ruta Pure Pursuit con los ajustes calculados utilizando el algoritmo de evitación de obstáculos del histograma de campo vectorial. Las velocidades finales se establecen en el mensaje geometry_msgs/Twist y se publican en el tema /mobile_base/commands/velocity.

Este es un subsistema habilitado que se activa cuando se recibe un nuevo mensaje láser. Esto significa que un comando de velocidad se publica solo cuando hay nueva información del sensor disponible. Esto evita que el robot golpee los obstáculos en caso de retraso en la recepción de la información del sensor.

open_system('pathFollowingWithObstacleAvoidanceExample/Outputs','tab');

Nota: Para utilizar el simulador Gazebo, seleccione el tema /cmd_vel en el bloque Publish.

Configurar y ejecutar el modelo

Configure y ejecute su modelo y observe el movimiento del robot en el simulador.

  • Establezca la hora de parada de la simulación en Inf.

  • Haga clic en el botón Reproducir para iniciar la simulación. Observe que el robot comienza a moverse en la simulación.

  • Mientras se ejecuta la simulación, abra el subsistema 'Calcular velocidad y rumbo para seguir la ruta' y haga doble clic en el bloque Pure Pursuit. Cambie el parámetro de velocidad lineal deseado a 0.5. Observe el aumento en la velocidad del robot.

  • La ruta predeterminada [2 2; 8 8] pasa por un obstáculo. Observe que el robot se desvía alrededor del obstáculo para llegar al punto final de la ruta.

  • Abra el subsistema 'Entradas' y haga doble clic en el bloque Entrada de puntos de referencia. Cambie el valor constante de [2 2;8 8;NaN NaN] a [2 2; 8 8; 12 5]. Observe que el robot continúa siguiendo el nuevo camino y llega al nuevo punto objetivo (12,5) mientras evita los obstáculos.

  • Para detener la simulación, haga clic en el botón Detener.

Consulte también