ホームページ > バックエンド開発 > Python チュートリアル > matplotlib と A* アルゴリズムを使用したドローン ナビゲーション システムの構築

matplotlib と A* アルゴリズムを使用したドローン ナビゲーション システムの構築

Patricia Arquette
リリース: 2024-11-29 04:59:09
オリジナル
439 人が閲覧しました

ドローンが複雑な環境をどのように移動するのか疑問に思ったことはありますか?このブログでは、Python、Matplotlib、および A* アルゴリズムを使用して、シンプルなドローン ナビゲーション システムを作成します。最後には、ドローンが迷路を解く様子を視覚化する実用的なシステムが完成します!

何を学ぶか

  1. 「エージェント」や「環境」などの基本的な AI 用語
  2. Python で迷路を作成して視覚化する方法。
  3. ナビゲーションの問題を解決するために A* アルゴリズムがどのように機能するか。
  4. ドローンの経路を実装して視覚化する方法。

はじめに

ドローン ナビゲーション システムを構築するには、次のものが必要です:

  1. エージェント: ドローン ?.
  2. パス: ドローンがナビゲートする 2D 迷路 ?️.
  3. 検索アルゴリズム: A* アルゴリズム ⭐.

その前に、初心者向けに基本的な AI 用語を簡単に確認してみましょう。


主要な AI 用語

  • エージェント: その 環境 (迷路) を認識し、目標を達成する (迷路の終わりに到達する) ために行動を起こすエンティティ (ドローンのような)。
  • 環境: エージェントが動作する世界。ここでは 2D 迷路として表されます。
  • ヒューリスティック: 検索のガイドとして使用される経験則または推定値 (ゴールまでの距離の測定など)。

システム設計

私たちのドローンは2D迷路をナビゲートします。迷路は次のもので構成されます:

  • (通行不可能な領域は 1 で表されます)。
  • パス (0 で表されるオープンスペース)。

ドローンの目的:

  1. 壁を避けてください。?
  2. 道の終点に到達します。?

迷路は次のようになります:

Building a drone navigation system using matplotlib and A* algorithm


ステップ 1: 迷路のセットアップ

必要なライブラリをインポートします

まず、必要なライブラリをインストールしてインポートします。

import matplotlib.pyplot as plt
import numpy as np
import random
import math
from heapq import heappop, heappush
ログイン後にコピー
ログイン後にコピー

迷路の寸法を定義する

迷路のサイズを定義しましょう:
パイソン
幅、高さ = 22、22

方向と重みを設定する

現実世界のナビゲーションでは、さまざまな方向への移動にさまざまなコストがかかる可能性があります。たとえば、北に移動することは東に移動するよりも難しい可能性があります。

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)}
ログイン後にコピー
ログイン後にコピー

迷路グリッドを初期化します

壁で埋められたグリッドから始めます (1 秒):

import matplotlib.pyplot as plt
import numpy as np
import random
import math
from heapq import heappop, heappush
ログイン後にコピー
ログイン後にコピー

ナンピー。 ons() 関数は、指定された形状と型の新しい配列を作成するために使用され、1 で満たされます...デフォルト値で配列を初期化するのに役立ちます。

ステップ 2: 迷路を彫る

次に、壁だけで初期化されている迷路内にパスを「刻む」する関数を定義しましょう

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)
ログイン後にコピー

ステップ 3: 迷路を視覚化する

Matplotlib を使用して迷路を表示します:

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
ログイン後にコピー

ステップ 4: A で迷路を解く*

A* アルゴリズムは、経路コストとヒューリスティックの組み合わせを使用して、加重迷路内の最短経路を見つけます。

ヒューリスティックを定義する

ヒューリスティックとして ユークリッド距離 を使用します。

start = (1, 1)
end = (2 * WIDTH - 1, 2 * HEIGHT - 1)
maze[start] = 0
maze[end] = 0
ログイン後にコピー

A* アルゴリズムの実装

fig, ax = plt.subplots(figsize=(8, 6))
ax.imshow(maze, cmap='binary', interpolation='nearest')
ax.set_title("2D Maze")
plt.show()
ログイン後にコピー

ステップ 5: ソリューションを視覚化する

迷路はできましたが、ドローンの進路はまだ見えません。
ドローンの経路を視覚化してみましょう:

def heuristic(a, b):
    return math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)
ログイン後にコピー

結論

おめでとうございます! ?以下の機能を備えたドローン ナビゲーション システムを構築しました。

  • 2D 迷路を生成します。
  • A* アルゴリズムを使用して解きます。
  • 最短経路を視覚化します。 Building a drone navigation system using matplotlib and A* algorithm

次のステップ

  1. さまざまな迷路のサイズと重さを試してみましょう。
  2. マンハッタン距離などの他のヒューリスティックを試してください。
  3. 3D 迷路を視覚化してさらに複雑にしましょう!

お気軽に結果を共有したり、以下のコメント欄で質問してください。
無限のその先へ?

以上がmatplotlib と A* アルゴリズムを使用したドローン ナビゲーション システムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート