Aller au contenu
Table des matières

Pan-Tilt-Controller : Du clavier aux commandes série des moteurs

Ce contrôleur pan-tilt archivé relie une interface desktop à une unité de positionnement série. L’implémentation combine une boucle Qt et des commandes pyserial, avec les positions demandées conservées dans des variables globales.

Matériel et infographie Archivé
  • Mis à jour
  • 2
  • Python · 100%
Composants documentés
2Explorer les modules
Documents source
1Lire les instructions
Langages du dépôtPython 100%1

Parts calculées à partir des octets GitHub Linguist.

Python100%
100%9 538 octets
Langage%Octets
Python100%9 538

1. Aperçu

1.1. Pourquoi il existe

Contrôleur série et démon de mouvement pour unité robotique pan-tilt de précision PTU-46.

1.2. Cas d’usage

Positionnement robotique de caméras pour la vision par ordinateur.

2. Cas d’utilisation

Outils Python 2 (interface et ligne de commande) qui pilotent une tourelle PTU-46-17.5 par port série.

Diagramme de cas d’utilisation de Pan-Tilt-Controller : Initialiser au démarrage; Aller à une position; Déplacer par flèches; Revenir à l’origine; Envoyer des commandes brutesPan-Tilt-ControllerInitialiser au démarrageAller à une positionDéplacer par flèchesRevenir à l’origineEnvoyer des commandes brutesOpérateur de labo«système»Tourelle PTU-46-17.5
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Initialiser au démarrage
Tourelle PTU-46-17.5

Au lancement, pantiltcontroller.py ouvre COM3 à 9600 bauds et envoie les commandes de vitesse, d’accélération, de remise à zéro, de position d’origine et de limites (pxu1500, pnu-1000, tnu-850, txu585).

Aller à une position
Opérateur de laboTourelle PTU-46-17.5

La fenêtre PyQt5 de pantiltcontroller.py a des champs Pan et Tilt ; OK envoie pp<valeur> et tp<valeur> et affiche la réponse de la tourelle dans un journal.

Déplacer par flèches
Opérateur de laboTourelle PTU-46-17.5

Le menu Control (Ctrl+O) ouvre une fenêtre dont les boutons fléchés, comme les flèches du clavier, déplacent le pan ou le tilt de 5 positions par appui.

Revenir à l’origine
Opérateur de laboTourelle PTU-46-17.5

Le bouton Reset envoie pp0 et tp0 et remet les positions mémorisées à zéro.

Envoyer des commandes brutes
Opérateur de laboTourelle PTU-46-17.5

PTC-command.py est une invite qui transmet chaque ligne tapée (par exemple r, pnu 1000, pp0) à la tourelle et affiche la réponse jusqu’à la commande exit.

2.1. Scénario : Orienter la tourelle vers une cible

  1. Brancher la PTU-46-17.5 sur COM3 (port codé en dur) d’un PC Windows avec Python 2.7, pyserial, PyQt5 et pywin32.
  2. Lancer python pantiltcontroller.py ; le script fixe les limites et ramène la tourelle à 0,0.
  3. Saisir 500 dans Pan et -200 dans Tilt, puis cliquer sur OK.
  4. Ouvrir Control, Control et ajuster avec les flèches par pas de 5.
  5. Cliquer sur Reset pour ramener la tourelle à l’origine.

Fichiers consultésREADME.mdpantiltcontroller.pyPTC-command.pyold/PTC.pyold/PTC.kv

3. Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

4. Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

4.1. Requirement libary

README.md

-Python 2.7 -Pyserial -Kivy(GUI)
Lire les instructions complètes ↗
Documentation source

1 documents lus parmi 1 candidats.

5. Fonctions et composants 2

Événements d’interface
pantiltcontroller.py utilise PyQt5 et installe un filtre de touches. Les flèches et boutons modifient une position, puis construisent une commande pp ou tp. Ce code diffère de l’ancien framework décrit dans le README.
Initialisation du matériel
Le module ouvre COM3 à 9600 bauds et écrit des commandes dès son chargement. L’interface dépend donc immédiatement du matériel, avant le choix d’un port ou la confirmation d’un mouvement.

