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.

closestPointsToSequence

Proyecta una secuencia de puntos en la ruta

Desde R2022a

    Descripción

    pathPoints = closestPointsToSequence(refPath,points,initWindow) utiliza el punto más cercano dentro de una secuencia de puntos, points, para estar dentro de la ventana de búsqueda válida, initWindow. Para cada punto en Points, la ventana de búsqueda se centra en el punto anterior.

    [pathPoints,inWindow] = closestPointsToSequence(refPath,points,initWindow) devuelve opcionalmente un vector lógico inWindow, que especifica si cada punto de la coordenada xy correspondiente en points se proyecta dentro de la ventana de búsqueda.

    ejemplo

    Ejemplos

    contraer todo

    [refPath,generator,f0,f1] = closestPointExampleSetup;

    Figure contains an axes object. The axes object with title Closest Points Around Intersection contains 2 objects of type line. One or more of the lines displays its values using only markers

    Defina las funciones auxiliares de la trama.

    mergeFcn = @(v1,v2)reshape([v1 v2 nan(size(v1,1),size(v2,2))]',[],1);
    plotFcn = @(L1,L2,linespec)plot(mergeFcn(L1(:,1),L2(:,1:min(1,size(L2,2)))), ...
       mergeFcn(L1(:,2),L2(:,2:min(2,size(L2,2)))),linespec{:});
    plotInterval = @(bounds,nPt,linespec)plotFcn(interpolate(...
        refPath,linspace(bounds(1),bounds(2),nPt)'),[],linespec);

    Genere una trayectoria que a su vez contenga una intersección.

    f2 = f1;
    f2(1) = refPath.SegmentParameters(4,end) + 20;

    Establezca los estados de modo que comience desde el reposo y termine con una velocidad positiva y sin aceleración.

    f0(2) = 0;                          % Initial lon. speed set to 0
    f2(2) = 5;                          % Terminal lon. speed set to 5
    deltaS = (f2(1)-f0(1));             % Longitudinal distance traveled
    vAvgEstimate = (f2(2)-f0(2))/2;     % Rough average lon. velocity estimate
    T2 = deltaS/vAvgEstimate;           % Ballpark travel duration

    Generar la trayectoria.

    [fIntersecting,gIntersecting] = connect(generator,f0,f2,T2);
    gXingPts = gIntersecting.Trajectory;

    Trazar la trayectoria.

    figure
    show(refPath); 
    xlim([0 125])
    ylim([0 125])
    hold on

    Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

    Encuentre los puntos más cercanos a lo largo de la trayectoria.

    closestPts = closestPoint(refPath,gXingPts);

    Encuentre los puntos más cercanos en la ventana que abarque toda la trayectoria.

    windowBuffer = 5;
    fXingPts = fIntersecting.Trajectory;
    fixedWindow = [min(fXingPts(:,1))-windowBuffer max(fXingPts(:,1))+windowBuffer];
    closestPtsFullWindow = closestPoint(refPath,gXingPts,fixedWindow);

    Traza aquí los ingenuos puntos más cercanos.

    title("Closest Points Along Self-Intersecting Trajectory")
    plotInterval(fixedWindow,100,{"Color",[.5 .5 .5],"LineWidth",5});

    Figure contains an axes object. The axes object with title Closest Points Along Self-Intersecting Trajectory contains 3 objects of type line. One or more of the lines displays its values using only markers

    Calcule el tamaño de una ventana deslizante en función de la velocidad global máxima. Tenga en cuenta que es posible que esto no cubra la trayectoria dependiendo de la forma de la ruta de referencia.

    dsApprox = max(abs(gXingPts(:,5)))*generator.TimeResolution;
    initialWindow = fXingPts(1)+[-1 1]*dsApprox;
    [closestPtsSlidingWindow, inWindow] = closestPointsToSequence(refPath,gXingPts,initialWindow);

    Calcule la región barrida por la ventana deslizante. Luego trace la región barrida.

    sweptRegion = [closestPtsSlidingWindow(1,end)-dsApprox,closestPtsSlidingWindow(end-1,end)+dsApprox];
    plotInterval(sweptRegion,100,{":","Color",[.25 .25 .25],"LineWidth",3});

    Figure contains an axes object. The axes object with title Closest Points Along Self-Intersecting Trajectory contains 4 objects of type line. One or more of the lines displays its values using only markers

    finalWindow = [closestPtsSlidingWindow(end-1,end)-dsApprox,closestPtsSlidingWindow(end-1,end)+dsApprox];
    plotInterval(finalWindow,100,{"k","LineWidth",5});

    Figure contains an axes object. The axes object with title Closest Points Along Self-Intersecting Trajectory contains 5 objects of type line. One or more of the lines displays its values using only markers

    Mostrar resultados.

    plotFcn(gXingPts,[],{"k.-"});
    plotFcn(gXingPts,closestPts,{"b","LineWidth",3});
    plotFcn(gXingPts,closestPtsFullWindow,{"m","LineWidth",2})
    plotFcn(gXingPts(inWindow,:),closestPtsSlidingWindow(inWindow,:),{"g"});
    plotFcn(gXingPts(~inWindow,:),closestPtsSlidingWindow(~inWindow,:),{"r"});
    legend({"Waypoints","ReferencePath","FixedWindow", ...
        "SlidingWindowSweptRegion","SlidingWindowFinalSpan", ...
        "Trajectory", "ClosestPoint","ClosestInsideFixedWindow", ...
        "ClosestInsideSlidingWindow"});

    Figure contains an axes object. The axes object with title Closest Points Along Self-Intersecting Trajectory contains 9 objects of type line. One or more of the lines displays its values using only markers These objects represent Waypoints, ReferencePath, FixedWindow, SlidingWindowSweptRegion, SlidingWindowFinalSpan, Trajectory, ClosestPoint, ClosestInsideFixedWindow, ClosestInsideSlidingWindow.

    Argumentos de entrada

    contraer todo

    Ruta de referencia, especificada como un objeto referencePathFrenet.

    Puntos globales, especificados como una matriz numérica de P por 2 con filas con la forma [x y]. P es el número de puntos. Las posiciones están en metros.

    Ventana de búsqueda inicial, especificada como un vector fila de dos elementos en el formato [minimum_bound maximum_bound].

    Argumentos de salida

    contraer todo

    Puntos más cercanos en la ruta de referencia, devueltos como una matriz numérica N por 6 con filas de formato [x y theta kappa dkappa s], donde:

    • x y y theta — estado SE(2) expresado en coordenadas globales, con x y y en metros y theta en radianes

    • kappa — Curvatura, o inversa del radio, en m-1

    • dkappa — Derivada de la curvatura con respecto a la longitud del arco en m-2

    • s — Longitud del arco, o distancia a lo largo de la trayectoria desde el origen de la trayectoria, en metros

    N es el número de puntos muestreados a lo largo de la ruta de referencia.

    Indicación de si cada punto más cercano a la coordenada xy correspondiente en points se proyecta dentro de la ventana de búsqueda, y se devuelve como un vector columna lógico de elementos N, donde N es el número de puntos en points. Los puntos que se proyectan dentro de la ventana de búsqueda son true, o false si se encuentran al final de una ventana.

    Capacidades ampliadas

    expandir todo

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

    Historial de versiones

    Introducido en R2022a