AUTOLANDER est un projet de vision embarquée visant à faciliter l’atterrissage de précision à l’aide de tags ArUco et d’une caméra sur Raspberry Pi.
Le dépôt inclut des scripts pour calibrer la caméra et estimer la pose (distance/orientation) d’un tag détecté.
Pour exécuter ou contribuer à ce projet, assurez-vous d’avoir installé :
ℹ️ Sur Raspberry Pi, il est possible que vous deviez installer des dépendances système supplémentaires. Elles sont généralement indiquées dans les messages d’erreur lors de l’installation ou de l’exécution.
Il est recommandé d’utiliser poetry pour la gestion des dépendances plutôt que pip.
Poetry permet de reproduire exactement l’environnement de travail (versions de dépendances identiques) et crée un
environnement virtuel afin d’éviter de polluer vos packages Python système.
poetry add <nom_de_la_dependance>poetry add --group <nom_du_groupe> <nom_de_la_dependance>Par exemple, la commande poetry add --group dev flake8 ajoute l’outil flake8 dans le groupe dev.
poetry remove <nom_de_la_dependance>Il est normal qu’à l’ajout ou à la suppression d’une dépendance, les fichiers pyproject.toml et poetry.lock soient modifiés automatiquement. Veuillez faire un commit lors de ces changements.
Pour exécuter le programme ou certains scripts du projet, installez d’abord les dépendances requises (à la racine du dépôt).
poetry installIl est important de calibrer la caméra afin d’obtenir la matrice intrinsèque et les coefficients de distorsion.
Une bonne calibration, pour l’estimation de pose, devrait idéalement fournir une erreur de reprojection
Pour plus d’informations sur le script de calibration :
poetry run calibrate_camera --helpAprès avoir obtenu une bonne calibration de la caméra, vous pouvez opérer l'atterrissage de précision.
Pour ce, il vous faudra un fichier de configuration qui fournit au logiciel certaines informations pour son fonctionnement voir la section sur le fichier de configuration.
Pour lancer autolander pour operer un l'atterrissage sur ArUco:
poetry run precion_landing [PATH_TO_CONFIGURATION_FILE]Par exemple, si le fichier de config est à la racine et s'appelle landing_config.json:
poetry run precion_landing landing_config.jsonPour plus d’informations sur la commande precision_landing:
poetry run precion_landing --helpActiver l’environnement virtuel Poetry dans la session courante permet d’utiliser les commandes sans poetry run ....
Une fois activé, les scripts définis dans pyproject.toml (section [tool.poetry.scripts]) deviennent accessibles comme des commandes système.
eval "$(poetry env activate)"Ensuite, par exemple :
calibrate_camera --helpLes outils black, flake8 et isort ont été ajoutés au projet pour permettre de maintenir propre la base de code sur ce dépôt.
poetry run fmtpoetry run fmt-check # ou
flake8 . # exécuter à la racine du projetLe fichier de configuration est nécessaire pour faire l'atterrissage de précision. C'est un fichier json avant la structure suivante :
{
"camera": {
"id": "entier représentant l'identifiant de la caméra. Généralement 0 pour la caméra par défaut du système.",
"use_picamera": "booléen. true pour utiliser Picamera2 sur Raspberry Pi, false pour utiliser OpenCV / caméra système classique.",
"fps": "nombre entier représentant le framerate souhaité pour la capture vidéo.",
"calibration_filepath": "chemin absolu ou relatif vers le fichier de calibration de la caméra (formats supportés : .npz ou .yaml).",
"gz_simulation": {
"topic_name": "chaîne de caractères représentant le nom du topic Gazebo à utiliser pour récupérer les images de la caméra simulée. Utile seulement en simulation."
}
},
"vision": {
"targeted_marker": {
"length": "taille réelle du côté du marqueur ArUco en mètres. Exemple : 0.896 pour un marqueur de 89.6 cm.",
"id": "identifiant entier du marqueur ArUco cible à détecter.",
"aruco_dictionary": "identifiant entier du dictionnaire ArUco utilisé pour générer et détecter le marqueur. Valeur entre 0 et 4 voir la table recapitulative en 6"
}
},
"streaming": {
"port": "port réseau utilisé pour exposer le flux de streaming ou le serveur associé.",
"data": {
"dps": "fréquence d'envoi des données de télémétrie ou de tracking, en données par seconde."
},
"video": {
"fps": "framerate du flux vidéo diffusé. Peut être différent du fps de capture caméra."
}
},
"drone_connection": {
"use_serial": "booléen. true pour utiliser une connexion série UART, false pour utiliser une connexion réseau UDP/TCP selon l'implémentation.",
"address": "adresse IP de la cible pour la connexion réseau. Par défaut : 127.0.0.1",
"port": "port réseau utilisé pour la connexion au drone ou au simulateur. Par défaut : 14550",
"baud_rate": "vitesse de communication série en bauds. Utilisée si use_serial = true. Par défaut: 921600."
}
}
ℹ️ Le fichier de configuration recommandé pour RaspberryPi est landing_config.json
⚠️ La structure de ce fichier doit être respectée.
Le tableau suivant présente la correspondance entre les identifiants numériques et les noms des dictionnaires ArUco pris en charge :
| ID | Nom du dictionnaire | Taille de grille | Nombre de marqueurs | Remarque |
|---|---|---|---|---|
| 0 | DICT_4X4_50 | 4 × 4 | 50 | Dictionnaire compact, utile si peu d’identifiants sont nécessaires |
| 1 | DICT_5X5_50 | 5 × 5 | 50 | Plus de bits que 4x4, meilleure capacité de distinction |
| 2 | DICT_6X6_50 | 6 × 6 | 50 | Plus robuste pour des usages exigeant une meilleure unicité visuelle |
| 3 | DICT_7X7_50 | 7 × 7 | 50 | Très riche en information, mais plus exigeant en qualité d’image |
| 4 | DICT_ARUCO_ORIGINAL | Variable historique | Variable historique | Dictionnaire ArUco original, utilisé pour compatibilité avec d’anciens marqueurs |
Le code ayant été conçu spécifiquement pour fonctionner sur Raspberry Pi, son comportement sur d’autres plateformes n’a pas été testé de manière rigoureuse.
Équipe Avion Cargo
Département de génie mécanique et génie industriel
Département d'informatique et de génie logiciel
Faculté des sciences et de génie
Université LavalHiver 2026