Haben Sie sich jemals gefragt, wie Drohnen durch komplexe Umgebungen navigieren? In diesem Blog erstellen wir ein einfaches Drohnennavigationssystem mit Python, Matplotlib und dem A*-Algorithmus. Am Ende haben Sie ein funktionierendes System, das eine Drohne visualisiert, die ein Labyrinth löst!
Um unser Drohnen-Navigationssystem aufzubauen, benötigen wir Folgendes:
Aber lassen Sie uns zunächst kurz einige grundlegende KI-Begriffe für diejenigen durchgehen, die neu sind.
Unsere Drohne navigiert durch ein 2D-Labyrinth. Das Labyrinth besteht aus:
Die Ziele der Drohne:
So sieht das Labyrinth aus:
Zuerst installieren und importieren Sie die erforderlichen Bibliotheken:
import matplotlib.pyplot as plt import numpy as np import random import math from heapq import heappop, heappush
Lassen Sie uns die Größe des Labyrinths definieren:
Python
BREITE, HÖHE = 22, 22
In der realen Navigation kann die Bewegung in verschiedene Richtungen unterschiedliche Kosten verursachen. Beispielsweise könnte es schwieriger sein, nach Norden zu ziehen als nach Osten.
DIRECTIONAL_WEIGHTS = {'N': 1.2, 'S': 1.0, 'E': 1.5, 'W': 1.3} DIRECTIONS = {'N': (-1, 0), 'S': (1, 0), 'E': (0, 1), 'W': (0, -1)}
Wir beginnen mit einem Gitter, das mit Wänden (1s) gefüllt ist:
import matplotlib.pyplot as plt import numpy as np import random import math from heapq import heappop, heappush
Der Numpy. Die Funktion ones() wird verwendet, um ein neues Array mit einer bestimmten Form und einem bestimmten Typ zu erstellen, das mit Einsen gefüllt ist. Dies ist hilfreich beim Initialisieren eines Arrays mit Standardwerten.
Jetzt definieren wir eine Funktion, die Wege in Ihrem Labyrinth „ausschneidet“, das gerade mit nur Wänden initialisiert ist
DIRECTIONAL_WEIGHTS = {'N': 1.2, 'S': 1.0, 'E': 1.5, 'W': 1.3} DIRECTIONS = {'N': (-1, 0), 'S': (1, 0), 'E': (0, 1), 'W': (0, -1)}
maze = np.ones((2 * WIDTH + 1, 2 * HEIGHT + 1), dtype=int)
Verwenden Sie Matplotlib, um das Labyrinth anzuzeigen:
def carve(x, y): maze[2 * x + 1, 2 * y + 1] = 0 # Mark current cell as a path directions = list(DIRECTIONS.items()) random.shuffle(directions) # Randomize directions for _, (dx, dy) in directions: nx, ny = x + dx, y + dy if 0 <= nx < WIDTH and 0 <= ny < HEIGHT and maze[2 * nx + 1, 2 * ny + 1] == 1: maze[2 * x + 1 + dx, 2 * y + 1 + dy] = 0 carve(nx, ny) carve(0, 0) # Start carving from the top-left corner
Der A*-Algorithmus findet den kürzesten Weg in einem gewichteten Labyrinth mithilfe einer Kombination aus Pfadkosten und Heuristik.
Wir verwenden die Euklidische Distanz als unsere Heuristik:
start = (1, 1) end = (2 * WIDTH - 1, 2 * HEIGHT - 1) maze[start] = 0 maze[end] = 0
fig, ax = plt.subplots(figsize=(8, 6)) ax.imshow(maze, cmap='binary', interpolation='nearest') ax.set_title("2D Maze") plt.show()
Wir haben das Labyrinth, aber Sie können den Weg der Drohne noch nicht sehen.
Lassen Sie uns den Weg der Drohne visualisieren:
def heuristic(a, b): return math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)
Herzlichen Glückwunsch! ? Sie haben ein funktionierendes Drohnen-Navigationssystem gebaut, das:
Teilen Sie Ihre Ergebnisse gerne mit uns oder stellen Sie Fragen in den Kommentaren unten.
Bis ins Unendliche und darüber hinaus?
Das obige ist der detaillierte Inhalt vonAufbau eines Drohnennavigationssystems mit Matplotlib und A*-Algorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!