Projet Python3 concernant la mise en œuvre de deux simulations UAV avec un système d'évitement de collision basé sur une approche géométrique. Liens de projet:
UAV Collision Avoidance est mon projet de baccalauréat de thèse de la thèse du problème de la coopération en toute sécurité des drones dans l'espace 3D. Le projet implémente les calculs de physique fonctionnelle, l'interface graphique évolutive, les systèmes d'évitement de collision probables ADS-B réalistes et la planification de vol intégrée. L'application propose une simulation multithread en temps réel présentant des avions simulés ainsi qu'une simulation pré-renvoyée linéairement permettant des tests d'efficacité rapide des algorithmes.
-45°, 45° et -90°, 90° respectivement, où l'angle de tangage positif signifie que l'angle de l'escalade et le rouleau positif signifie la droite bancaire. Les angles ne sont pas approximés pour la préservation du réalisme.Les algorithmes de détection de collision et d'évitement reposent sur une approche géométrique. Ils ont été présentés dans le papier référencé 2 . La détection de collision différencie la collision et la collision frontale. Le second s'applique lorsque les drones n'ont pas de distance entre leur collision de centre de masses projetée, et la première lorsqu'elle est tous les autres types de contact.
L'approche géométrique s'avère utile dans la détection et l'évitement des collisions. Le système est capable d'éviter les collisions dans la plupart des cas. Le système n'est pas parfait et peut échouer dans certains scénarios, surtout lorsque les avions sont trop proches les uns des autres lorsque le conflit est détecté. Le système est économe en énergie et peut être utilisé dans des scénarios réels.
Le système de génération et d'évaluation des cas de test proposés est simple et efficace. Il permet des tests rapides de l'efficacité du système dans divers scénarios. Le système peut être développé pour inclure des scénarios plus complexes et des paramètres supplémentaires.
Le projet Python3 3 est enveloppé comme un package PYPI 4 . Pyside6 5 (la bibliothèque Python QT6 de QT) a été utilisée pour l'implémentation de GUI.
L'application est construite en fonction de deux types d'objets principaux, de la simulation et des avions. La simulation est créée jusqu'aux paramètres initiaux, permettant une variante concomitante en temps réel et un préalable linéaire. L'avion se compose de deux éléments, de la représentation physique de l'ordinateur d'UAV et de l'ordinateur de commande de vol, qui est contrôlé par le fil ADS-B. La recherche entre les systèmes d'UAV a été tirée du deuxième article cité 6 .
Les données de simulation sont stockées au format CSV. Chaque ligne du fichier représente une seule simulation menée. Les colonnes du fichier CSV représentent des informations détaillées sur le cas de test, y compris les paramètres initiaux et finaux des avions, les résultats de détection de collision et la distance relative minimale entre les avions pour les deux cas avec et sans évitement.
Exemple de fichiers de données de simulation est stocké dans les données du répertoire de données. Les résultats de 200 tests de simulation effectués avec une fréquence de simulation 10 Hz sont stockés dans la simulation de fichiers-2024-06-10-00-21-19.csv.
La structure du fichier a été générée à l'aide de la commande tree :
tree --gitignore -I " __pycache__|.env|.github|.pytest_cache|.vscode|assets|build|logs|path-visual|uav_collision_avoidance.egg-info|venv|docs "Afficher la structure du fichier ici: structure de fichier
Il y a huit arguments possibles pour le moment:
file_path test_index collision_avoidance - exécute la simulation de GUI; Le nom de fichier peut être spécifié et par défaut des dernières données de simulation trouvées; L'indice de test peut être spécifié et par défaut à 0; L'évitement des collisions peut être spécifié et les défautstest_number - exécute des tests complets comparant l'efficacité de l'algorithme d'évitement des collisions, le numéro de test est par défaut à 15file_path test_index - Charge et effectue une simulation sans tête à partir du fichier lors de la spécification, sinon charge un exemple de test par défaut à partir des données du répertoire de données; L'indice de test peut être spécifié et par défaut à 0argument d'aide - Imprime le message d'aide pour l'argument de l'application; Par défaut, tous les arguments de la liste des argumentsLa version en temps réel de l'application a plusieurs raccourcis clés permettant une interaction utilisateur avec l'environnement.
Note
L'avion 0 est le premier, l'avion 1 est le deuxième.
Il existe plusieurs raccourcis clés pour la version en temps réel de l'application qui permettent des tests à grande échelle.
Installez l'application en exécutant la commande suivante:
pip install uav-collision-avoidancePour Debian 12, vous devez installer les dépendances suivantes:
sudo apt-get install libgl1 libxcb-xinerama0Pour exécuter l'application sans tête, vous devez exécuter l'exportation suivante:
export QT_QPA_PLATFORM=offscreenUtilisez l'un des éléments suivants pour exécuter l'application:
uav-collision-avoidanceuav-collision-avoidance realtime [file_name] [test_index] [collision_avoidance]uav-collision-avoidance headlessuav-collision-avoidance tests [test_number]uav-collision-avoidance ongoinguav-collision-avoidance load [file_name] [test_index]uav-collision-avoidance help [argument]uav-collision-avoidance versionConstruisez-le en clonant le repo et en exécutant les commandes suivantes:
#! /bin/bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python main.py [argument]python - m venv venv
.venvScriptsactivate
pip install - r requirements.txt
python main.py [ argument ] Le monde en 3 dimensions (3D) est projeté sur l'écran 2D par hauteur d'aplatissement (coordonnée Z). Au début du programme, la vue n'est centrée sur aucun des avions. La vue peut être déplacée avec des touches de flèche ou centrée sur l'avion à l'aide de la touche N .
Une convention de codage n'est pas conservée dans la portée du projet. Les méthodes de QT sont formatées par CamelCase et le reste est la convention de dénomination Python par défaut, y compris Snake_case pour les noms de variables et de membres.
Miłosz Maculewicz
Vérifier la licence

Drone par Anthony Lui de Noun Project (CC par 3.0)
Toutes les références utilisées sont répertoriées ci-dessous.
Axes principaux d'avion ↩
Évitement des collisions d'UAV basée sur l'approche géométrique ↩
Python3 ↩
PYPI ↩
Pyqt6 ↩
Méthode de contrôle du vol UAV économe en énergie dans un environnement avec des obstacles et des rafales de vent ↩