BlockWerk Documentation
🕹️

Phone Controller

Connectivity

PhoneController est un bloc source qui transforme n'importe quel smartphone en joystick sans fil assorti d'une commande de lacet (yaw) indépendante. Lorsque le bloc est déposé sur le canevas, il affiche un code QR d'appairage ; en le scannant, le téléphone ouvre une page de contrôle présentant un pavé tactile simulant un joystick et une bandelette de lacet horizontale en dessous. Le téléphone diffuse en continu des valeurs normalisées de commande X/Y/Yaw (−1…+1) à environ 30 Hz vers la simulation au moyen du canal poste à poste (peer-to-peer) WebRTC utilisé par le bloc RemoteSensor — sans fil ni installation logicielle.

Deux modes de pilotage sont disponibles pour le pavé tactile (la commande de lacet fonctionne de manière identique dans les deux cas) :

  • Touch (par défaut) : pilotage au pouce sur l'écran tactile. Le relâchement ramène la manette au centre.
  • Tilt : utilise les capteurs d'orientation du téléphone (DeviceOrientation). L'inclinaison gauche/droite pilote X, l'inclinaison avant/arrière pilote Y. L'assiette neutre est calibrée à l'activation du mode ; toucher l'écran permet de recentrer à tout instant.

Le bandeau de lacet est une commande horizontale indépendante située sous le pavé — glissez à gauche ou à droite, relâchez pour revenir à 0. Il reste actif quel que soit le mode sélectionné (tactile ou inclinaison).

Utilisez ce bloc pour des démonstrations interactives lorsqu'une souris manque d'intuitivité : piloter un drone simulé, braquer un modèle de véhicule ou modifier manuellement la consigne d'une boucle d'asservissement. Ses sorties X/Y portent les mêmes identifiants que ceux de Joystick2D, ce qui permet de s'y substituer sans fil dans n'importe quel schéma — y compris le modèle Fly the Quadcopter (Phone).

Simuler dans BlockWerk

Bac à sable interactif directement dans votre navigateur — aucune installation, moteur WebAssembly.

Simuler dans BlockWerk →

Entrées & Sorties

Direction ID Label Type Status
← Out x X number Output
← Out y Y number Output
← Out yaw Yaw number Output

Paramètres

Paramètres Label Type Défaut Description
playoutDelay Playout Delay (ms) number 80 Network jitter buffer. Lower = more responsive control, higher = smoother signal on flaky connections.
interpolation Interpolation select linear How to reconstruct the control signal between received joystick packets.
outputLabels Output Labels vector x,y,yaw

Exemples d'Utilisation

Manette Smartphone — Démonstration d'attitude

Chargez la démonstration intégrée Phone Joystick — Attitude Demo (menu exemples du bloc). Votre pouce dicte l'attitude d'un quadricoptère simulé : X commande la consigne de roulis, Y la consigne de tangage, chacune mise en forme par une dynamique de second ordre et visualisée sur un cardan 3D :

PhoneController ──► [X] ──► Gain(30) ──► 2nd Order System ──► Gimbal3D [roll]
                ──► [Y] ──► Gain(30) ──► 2nd Order System ──► Gimbal3D [pitch]

Scannez le QR code, touchez Grab Control, lancez la simulation — le drone obéit à vos mouvements de pouce.

Pilotage sans fil du modèle complet de quadricoptère

Le modèle Fly the Quadcopter (Phone) (Menu Exemples → Systèmes d'asservissement) câble l'ensemble des trois ports — x/y vers les boucles PID de roulis/tangage (via un Gain, analogue au gain interne de Joystick2D) et yaw directement vers la boucle PID de lacet — pilotant ainsi le contrôleur trois axes complet, le mélangeur moteur et la suspension 3D. Aucun curseur supplémentaire n'est nécessaire sur le canevas.

Consigne manuelle pour une boucle PID

PhoneController ──► [Y] ──► Gain ──► (setpoint) Subtraction ──► PIDController → plant

Remarques & Bonnes Pratiques

  • Bloc source : Les trois canaux constituent des ports de sortie (côté droit). X est orienté positivement vers la droite, Y positivement vers l'avant/haut (+1 en poussant vers le haut), Yaw positivement vers la droite du bandeau.
  • Flux continu à 30 Hz : Le smartphone émet continuellement — y compris en position neutre — pour garder le tampon actif et stabiliser l'estimation de latence.
  • Zone morte : Une zone morte modérée (±0.02) est appliquée sur le téléphone afin qu'un pouce au repos produise rigoureusement 0.
  • La simulation attend l'appairage : Comme pour tous les blocs matériels temps réel, le lancement de la simulation est différé jusqu'à ce que le téléphone soit connecté et que les premiers paquets parviennent au récepteur.
  • WebRTC requis : Le smartphone et le poste de travail doivent disposer d'un accès internet pour la phase de signalisation PeerJS. Les serveurs PeerJS auto-hébergés sont gérés au moyen des clés localStorage identiques à celles de RemoteSensor (blockwerk_peer_host / blockwerk_peer_port / blockwerk_peer_path / blockwerk_peer_secure).
  • Un seul contrôleur par schéma : Les canaux X/Y/Yaw sont globaux (remote:joy.x / remote:joy.y / remote:joy.z) ; deux blocs PhoneController écouteraient les mêmes données.
  • Sorties hors connexion : Les trois ports restent figés à 0 tant que le téléphone n'est pas connecté et n'émet pas.

Composants Associés

  • RemoteSensor : Diffuse les mesures de l'accéléromètre, du gyroscope, du magnétomètre, du baromètre et du GPS du téléphone au lieu d'une commande manuelle.
  • ExternalInput : Source légère pour des valeurs numériques injectées manuellement ou par script.
  • Gimbal3D : Visualisation d'attitude 3D — le récepteur idéal pour les démonstrations de ce bloc.