Main Content

controllerPurePursuit

Cree un controlador para seguir un conjunto de waypoints

Descripción

controllerPurePursuit System object™ crea un objeto de controlador que se utiliza para que un vehículo con tracción diferencial siga un conjunto de waypoints. El objeto calcula la velocidad lineal y angular del vehículo a partir de la posición actual indicada. Las subsiguientes llamadas al objeto con posiciones actualizadas proporcionan comandos de velocidad actualizados para el vehículo. Utilice las propiedades MaxAngularVelocity y DesiredLinearVelocity para actualizar las velocidades en función del rendimiento del vehículo.

La propiedad LookaheadDistance calcula un punto look-ahead en la ruta, que es un objetivo local para el vehículo. El comando de velocidad angular se calcula a partir de este punto. Cambiar LookaheadDistance tiene un impacto significativo en el rendimiento del algoritmo. Una mayor distancia look-ahead da como resultado una trayectoria con menos obstáculos, pero puede provocar que el vehículo tome un atajo durante la ruta. Una distancia look-ahead menor puede resultar en oscilaciones en el seguimiento de la ruta, lo que causaría un comportamiento inestable. Para obtener más información sobre el algoritmo Pure Pursuit, consulte Controlador de Pure Pursuit.

Nota

A partir de la versión R2016b, en lugar de usar el método step para realizar la operación definida por System object, puede llamar al objeto con argumentos, como si fuera una función. Por ejemplo, y = step(obj,x) y y = obj(x) realizan operaciones equivalentes.

Para calcular los comandos de control de velocidad lineal y angular:

  1. Cree el objeto controllerPurePursuit y configure sus propiedades.

  2. Llame al objeto con argumentos, como si fuera una función.

Para más información sobre el funcionamiento de los System objects, consulte ¿Qué son los System Objects?

Creación

Descripción

ejemplo

controller = controllerPurePursuit crea un objeto de Pure Pursuit que utiliza el algoritmo de Pure Pursuit para calcular las entradas de velocidad lineal y angular para un vehículo con tracción diferencial.

controller = controllerPurePursuit(Name,Value) crea un objeto de Pure Pursuit con opciones adicionales especificadas por uno o más pares Name,Value. Name es el nombre de la propiedad y Value es el valor correspondiente. Name debe aparecer entre comillas simples (' '). Puede especificar varios argumentos de par nombre-valor en cualquier orden como Name1,Value1,...,NameN,ValueN. Las propiedades no especificadas conservan sus valores predeterminados.

Ejemplo: controller = controllerPurePursuit('DesiredLinearVelocity', 0.5)

Propiedades

expandir todo

Velocidad lineal constante deseada, especificada como un escalar en metros por segundo. El controlador asume que el vehículo avanza a una velocidad lineal constante y que la velocidad angular calculada es independiente de la velocidad lineal.

Tipos de datos: double

Distancia look-ahead, especificada como un escalar en metros. La distancia look-ahead cambia la respuesta del controlador. Un vehículo con una distancia look-ahead mayor produce rutas sin obstáculos pero realiza giros más abiertos en las esquinas. Un vehículo con una distancia look-ahead menor sigue fielmente la ruta y realiza giros bruscos, pero podría crear oscilaciones en la ruta.

Tipos de datos: double

Velocidad angular máxima, especificada como un escalar en radianes por segundo. El controlador satura la salida de velocidad angular absoluta a un valor determinado.

Tipos de datos: double

Waypoints, especificados como un arreglo de n por 2 de pares [x y], donde n es el número de waypoints. Puede generar los waypoints a partir de la clase mobileRobotPRM o de otro origen.

Tipos de datos: double

Uso

Descripción

ejemplo

[vel,angvel] = controller(pose) procesa la posición y la orientación del vehículo, pose, y genera la velocidad lineal, vel, y la velocidad angular, angvel.

[vel,angvel,lookaheadpoint] = controller(pose) devuelve el punto look-ahead, que es una ubicación en la ruta usada para calcular los comandos de velocidad. Esta ubicación en la ruta se calcula utilizando la propiedad LookaheadDistance en el objeto controller.

Argumentos de entrada

expandir todo

La posición y la orientación del vehículo, especificadas como un vector de 3 por 1 en la forma [x y theta]. La pose del vehículo es una posición de x y y con una orientación angular θ (en radianes) medida a partir del eje x.

Argumentos de salida

expandir todo

Velocidad lineal, especificada como un escalar en metros por segundo.

Tipos de datos: double

Velocidad angular, especificada como un escalar en radianes por segundo.

Tipos de datos: double

Punto look-ahead en la ruta, devuelto como un vector [x y]. Este valor se calcula a partir de la propiedad LookaheadDistance.

Funciones del objeto

Para usar una función de objeto, especifique el System object como el primer argumento de entrada. Por ejemplo, para liberar recursos de sistema de un System object llamado obj, utilice la siguiente sintaxis:

release(obj)

expandir todo

infoCharacteristic information about controllerPurePursuit object
stepEjecutar el algoritmo System object
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Ejemplos

contraer todo

Utilice el método info para obtener más información sobre un objeto controllerPurePursuit. La función info devuelve dos campos, RobotPose y LookaheadPoint, que se corresponden con la posición y la orientación actuales del robot y el punto en la ruta utilizado para calcular las salidas desde la última llamada del objeto.

Cree un objeto controllerPurePursuit.

pp = controllerPurePursuit;

Asigne waypoints.

pp.Waypoints = [0 0;1 1];

Calcule comandos de control utilizando el objeto pp con la pose inicial [x y theta] dada como entrada.

[v,w] = pp([0 0 0]);

Obtenga más información.

s = info(pp)
s = struct with fields:
         RobotPose: [0 0 0]
    LookaheadPoint: [0.7071 0.7071]

Capacidades ampliadas

Historial de versiones

Introducido en R2019b