Main Content

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 ruta evitando obstáculos en Simulink®

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

Requisitos previos: Connect to a 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 comando de MATLAB . Esto crea un ROS master local con la dirección de red (URI) de http://localhost:11311.

  • Escriba ExampleHelperSimulinkRobotROS('ObstacleAvoidance') para iniciar Robot Simulator. 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, sobre el tema /mobile_base/commands/velocity

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

  • Envía datos del alcance del 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 a 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, sobre 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 Gazebo.

Abrir modelo existente

Este model implementa el seguimiento de la ruta con un algoritmo para evitar 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 mensajes enviados sobre el tema /scan . Luego, el mensaje de escaneo láser se procesa para extraer rangos y ángulos de escaneo. El segundo suscriptor recibe mensajes enviados sobre el tema /ground_truth_pose . La ubicación (x,y) y la orientación de Yaw 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 usar una señal de tamaño variable o usar una señal de tamaño fijo con relleno NaN . Este ejemplo utiliza una entrada de tamaño fijo con NaN relleno para los waypoints que son desconocidos.

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

Calcular la velocidad y el rumbo para seguir la ruta

El subsistema 'Calcular velocidad y rumbo para seguir la ruta' 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 Explorador de bibliotecas. Alternativamente, puede escribir robotalgslib en la línea de comandos para abrir la subbiblioteca Algoritmos de robots móviles.

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 velocidades 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 Histograma de campo vectorial también se encuentra en la subbiblioteca Algoritmos de robot móvil.

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 usar el simulador Gazebo, seleccione el tema /cmd_vel en el bloque Publicar.

Configurar y ejecutar el modelo

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

  • Establezca el tiempo 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 Waypoints. 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 la ruta nueva y alcanza el nuevo punto objetivo (12,5) mientras evita obstáculos.

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

Consulte también