Phone Controller
ConnectivityPhoneController es un bloque fuente que transforma cualquier teléfono móvil en un joystick inalámbrico con selector independiente de guiñada (yaw). Al arrastrar el bloque al lienzo se genera un código QR de emparejamiento; escanearlo abre en el teléfono una interfaz de control con un joystick táctil y una barra horizontal de guiñada en la parte inferior. El teléfono transmite señales normalizadas de control X/Y/Yaw (−1…+1) a unos 30 Hz hacia la simulación utilizando el canal peer-to-peer WebRTC provisto por el bloque RemoteSensor — sin cables ni instalaciones de software adicionales.
Existen dos modos de control en el teléfono para el panel de mando (el selector de guiñada funciona de idéntica forma en ambos):
- Touch (por defecto): control táctil directo con el pulgar. Al soltar la pantalla vuelve automáticamente al centro.
- Tilt: utiliza los sensores de orientación física del dispositivo (DeviceOrientation). Inclinar hacia los lados gobierna el eje X, mientras que inclinar adelante/atrás acciona el eje Y. La posición de reposo se calibra al habilitar el modo; toque la pantalla en cualquier momento para recalibrar el centro.
La franja de guiñada es un control deslizante horizontal independiente situado bajo el panel — arrastre hacia izquierda o derecha, suelte para volver a 0. Permanece activo tanto en modo táctil como en modo inclinación.
Utilice este bloque para demostraciones dinámicas donde el ratón resulte poco intuitivo: volar un cuadricóptero simulado, dirigir el modelo cinemático de un vehículo o ajustar manualmente la consigna de un lazo de regulación. Sus puertos de salida X/Y comparten nombres con Joystick2D, por lo que es un sustituto directo en cualquier diagrama donde exista un joystick en pantalla — incluyendo la plantilla Fly the Quadcopter (Phone).
Entradas y Salidas
| Direction | ID | Label | Tipo | Status |
|---|---|---|---|---|
| ← Out | x |
X | number | Output |
| ← Out | y |
Y | number | Output |
| ← Out | yaw |
Yaw | number | Output |
Parámetros
| Parámetros | Label | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
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 |
Ejemplos de Uso
Control de Actitud con Joystick de Smartphone
Abra la demostración integrada Phone Joystick — Attitude Demo (menú de ejemplos del bloque). Su pulgar comanda la actitud del dron simulado: X se convierte en consigna de alabeo (roll) e Y en consigna de cabeceo (pitch), ambas procesadas por dinámicas de segundo orden y representadas en un cardán 3D:
PhoneController ──► [X] ──► Gain(30) ──► 2nd Order System ──► Gimbal3D [roll]
──► [Y] ──► Gain(30) ──► 2nd Order System ──► Gimbal3D [pitch]
Escanee el código QR, pulse Grab Control, inicie la simulación — el dron responderá en tiempo real a su pulgar.
Pilotaje inalámbrico de la plantilla completa de cuadricóptero
La plantilla Fly the Quadcopter (Phone) (Menú Ejemplos → Sistemas de Control) enlaza las tres salidas — x/y hacia los lazos PID de alabeo y cabeceo (mediante un bloque Gain, idéntico al factor interno de Joystick2D) y yaw directamente hacia el lazo PID de guiñada — gobernando la totalidad del control de tres ejes, el mezclador de motores y la suspensión cardán 3D sin controles deslizantes adicionales en el lienzo.
Consigna manual para un lazo PID
PhoneController ──► [Y] ──► Gain ──► (setpoint) Subtraction ──► PIDController → plantObservaciones y Buenas Prácticas
- Bloque fuente: Los tres canales son puertos de salida (lateral derecho). X es positivo hacia la derecha, Y es positivo hacia adelante/arriba (desplazar la palanca hacia arriba produce +1), Yaw es positivo hacia la derecha de la franja.
- Flujo constante a 30 Hz: El dispositivo móvil transmite de manera continua —incluso en reposo— para evitar el vaciado del búfer de reproducción y estabilizar la estimación de retardo.
- Zona muerta: Se incluye una pequeña zona muerta (±0.02) en el teléfono para garantizar que al retirar el pulgar el valor sea exactamente 0.
- La simulación espera la conexión: Al igual que ocurre con los bloques de hardware real, el inicio de la simulación se congela hasta que el teléfono esté vinculado y se hayan recibido los paquetes iniciales.
- Requiere WebRTC: Tanto el móvil como el equipo principal requieren acceso a internet para la señalización inicial con PeerJS. Es posible emplear servidores PeerJS propios mediante las claves de
localStoragecompartidas con RemoteSensor (blockwerk_peer_host/blockwerk_peer_port/blockwerk_peer_path/blockwerk_peer_secure). - Un controlador por modelo: Los canales X/Y/Yaw tienen ámbito global (
remote:joy.x/remote:joy.y/remote:joy.z); dos bloques PhoneController recibirían los mismos datos. - Comportamiento desconectado: Los tres puertos retienen el valor
0hasta que el teléfono complete la vinculación e inicie la transmisión.
Bloques Relacionados
- RemoteSensor: Transmite las lecturas del acelerómetro, giroscopio, magnetómetro, barómetro y GPS del móvil en lugar de palancas de mando.
- ExternalInput: Fuente compacta para valores numéricos inyectados manualmente o desde scripts.
- Gimbal3D: Visualizador de actitud 3D — sumidero ideal para las demostraciones de este bloque.