Main Content

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

Planificar ruta para un robot de accionamiento diferencial en Simulink

En este ejemplo se muestra cómo ejecutar una ruta libre de obstáculos entre dos ubicaciones de un mapa determinado en Simulink®. La ruta de acceso se genera mediante un algoritmo de planificación de hoja de ruta probabilística (PRM) ( .mobileRobotPRM) Los comandos de control para navegar por esta ruta se generan mediante el bloque de controlador.Pure Pursuit Un modelo de movimiento cinemático de accionamiento diferencial simula el movimiento del robot basado en esos comandos.

Cargar el mapa y el modelo Simulink

Cargue el mapa de ocupación, que define los límites y obstáculos del mapa dentro del mapa. contienen varios mapas, incluidos , que este ejemplo utiliza.exampleMaps.matsimpleMap

load exampleMaps.mat

Especifique un locaiton inicial y final dentro del mapa.

startLoc = [5 5]; goalLoc = [20 20];

Descripción general del modelo

Abra el modelo Simulink.

open_system('pathPlanningSimulinkModel.slx')

El modelo se compone de tres partes principales:

  • Planificación

  • Control

  • Modelo de planta

Planificación

El bloque de funciones MATLAB® utiliza el planificador de rutas y toma una ubicación de inicio, una ubicación de objetivo y un mapa como entradas.PlannermobileRobotPRM Los bloques emiten una matriz de wapoints que el robot sigue. Los waypoints planificados son utilizados aguas abajo por el bloque del controlador.Pure Pursuit

Control

Pure Pursuit

El bloque del controlador genera los comandos de velocidad lineal y velocidad angular basados en los waypoints y la pose actual del robot.Pure Pursuit

Compruebe si se ha alcanzado el objetivo

El subsistema calcula la distancia actual al objetivo y, si está dentro de un umbral, la simulación se detiene.Check Distance to Goal

Modelo de planta

El bloque crea un modelo de vehículo para simular la cinemática simplificada del vehículo.Differential Drive Kinematic Model El bloque toma velocidades lineales y angulares como entradas de comando del bloque del controlador y genera los estados de posición y velocidad actuales.Pure Pursuit

Ejecutar el modelo

simulation = sim('pathPlanningSimulinkModel.slx');

Visualizar el movimiento del robot

Después de simular el modelo, visualice el robot conduciendo el camino libre de obstáculos en el mapa.

map = binaryOccupancyMap(simpleMap); robotPose = simulation.Pose; thetaIdx = 3;  % Translation xyz = robotPose; xyz(:, thetaIdx) = 0;  % Rotation in XYZ euler angles theta = robotPose(:,thetaIdx); thetaEuler = zeros(size(robotPose, 1), 3 * size(theta, 2)); thetaEuler(:, end) = theta;  for k = 1:10:size(xyz, 1) % Plot the Robot's poses at every 10th step     show(map)     hold on;          % Plot Start Location     plotTransforms([startLoc, 0], eul2quat([0, 0, 0]))     text(startLoc(1), startLoc(2), 2, 'Start');          % Plot Goal Location     plotTransforms([goalLoc, 0], eul2quat([0, 0, 0]))     text(goalLoc(1), goalLoc(2), 2, 'Goal');          % Plot Robot's XY locations     plot(robotPose(:, 1), robotPose(:, 2), '-b')          % Plot Robot's pose as it traverses the path     quat = eul2quat(thetaEuler(k, :), 'xyz');     plotTransforms(xyz(k,:), quat, 'MeshFilePath',...         'groundvehicle.stl');     light;     drawnow;     hold off; end

© Copyright 2019 The Mathworks, Inc.