Panel de Control
Interfaz maestra de monitoreo — Telemetría en tiempo real
Es la interfaz maestra del sistema destinada al monitoreo del cuatricóptero en la mesa de trabajo (bench) o de manera enlazada mediante MAVLink/Wi-Fi.
Funciones y capacidades
- Attitude Indicator (Horizonte Artificial): Proyecta los giros de
Roll,PitchyYaw. La aplicación sondea continuamente el FC utilizando el payloadMSP_ATTITUDE. Las perturbaciones espaciales en la interfaz revelan fallas inerciales del MPU6000 o giroscopio equivalente. - Monitor de Batería y Consumo: Los datos en tiempo real de amperaje y celdas son obtenidos vía
MSP_ANALOG. Funciona como alerta temprana si la placa PDB no está entregando voltaje estable.
Chequeo Pre-Arm
Validación de seguridad antes del despegue
Bloque que define si el microcontrolador autorizará a los ESCs a iniciar la secuencia de revoluciones. El dron no se armará si algún flag está en rojo.
Bloqueos de hardware comunes (Flags)
| Flag | Significado | Cómo corregirlo |
|---|---|---|
CLI_ACTIVE |
FC está en modo línea de comandos. | Cierra la pestaña CLI, desconéctate o escribe exit. |
NOPREARM |
Falta validación de despegue seguro. | Verificar el switch de "Pre-Arm" en tu radio de control principal. |
CALIBRATING |
Los giroscopios siguen calibrándose. | Mantén la aeronave plana e inmóvil. Haz clic en Calibrate ACC e intenta nuevamente. |
Controles de acción
Los botones Calibrate ACC (Acelerómetro) y Calibrate MAG (Magnetómetro) mandan pulsos MSP_ACC_CALIBRATION a la matriz. Es crucial realizar la calibración en una superficie 100% nivelada; este valor impacta en el cálculo del PID Angle (vuelo estabilizado).
Prueba de Motores
Control DSHOT — Validación de rotaciones y Motor Mapping
Este entorno habilita enviar interrupciones PWM explícitas a cada motor del dron para testear rotaciones, estado de los rodamientos y orden de motores (Motor Mapping).
Funcionamiento técnico
El botón de aceptación deshabilita la máscara de seguridad del protocolo. Al arrastrar el control de cualquier motor individual, el sistema envía un MSP_SET_MOTOR empaquetado en 16-bits para ajustar la aceleración en nanosegundos (PWM) u órdenes digitales vía protocolo DShot.
Reverso de motor: Puedes hacer que un motor rote hacia el lado contrario sin desoldar los cables del ESC. Hace uso de la reversibilidad del firmware BLHeli/Bluejay.
Configuración Principal
Detección y análisis del firmware base del controlador de vuelo
Detecta y detalla la versión base del microcontrolador conectado. Muestra esquemas vitales del Target utilizado y la variante (INAV o BTFL). Dependiendo de estos esquemas, las siguientes ventanas cambiarán para evitar inyectar comandos inestables (INAV utiliza un mapa PID indexado radicalmente distinto a Betaflight).
MSP_API_VERSION, MSP_FC_VARIANT y MSP_FC_VERSION en la conexión inicial. La instanciación del perfil de firmware es completamente transparente para el usuario.
Asignación de Puertos (UARTs)
Enrutamiento de periféricos — STM32 F4/F7/H7
Módulo de configuración enrutada. Los procesadores STM32F4/F7/H7 cuentan con puertos físicos (Transmisor/Receptor o TX/RX).
Periféricos a configurar
| Tipo | Ejemplo físico | Baud Rate requerido |
|---|---|---|
Serial RX |
Receptor ELRS, Crossfire o SBUS | 115200 a 400000+ |
GPS / Sensor |
Módulo GPS (Beitian, Matek) | 57600 o 115200 |
VTX / SmartAudio |
TBS Unify, Rush Tank (analógico) | Definido por IRC Tramp |
MSP_SET_SERIAL_CONFIG que requiere reinicio de placa (Reboot) para aplicar.
Editor de OSD Visual
Drag-and-drop para el diseño del On-Screen Display FPV
Utilidad de drag-and-drop para diseñar la distribución de la interfaz On-Screen Display superpuesta al feed de vídeo (cámara FPV).
Cómo incidir en los valores
El canvas simula exactamente la matriz de vídeo analógica estándar MAX7456 o digital (Canvas Mode para Walksnail/DJI). La cuadrícula está mapeada por coordenadas X,Y.
Añade o manipula items como Voltaje de Batería, Timer de Vuelo o Horizonte Artificial. Al guardar, Volkov calcula los offsets matemáticos y los inyecta a través de una serie de terminales set osd_vbat_pos = X... en la CLI de manera completamente silenciosa.
Afinación de PIDs
Controladores Proporcional, Integral y Derivativo — Dinámica de vuelo
El corazón de la dinámica de vuelo de un multirrotor. Manipula la reacción de los controladores proporcionales en el código del drone a los estímulos externos.
¿Qué significa cada modificador?
- P (Proporcional): Fuerza bruta correctiva. Cuánto intentará el dron acercarse a la inclinación que tu stick le pide. Demasiado alto: el dron vibra rápidamente o enmudece frenéticamente (oscilación de alta frecuencia).
- I (Integral): Memoria matemática. Corrige los errores acumulados a lo largo del tiempo — ráfagas de viento, desequilibrio de gravedad. Muy bajo: el drone arrastra (drift) su posición con inercia.
- D (Derivada): Amortiguador del movimiento predictivo. Adivina a dónde va la inercia y aplica frenos suaves para evitar "bounce backs" al soltar el stick. ¡Muy alto provoca que los motores se prendan fuego por temperatura!
Afinación en Tiempo Real
Real-Time Tuning — Cambios en vuelo sin flashear EEPROM
Módulo avanzado y experimental. Facilita cambiar los valores P-I-D por aire sin necesidad de tocar la interfaz pesada y sin flashear a EEPROM (memoria estática).
Planificador de Misión
Exclusivo INAV — Vuelo autónomo GPS/Glonass
Genera perfiles de vuelo totalmente autónomos donde el multirrotor utiliza un receptor Satelital GPS/Glonass y sensores barométricos para rutear el camino sin asistencia del piloto.
Interacción funcional
- Generación: Usando la cartografía satelital interactiva (Leaflet.js + OpenStreetMap), se hace Clic-Derecho para insertar coordenadas exactas (Latitud/Longitud). Modifica gráficamente su posición haciendo Drag & Drop en el punto.
- Atributos de puntos estratégicos: El menú bajo el mapa permite seleccionar si la acción enviada representará ir al punto (
WAYPOINT), quedarse suspendido (HOLD_TIME) o retornar a casa (RTH). - Exportación de coordenadas: Al finalizar un mapeo rural o civil, estas misiones se escriben en bloques limitados al buffer EEPROM de INAV. El multi-rotor la ejecutará bajo switch (Modo AUTO-NAV).
Terminal CLI
Acceso bruto al núcleo del microprocesador — Command Line Interface
Acceso bruto e irrestricto al núcleo y terminal madre del microprocesador. Al abrir la consola, Volkov interrumpe el parser binario de MSP dictando mediante la secuencia # entrar en un volcado sincrónico de strings.
Aquí el ingeniero/piloto puede pedir listados de memoria avanzados tipeando comandos como tasks para ver CPU Load, interactuar mediante diff all o corregir un giro de motor aplicando filtros específicos que no constan en la interfaz gráfica principal.
save para grabar a FLASH. Sin este paso, los cambios se pierden al reiniciar la placa.
Instalador de Firmware
Flasher con sistema Anti-Brick — Protocolo DFU
Módulo crítico enfocado a borrar y escribir un Sistema Operativo completo en el microprocesador STM usando protocolo DFU (Device Firmware Upgrade).
Protección sistémica analítica (Anti-Brick)
Volkov cuenta con un validador que requiere leer dinámicamente desde el sub-registro REST API de Github el Target oficial (Ejemplo: SPEEDYBEEF405). El Dropdown restringe forzosamente que no instales un objetivo equivocado.
Visor Blackbox
Inspector de logs BBL — Análisis forense de vuelo
El vuelo en drones deja un rastro inmensurable de métricas matemáticas en bruto (G-Forces de impacto, resonancias y ruido eléctrico interno) habitualmente grabados a una memoria SD o FLASH de 16MB nativa, conocidos como Logs BBL.
A diferencia de sistemas antiguos, Volkov hace de escudo entre binarios crudos sin resolución matemática, exigiendo la dependencia ejecutada del ecosistema blackbox_decode externo nativo oficial (C++), impidiendo que se representen gráficamente anomalías espúreas o heurísticas simuladas y falsas.
Diff y Backup
Gestor de auditoría diferencial — Resguardo y clonación de perfiles
Sistema que extrae vía interfaz textual serial o USB un resguardo seguro. La herramienta corre tras bastidores diff all e intercepta las diferencias generadas por el ingeniero y su hardware respecto al sistema por defecto del fabricante.
Genera archivos compactos que permiten reproducir perfiles enteros o "clonar" la identidad programática de un dron y calcarla en otra flota secundaria, sin escribir sobre configuraciones ajenas inalteradas.
Editor LUA y Transferencia
IDE con sintaxis OpenTX/EdgeTX — Transferencia V-FAT al radiocontrol
Entorno IDE con resaltado de sintaxis enfocado a scripts asincrónicos LUA destinados a controles de mando de Radiocomando (Mandos como Radiomaster Boxer o TX16S).
Mecanismo de subida remoto (V-FAT Upload)
Cuando finalizas una edición compleja (por ejemplo un script que lea la telemetría CRSF del receptor crossfire de tu pantalla), Volkov fragmentará todo el texto en bloques asíncronos (Chunked Payload Structs) y mediante el comando MSP_SDCARD_WRITE enviará paquete a paquete la lectura a través de la interfaz del drone para guardarlos crudos a la tarjeta SD en su directorio estipulado (/SCRIPTS/TELEMETRY/).
Marketplace de Plugins
Ecosistema de módulos escalables — Comunidad de desarrolladores
Ecosistema de módulos escalables y auto-descargables alojados en nuestros servidores asíncronos que amplían dramáticamente las capacidades del control de tierra.
- Estructura viva: Los plugins se extraen on-demand de manera centralizada desde
plugins.volkov.uyprocesando sus especificaciones estables o metas del repositorio local. - Sistema de inyección: El botón Load Local Plugin... permite instalar ficheros en código nativo (Python
*.py) que se alojan en el directorio interno del software (src/plugins/community/) y se adhieren a la instancia general del Volkov Plugin Manager.
Guía de Desarrollo de Plugins
API oficial para desarrolladores — Arquitectura, señales y publicación
Bienvenido a la documentación oficial para desarrolladores. El sistema de plugins de Volkov te permite interceptar telemetría, manipular comandos Serial/MSP y agregar interfaces gráficas sin modificar el código base del configurador.
1. Arquitectura y estructura mínima
Los plugins locales se alojan en la ruta: src/plugins/community/<nombre_del_plugin>.py
Volkov utiliza una arquitectura de hot-loading parcial a través del PluginManager. En el inicio, la aplicación escanea la ruta e inicializa las clases definidas en el archivo.
class MiCustomPlugin:
def __init__(self, controller, translator):
# El manager inyecta el FlightController y el Translator
self._controller = controller
self._translator = translator
def get_name(self) -> str:
"""Devuelve el nombre humano del plugin para la interfaz."""
return "Mi Custom Plugin"
# --- Opcionales ---
def get_ui_widget(self):
"""Retorna un QWidget de PySide6 para empotrarse en una Tab."""
return None
def get_msp_handlers(self) -> dict:
"""Retorna un dict mapeando un ID de comando MSP a un callback."""
return {}
2. API disponible
El objeto controller (FlightController): Tu principal punto de entrada para hablar con el dron.
controller.is_connected() -> bool: Comprueba si hay conexión activa.controller.send_msp_command(id, payload): Permite enviar comandos binarios arbitrarios.controller.telemetry_updatedyconnection_changed: Señales Qt a las que suscribirse.
El objeto translator: Soporte multi-idioma mediante diccionarios i18n incrustados.
Definición de interfaz visual (get_ui_widget)
def get_ui_widget(self):
from PySide6.QtWidgets import QWidget, QVBoxLayout, QPushButton
widget = QWidget()
layout = QVBoxLayout(widget)
btn = QPushButton("¡Haz algo!")
btn.clicked.connect(self._mi_accion)
layout.addWidget(btn)
return widget
Suscripción a mensajes MSP (get_msp_handlers)
def get_msp_handlers(self) -> dict:
return {
108: self._on_attitude_received # MSP_ATTITUDE
}
def _on_attitude_received(self, data: dict):
print(f"Alabeo actual: {data.get('pitch')}")
3. Ejemplo funcional: Battery Logger
Plugin que graba pasivamente los datos telemétricos y los vuelca en un CSV al finalizar la sesión.
from datetime import datetime
class BatteryLoggerPlugin:
def __init__(self, controller, translator):
self.controller = controller
self.last_voltage = 0.0
if self.controller:
self.controller.telemetry_updated.connect(self._on_telem)
self.controller.connection_changed.connect(self._on_conn)
def get_name(self) -> str:
return "CSV Battery Logger"
def _on_telem(self, data: dict):
if "voltage" in data:
self.last_voltage = data["voltage"]
def _on_conn(self, is_connected: bool):
if not is_connected and self.last_voltage > 0:
with open("battery_log.csv", "a") as f:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
f.write(f"{now},{self.last_voltage}\n")
self.last_voltage = 0.0
4. Proceso de publicación en catálogo
- Hostea tu plugin: Sube tu archivo a Github, Gitlab o Gist. Obtén la URL terminada en
.pyen bruto (raw). - Haz un PR al catálogo JSON: Dirígete al repositorio
volkov-pluginse integra tu objeto encatalog.jsondeclarando la variabledownload_urldinámica hacia tu archivo.
{
"name": "Mi Custom Plugin",
"author": "Tu Nombre / Github",
"version": "1.0.0",
"description": "Descripción breve de lo que hace el plugin.",
"tags": ["telemetry", "gps"],
"stable": true,
"license": "MIT",
"installed": false,
"download_url": "https://raw.githubusercontent.com/tu-usuario/mi-plugin/main/plugin.py"
}
serial_reader global. Todo código que emita actualizaciones a la UI en QObjects debe enviarse primero a QMetaObject.invokeMethod si ocurre fuera del main GUI thread.