Main Content

minjerkpolytraj

Generar trayectoria con jerk mínimo mediante waypoints

Desde R2021b

    Descripción

    ejemplo

    [q,qd,qdd,qddd,pp,tPoints,tSamples] = minjerkpolytraj(waypoints,timePoints,numSamples) genera una trayectoria polinómica con jerk mínimo que alcanza un determinado conjunto de waypoints de entrada con los puntos de tiempo correspondientes. La función devuelve posiciones, velocidades, aceleraciones y jerks en el número de muestras numSamples dado. También devuelve la forma polinómica por tramos pp de la trayectoria polinómica con relación al tiempo, así como los puntos de tiempo tPoints y los tiempos de muestreo tSamples.

    [q,qd,qdd,qddd,pp,tPoints,tSamples] = minjerkpolytraj(___,Name=Value) especifica opciones mediante uno o más argumentos de par nombre-valor, además de los argumentos de entrada de la sintaxis anterior. Por ejemplo, minjerkpolytraj(waypoints,timePoints,numSamples,VelocityBoundaryCondition=[1 0 -1 -1; 1 1 1 -1]) genera una trayectoria bidimensional con jerk mínimo y especifica las condiciones límite de velocidad en cada dimensión para cada waypoint.

    [q,qd,qdd,qddd,pp,tPoints,tSamples] = minjerkpolytraj(___,TimeAllocation=true) optimiza una combinación de jerk y coste total del tiempo del segmento. En este caso, la función trata timePoints como una estimación inicial del tiempo invertido en los waypoints.

    Ejemplos

    contraer todo

    Utilice la función minjerkpolytraj con un conjunto determinado de waypoints xy en 2D. También se proporcionan puntos de tiempo para los waypoints.

    wpts = [1 4 4 3 -2 0; 0 1 2 4 3 1];
    tpts = 0:5;

    Especifique el número de muestras en la trayectoria de salida.

    numsamples = 100;

    Calcule las trayectorias con jerk mínimo. La función genera posiciones de la trayectoria (q), velocidad (qd), aceleración (qdd) y jerks (qddd) en el número de muestras dado.

    [q,qd,qdd,qddd,pp,timepoints,tsamples] = minjerkpolytraj(wpts,tpts,numsamples);

    Represente las trayectorias de las posiciones x e y. Compare la trayectoria con cada waypoint.

    plot(tsamples,q)
    hold on
    plot(timepoints,wpts,'x')
    xlabel('t')
    ylabel('Positions')
    legend('X-positions','Y-positions')
    hold off

    También puede verificar las posiciones reales en el plano 2D. Represente las diferentes filas del vector q y los waypoints como las posiciones x e y.

    figure
    plot(q(1,:),q(2,:),'.b',wpts(1,:),wpts(2,:),'or')
    xlabel('X')
    ylabel('Y')

    Argumentos de entrada

    contraer todo

    Waypoints para una trayectoria, especificados como una matriz de n por p. n es la dimensión de la trayectoria y p es el número de waypoints.

    Ejemplo: [2 5 8 4; 3 4 10 12]

    Tipos de datos: single | double

    Puntos de tiempo para waypoints de trayectoria, especificados como un vector fila de p elementos. p es el número de waypoints.

    Ejemplo: [1 2 3 5]

    Tipos de datos: single | double

    Número de muestras en la trayectoria de salida, especificado como un número entero positivo.

    Ejemplo: 50

    Tipos de datos: single | double

    Argumentos de par nombre-valor

    Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.

    Ejemplo: minjerkpolytraj(waypoints,timePoints,numSamples,VelocityBoundaryCondition=[1 0 -1 -1; 1 1 1 -1]) genera una trayectoria bidimensional con jerk mínimo y especifica las condiciones límite de velocidad en cada dimensión para cada waypoint.

    Condiciones límite de velocidad de cada waypoint, especificadas como una matriz de n por p. Cada fila establece el límite de velocidad para la dimensión correspondiente de la trayectoria en cada uno de los p waypoints. De forma predeterminada, la función utiliza un valor de 0 en los waypoints límite y de NaN en los waypoints intermedios.

    Ejemplo: VelocityBoundaryCondition=[1 0 -1 -1; 1 1 1 -1]

    Tipos de datos: single | double

    Condiciones límite de aceleración de cada waypoint, especificadas como una matriz de n por p. Cada fila establece el límite de aceleración para la dimensión correspondiente de la trayectoria en cada uno de los p waypoints. De forma predeterminada, la función utiliza un valor de 0 en los waypoints límite y de NaN en los waypoints intermedios.

    Ejemplo: AccelerationBoundaryCondition=[1 0 -1 -1; 1 1 1 -1]

    Tipos de datos: single | double

    Condiciones límite de jerk de cada waypoint, especificadas como una matriz de n por p. Cada fila establece el límite de jerk para la dimensión correspondiente de la trayectoria en cada uno de los p waypoints. De forma predeterminada, la función utiliza un valor de 0 en los waypoints límite y de NaN en los waypoints intermedios.

    Ejemplo: JerkBoundaryCondition=[1 0 -1 -1; 1 1 1 -1]

    Tipos de datos: single | double

    Indicador de asignación de tiempo, especificado como 0 (false) o 1 (true) lógicos. Habilite este indicador para optimizar una combinación de jerk y coste total del tiempo del segmento.

    Nota

    Si se produce una singularidad cuando el indicador de asignación de tiempo está habilitado, reduzca la relación entre MaxSegmentTime y MinSegmentTime.

    Ejemplo: TimeAllocation=true

    Tipos de datos: logical

    Ponderación para la asignación de tiempo, especificada como un escalar positivo.

    Ejemplo: TimeWeight=120

    Tipos de datos: single | double

    Longitud mínima del segmento temporal, especificada como un escalar positivo o un vector fila de (p1) elementos.

    Ejemplo: MinSegmentTime=0.2

    Tipos de datos: single | double

    Longitud máxima del segmento temporal, especificada como un escalar positivo o un vector fila de (p1) elementos

    Ejemplo: MaxSegmentTime=10

    Tipos de datos: single | double

    Argumentos de salida

    contraer todo

    Posiciones de la trayectoria en las muestras de tiempo dadas en tSamples, devueltas como una matriz de n por m. n es la dimensión de la trayectoria y m es igual a numSamples.

    Velocidades de la trayectoria en las muestras de tiempo dadas en tSamples, devueltas como una matriz de n por m. n es la dimensión de la trayectoria y m es igual a numSamples.

    Aceleraciones de la trayectoria en las muestras de tiempo dadas en tSamples, devueltas como una matriz de n por m. n es la dimensión de la trayectoria y m es igual a numSamples.

    Jerks de la trayectoria en las muestras de tiempo dadas en tSamples, devueltas como una matriz de n por m. n es la dimensión de la trayectoria y m es igual a numSamples.

    Polinomio por tramos, devuelto como una estructura que define el polinomio de cada sección de la trayectoria por tramos. Puede crear sus propios polinomios por tramos utilizando mkpp, o evaluar el polinomio en los tiempos especificados mediante ppval. La estructura contiene los siguientes campos:

    • form: 'pp'.

    • breaks: el vector de p elementos de los tiempos en los que la trayectoria por tramos cambia de forma. p es el número de waypoints.

    • coefs: matriz de n(p1) por order para los coeficientes de los polinomios. n (p1) es la dimensión de la trayectoria multiplicada por el número de pieces. Cada conjunto de n filas define los coeficientes del polinomio que ha descrito cada trayectoria variable.

    • pieces: p1. El número de breaks menos 1.

    • order: grado del polinomio +1. El orden del polinomio es 8.

    • dim: n. La dimensión de las posiciones de los puntos de control.

    Puntos de tiempo para waypoints de trayectoria, devueltos como un vector fila de p elementos. p es el número de waypoints.

    Muestras de tiempo de la trayectoria, devueltas como un vector fila de m elementos. Cada elemento de la posición de salida q, velocidad qd, aceleración qdd y jerk qddd se ha muestreado en el momento correspondiente en este vector.

    Referencias

    [1] Bry, Adam, Charles Richter, Abraham Bachrach, and Nicholas Roy. “Aggressive Flight of Fixed-Wing and Quadrotor Aircraft in Dense Indoor Environments.” The International Journal of Robotics Research, 34, no. 7 (June 2015): 969–1002.

    [2] Richter, Charles, Adam Bry, and Nicholas Roy. “Polynomial Trajectory Planning for Aggressive Quadrotor Flight in Dense Indoor Environments." Paper presented at the International Symposium of Robotics Research (ISRR 2013), 2013.

    Capacidades ampliadas

    Generación de código C/C++
    Genere código C y C++ mediante MATLAB® Coder™.

    Historial de versiones

    Introducido en R2021b