Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

interpolate

Punkte entlang des Pfades interpolieren

Beschreibung

interpolate(path,numStates) fügt eine Reihe von Zuständen in den Pfad ein und stellt sicher, dass die Verteilung aller Punkte im Pfad gleichmäßig ist. Die Funktion behält alle vorhandenen Zustände im Pfad bei. Der Wert von numStates muss größer oder gleich der Anzahl der vorhandenen Zustände im Pfad sein.

Beispiel

Beispiele

alle reduzieren

Erstellen Sie ein navPath-Objekt basierend auf mehreren Wegpunkten in einem Dubins-Raum.

dubinsSpace = stateSpaceDubins([0 25; 0 25; -pi pi])
dubinsSpace = 
  stateSpaceDubins with properties:

   SE2 Properties
                 Name: 'SE2 Dubins'
          StateBounds: [3x2 double]
    NumStateVariables: 3

   Dubins Vehicle Properties
     MinTurningRadius: 1

pathobj = navPath(dubinsSpace)
pathobj = 
  navPath with properties:

      StateSpace: [1x1 stateSpaceDubins]
          States: [0x3 double]
       NumStates: 0
    MaxNumStates: Inf

waypoints = [8 10 pi/2;
             7 14 pi/4;
             10 17 pi/2;
             10 10 -pi];
append(pathobj,waypoints)

Interpolieren Sie diesen Pfad, sodass er genau 250 Punkte enthält.

interpolate(pathobj,250)

Visualisieren Sie den interpolierten Pfad und die ursprünglichen Wegpunkte.

figure
grid on
axis equal
hold on
plot(pathobj.States(:,1),pathobj.States(:,2),".b")
plot(waypoints(:,1),waypoints(:,2),"*r","MarkerSize",10)

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

Länge des Pfades berechnen.

len = pathLength(pathobj);
disp("Path length = " + num2str(len))
Path length = 19.4722

Laden Sie eine 3D-Belegungskarte eines Häuserblocks in den Workspace. Geben Sie den Schwellenwert an, ab dem Zellen als hindernisfrei betrachtet werden sollen.

mapData = load("dMapCityBlock.mat");
omap = mapData.omap;
omap.FreeThreshold = 0.5;

Erweitern Sie die Belegungskarte, um eine Pufferzone für einen sicheren Betrieb rund um die Hindernisse hinzuzufügen.

inflate(omap,1)

Erstellen Sie ein SE(3)-Zustandsraumobjekt mit Grenzen für Zustandsvariablen.

ss = stateSpaceSE3([0 220;0 220;0 100;inf inf;inf inf;inf inf;inf inf]);

Erstellen Sie ein navPath-Objekt basierend auf mehreren Wegpunkten in einem SE(3)-Zustandsraum.

path = navPath(ss);
waypoints = [40 180 15 0.7 0.2 0 0.1;
             55 120 20 0.6 0.2 0 0.1;
             100 100 25 0.5 0.2 0 0.1;
             130 90 30 0.4 0 0.1 0.6;
             150 33 35 0.3 0 0.1 0.6];
append(path,waypoints)

Interpolieren Sie diesen Pfad, sodass er genau 250 Punkte enthält.

interpolate(path,250)

Visualisieren Sie den interpolierten Pfad und die ursprünglichen Wegpunkte.

show(omap)
axis equal
view([-10 55])
hold on
% Start state
scatter3(waypoints(1,1),waypoints(1,2),waypoints(1,3),"g","filled")
% Goal state
scatter3(waypoints(end,1),waypoints(end,2),waypoints(end,3),"r","filled")
% Intermediate waypoints
scatter3(waypoints(2:end-1,1),waypoints(2:end-1,2), ...
         waypoints(2:end-1,3),"y","filled")
% Path
plot3(path.States(:,1),path.States(:,2),path.States(:,3), ...
      "r-",LineWidth=2)

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 5 objects of type patch, scatter, line.

Länge des Pfades berechnen.

len = pathLength(path);
disp("Path length = " + num2str(len))
Path length = 204.1797

Eingabeargumente

alle reduzieren

Pfadobjekt, angegeben als navPath-Objekt.

Anzahl der in den Pfad eingefügten Zustände, angegeben als nicht negative Ganzzahl. Sein Wert muss größer oder gleich der Anzahl der vorhandenen Zustände im Pfad sein.

Datentypen: double

Erweiterte Fähigkeiten

alle erweitern

C/C++ Codegenerierung
Generieren Sie C und C++ Code mit MATLAB® Coder™.

Versionsverlauf

Eingeführt in R2019b

Siehe auch

Objekte

Funktionen