6. Architecture

Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de Pan-Tilt-Controller
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Touche ou bouton Qt"]
  n1["Position demandée"]
  n2["Commande série"]
  n3["Connexion pyserial"]
  n4["Matériel pan-tilt"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
Version texte du diagramme
  • Touche ou bouton Qt → Position demandée
  • Position demandée → Commande série
  • Commande série → Connexion pyserial
  • Connexion pyserial → Matériel pan-tilt
Suivre un parcours dans le code

Suivez une flèche depuis positionPan ou positionTilt jusqu’à ser.write. La variable représente la cible commandée, pas une mesure indépendante de la position physique.

7. Dossier technique

Établi à partir du code au commit b565efd (4 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.

7.1. Couches et modules

Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.

Mermaid Vue en couches
flowchart TB
  subgraph L_core["Source principale"]
    direction TB
    core_0["(root)<br/>2 fichiers"]
    core_1["old<br/>1 fichier"]
  end
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
(root)Source principale23.py
oldSource principale12.py

7.2. Modèle C4

Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.

UML 1 · Contexte du système
1 · Contexte du système

La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "Pan-Tilt-Controller", "Ce contrôleur pan-tilt archivé relie une interface desktop à une unit…")
@enduml

Niveau 2: les sources disponibles ne permettent pas de tracer cette vue.

UML 3 · Composants et couches
3 · Composants et couches

Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "Pan-Tilt-Controller") {
Boundary(L0, "Source principale", "layer") {
Component(M0_0, "(root)", "Python", "2 fichiers")
Component(M0_1, "old", "Python", "1 fichiers")
}
}
@enduml
UML 4 · Code
4 · Code

Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "Pan-Tilt-Controller" {
package "pantiltcontroller.py" as F0 {
class "DialogControl" as T0_0 {
  eventFilter()
  Control()
  buttonClick()
}
class "FormWidget" as T0_1 {
  UI()
  textBox()
  buttonClick()
}
}
}
@enduml

7.3. Services

7.4. Logique métier

Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.

DialogControl Source principale, 3 méthodes
eventFilter, Control, buttonClick
FormWidget Source principale, 3 méthodes
UI, textBox, buttonClick

7.5. Pipeline CI/CD

Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.

7.6. Déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  local["Poste local"]
  repo -->|"cloner et lancer"| local

Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.

Les sources disponibles ne documentent pas les autres sections.

8. Types et structure des fichiers

5 types déclarés, dont 5 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class t8cae8612b927["DialogControl"] {
  __init__()
  eventFilter()
  Control()
  buttonClick()
}
class tdb265aef05cf["MenuFile"] {
  __init__()
  Menu()
}
class t087f3f225d99["FormWidget"] {
  __init__()
  UI()
  textBox()
  buttonClick()
}
class t3ad2e1e58327["Controller"] {
  do_move()
  do_reset()
}
class t3c914b206877["PTC"] {
  build()
}
class b909aa1bfe7bf["QDialog"] {
  <<unresolved_base>>
}
b909aa1bfe7bf <|-- t8cae8612b927
class b368405a93f17["QWidget"] {
  <<unresolved_base>>
}
b368405a93f17 <|-- t8cae8612b927
class bc4c59610cef7["QMainWindow"] {
  <<unresolved_base>>
}
bc4c59610cef7 <|-- tdb265aef05cf
t8cae8612b927 <|-- tdb265aef05cf
b368405a93f17 <|-- t087f3f225d99
class bc742617f043e["Screen"] {
  <<unresolved_base>>
}
bc742617f043e <|-- t3ad2e1e58327
class b21d28968c3d5["App"] {
  <<unresolved_base>>
}
b21d28968c3d5 <|-- t3c914b206877

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

9. Référence

4 / 4 fichiers admissibles lus (5 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

11. Fichiers à lire 3

12. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

Port publié

Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.

Interface en ligne de commande

Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.

Compilation

Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.

Micrologiciel

Un logiciel exécuté sur un appareil ou microcontrôleur pour contrôler son matériel et ses communications.

13. Références

  1. antoinebou12. (2026, 5 novembre). Pan-Tilt-Controller. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). Pan-Tilt-Controller: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). pantiltcontroller.py. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). PTC-command.py. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). README.md. [Source file] github.com.
  6. Boucher, A. (2026, 23 octobre). Pan-Tilt-Controller : Du clavier aux commandes série des moteurs. [Project article] antoineboucher.info.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.