Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

closestPointsToSequence

Projette une séquence de points sur le chemin

Depuis R2022a

    Description

    pathPoints = closestPointsToSequence(refPath,points,initWindow) utilise le point le plus proche dans une séquence de points, points, pour être dans la fenêtre de recherche valide, initWindow. Pour chaque point de Points, la fenêtre de recherche est centrée sur le point précédent.

    exemple

    [pathPoints,inWindow] = closestPointsToSequence(refPath,points,initWindow) renvoie éventuellement un vecteur logique inWindow, spécifiant si chaque point de la coordonnée xy correspondante dans points est projeté dans la fenêtre de recherche.

    Exemples

    réduire tout

    [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

    Définissez les fonctions d'assistance au tracé.

    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);

    Générez une trajectoire qui contient elle-même une intersection.

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

    Définissez les états de telle sorte qu'ils commencent au repos et se terminent avec une vitesse positive et aucune accélération.

    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

    Générez la trajectoire.

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

    Tracez la trajectoire.

    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

    Trouvez les points les plus proches sur la trajectoire.

    closestPts = closestPoint(refPath,gXingPts);

    Trouvez les points les plus proches dans la fenêtre qui s'étend sur toute la longueur de la trajectoire.

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

    Tracez ici les points naïfs les plus proches.

    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

    Calculez une taille de fenêtre glissante basée sur la vitesse globale maximale. Notez que cela peut ne pas couvrir la trajectoire en fonction de la forme du chemin de référence.

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

    Calculez la région balayée par la fenêtre glissante. Tracez ensuite la région balayée.

    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

    Afficher les résultats.

    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.

    Arguments d'entrée

    réduire tout

    Chemin de référence, spécifié en tant qu'objet referencePathFrenet .

    Points globaux, spécifiés sous la forme d'une matrice numérique P-par 2 avec des lignes de la forme [x y]. P est le nombre de points. Les positions sont en mètres.

    Fenêtre de recherche initiale, spécifiée sous la forme d'un vecteur de ligne à deux éléments sous la forme [minimum_bound maximum_bound] .

    Arguments de sortie

    réduire tout

    Points les plus proches sur le chemin de référence, renvoyés sous la forme d'une matrice numérique N-par 6 avec des lignes de la forme [x y theta kappa dkappa s], où :

    • x y et theta — État SE(2) exprimé en coordonnées globales, avec x et y en mètres et theta en radians

    • kappa — Courbure, ou inverse du rayon, en m-1

    • dkappa — Dérivée de la courbure par rapport à la longueur de l'arc dans m-2

    • s — Longueur de l'arc ou distance le long du chemin depuis l'origine du chemin, en mètres

    N est le nombre de points échantillonnés le long du chemin de référence.

    Indique si chaque point le plus proche de la coordonnée xy correspondante dans points est projeté dans la fenêtre de recherche, renvoyé sous la forme d'un élément N vecteur de colonne logique, où N est le nombre de points dans points. Les points projetés dans la fenêtre de recherche sont true, ou false s'ils se trouvent au bout d'une fenêtre.

    Capacités étendues

    Génération de code C/C++
    Générez du code C et C++ avec MATLAB® Coder™.

    Historique des versions

    Introduit dans R2022a