Plataforma · MSP

Procesado de señal vehicular como grafo YAML.

MSP es el motor de procesado de señal de MOS4. Un grafo de nodos kernel tipados se ejecuta continuamente en el dispositivo a través de 21 dominios vehiculares. Modifique un archivo .msp.yml y envíelo mediante una llamada de servicio — sin recompilar Rust, sin flashear firmware.

Sistema · flujo de datos always-on
Grafo de procesamiento de señal sobre fondo blueprint oscuro — fuentes de acelerómetro y giroscopio a la izquierda alimentan un pipeline encadenado (filtro, FFT, umbral) y tres sumideros (evento, log, publicación MQTT); una rama ámbar pasa por un nodo de inferencia IA/ML
MSP Visualizer — inspector de grafos de señal en vivo con forma de onda, espectrograma y marcador de umbral

Escala

226 grafos a través de 21 dominios vehiculares.

226 grafos pregenerados colisión, batería VE, combustible, GNSS, flota y más
21 dominios vehiculares desde detección de colisiones hasta marítimo off-highway
124 módulos kernel en 9 categorías de procesado de señal
215+ señales entre grafos con nombre API estable en la capa de señal fundamental
<10% CPU en estado estable conjunto de grafos de producción representativo en hardware modem-class
21 dominios vehiculares en el catálogo de grafos MSP
Dominio Grafos de ejemplo
Colisión e impacto detección de choque, disparador FNOL
Batería VE estado de carga, índice de degradación
Combustible tasa de consumo, fusión de nivel de depósito
GNSS y vía segmentación de viajes, clasificación de tipo de vía
Comportamiento del conductor frenada brusca, puntuación en curvas
Vibración índice de desgaste para mantenimiento predictivo
Flota detección de ralentí, contador de horas de marcha
Tensión y alimentación salud de batería, activación por umbral
Ancho de banda CAN medición de carga de bus, decimación
Temperatura gradientes térmicos, confort de cabina
Velocidad y cinemática alertas de exceso de velocidad, sobres de aceleración
Motor y tren de potencia análisis de RPM, estimación de par
Eventos de geocerca generación de señal de entrada a zona
Carga y peso señales de estimación de carga por eje
Entorno humedad, temperatura ambiente
TPMS análisis de tendencia de presión de neumáticos
Diagnósticos señal de presencia de DTC, correlación de fallos
Remolque conexión/desconexión, estado de iluminación
Seguridad cinturón de seguridad, evento de puerta abierta
Marítimo / off-highway horas de motor, señales de depósito

Tres herramientas

Crear. Depurar. Diseñar.

El flujo de desarrollo MSP abarca tres herramientas que cubren el ciclo completo: desde la creación y validación de un grafo sin conexión, hasta la depuración en vivo en un dispositivo conectado, pasando por la edición visual con la paleta de kernels.

Jupyter notebook + harness bench

Cree el grafo en un entorno Jupyter notebook. Reprodúzcalo contra grabaciones de datasets, inspeccione formas de onda y ejecute el harness bench para obtener una puntuación F1 por umbral de detección — más estimaciones de RAM, CPU y latencia — antes de tocar un dispositivo.

Notebook Jupyter MSP — grafo MSP de comportamiento de conductor escrito contra grabaciones de dataset, con celda markdown TL;DR, diagramas Plan A / Plan B y una celda benchmark

Depuración en vivo — msp-visualizer

Una herramienta React/TypeScript que lista los grafos en ejecución, consulta la topología de nodos, muestra los tiempos de benchmark por kernel y transmite muestras de señal en vivo mediante WebSocket. No se necesita ninguna herramienta adicional en un dispositivo de desarrollo.

MSP Visualizer — inspector de grafos de señal en vivo con topología de grafo, tiempos por kernel y forma de onda en vivo

MSP designer

Un lienzo en el navegador con una paleta de kernels. Arrastre y conecte nodos kernel, valide la estructura del grafo contra el esquema JSON en tiempo real y exporte el archivo .msp.yml consumido directamente por el runtime.

Diseñador MSP — lienzo de navegador con nodos kernel (signal_receiver, threshold, ratio, counter, probe, delayed_and, gnss) conectados en un grafo behavior-over-revving, más un panel lateral mostrando validación de esquema JSON del .msp.yml

Envíanos tu grafo de señales — lo cableamos nosotros.

Ciclo de desarrollo

Del notebook al grafo desplegado — un ciclo reproducible.

El estado del arte del desarrollo MSP es un ciclo de cuatro pasos que acorta la distancia entre la creación sin conexión y el comportamiento en el dispositivo.

Paso 1

Crear y validar

Construya el grafo en el entorno Jupyter. Reprodúzcalo contra grabaciones de datasets y revise las formas de onda antes de comprometerse con un archivo YAML.

Paso 2

Puntuación F1 contra dataset de referencia

Ejecute el harness bench contra un dataset etiquetado. Obtenga una puntuación F1 por umbral de detección — reproducible entre ejecuciones y entre ingenieros.

Paso 3

Estimación de RAM / CPU / Latencia

El mismo harness informa el consumo de recursos. La estimación se convierte en el contrato para la build del dispositivo — sin sorpresas después de flashear.

Paso 4

Desplegar con resultados esperados

Envíe el grafo al dispositivo mediante una llamada de servicio. El comportamiento en vivo en el dispositivo coincide con la puntuación F1 y el sobre de recursos validados en los pasos 2 y 3.

Arquitectura de señales

Tres niveles, una API estable.

Una API estable de señales con nombre conecta el Nivel 2 y el Nivel 3. Las entradas de sensor y bus del Nivel 1 alimentan las señales de base del Nivel 2; los grafos de detección del Nivel 3 consumen los nombres, no los flujos brutos. Un nuevo sensor o PID solo se propaga al Nivel 1.

Arquitectura de señales MSP de tres niveles. El Nivel 1 contiene entradas de sensor y bus — Multi Stacks SubscribeData, GNSS, IMU y tramas CAN brutas. El Nivel 1 alimenta el Nivel 2, que contiene la capa de señal fundamental (vehicle.speed, gnss.latitude y otras). El Nivel 2 alimenta el Nivel 3, los 226 grafos de detección en 21 dominios — colisión, frenada brusca, ralentí y otros algoritmos específicos de dominio. El Nivel 3 publica a tres consumidores: el motor de política, el servicio de logs y el broker MQTT para egreso a la nube.

flowchart TB
  T1[Nivel 1 — sensor y bus<br/>Multi Stacks SubscribeData<br/>GNSS · IMU · tramas CAN]
  T2[Nivel 2 — señales de base<br/>vehicle.speed · gnss.latitude<br/>215+ señales con nombre]
  T3[Nivel 3 — grafos de detección<br/>colisión · frenada brusca · ralentí<br/>226 grafos, 21 dominios]
  T1 --> T2 --> T3
  T3 -->|publicar| MEP[mos-event-processor]
  T3 -->|publicar| LG[mos-logs]
  T3 -->|publicar| MQ[broker MQTT]
Los cambios de sensor se propagan solo al Nivel 1. Los autores de grafos del Nivel 3 consumen señales con nombre, no flujos de hardware brutos.

Inyección en runtime

Envíe un grafo sin flashear firmware.

API del servicio MSP
Método Descripción
LoadGraph Enviar un grafo .msp.yml al runtime en ejecución; sin reinicio
EnableGraph Activar un grafo cargado por nombre
DisableGraph Pausar un grafo; el estado se preserva
DropGraph Eliminar un grafo y liberar sus recursos
ListGraphs Enumerar los grafos cargados con el estado del ciclo de vida
GetGraphInfo Devolver la topología y la lista de kernels de un grafo

Dirigir MSP desde un contenedor

LoadGraph desde cualquier cliente MQTT. Sin Rust requerido.

La llamada de servicio MSP es accesible desde un contenedor Python a través del broker MQTT en proceso. Un ingeniero de producto envía un nuevo grafo desde un script Python — el runtime lo valida y lo intercambia en vivo.

Contenedor Python · LoadGraph por MQTT

# dentro de cualquier contenedor Python — sin toolchain de Rust
import paho.mqtt.client as mqtt, pathlib, json

graph_yaml = pathlib.Path("harsh_brake.msp.yml").read_text()

c = mqtt.Client()
c.connect("localhost", 1883)
c.publish(
    "mos/msp/LoadGraph",
    json.dumps({"name": "harsh_brake", "yaml": graph_yaml}),
)

La misma llamada de servicio está disponible desde C, C++, Go, Rust — o desde cualquier lenguaje que hable MQTT. El runtime está a un contenedor de distancia. Explore el SDK para el contrato de servicio completo.

Planificador

Cinco categorías de ciclo de vida para el control de ciclo de trabajo de CPU.

Categorías de ciclo de vida de grafos
Categoría Comportamiento del planificador
always_on Activo desde el arranque; nunca detenido por el planificador
event_spawned Iniciado con un evento con nombre; detenido automáticamente al completarse
confidence_gated Se ejecuta solo cuando la confianza de entrada supera el umbral
condition_gated Activo mientras una clave DB o señal cumple una condición
intermittent Activación periódica con ciclo de trabajo configurable

El planificador activa y detiene automáticamente los grafos según la categoría, manteniendo baja la carga de CPU en reposo sin gestión manual del ciclo de vida en el código de la aplicación.

Observabilidad

Toma de señal en vivo y benchmarks por kernel.

msp-visualizer

Una herramienta React/TypeScript que lista los grafos en ejecución, consulta la topología de nodos, muestra los tiempos de benchmark por kernel y transmite muestras de señal en vivo mediante WebSocket. No se necesita ninguna herramienta adicional en un dispositivo de desarrollo.

Señales con nombre como API entre grafos

Las señales con nombre — vehicle.speed, gnss.latitude y otras — son la API estable entre grafos. Los autores de grafos aguas abajo consumen señales con nombre, no flujos de hardware brutos; los cambios de sensor no se propagan por el catálogo de grafos.

Catálogo de kernels

124 kernels en 9 categorías.

La biblioteca de kernels cubre toda la gama de procesado de señal de telemetría vehicular — desde aritmética básica y cadenas de filtros hasta geometría GNSS, detección de eventos y gestión de alimentación.

Math/arithmetic

18

Operadores escalares y acumuladores en el dominio temporal.

  • Valor absoluto
  • Acumulador
  • Derivada
  • Integrador
  • Mediana
  • · y 13 más

Filters/DSP

23

Filtros IIR/FIR, wavelets, remuestreadores, histéresis.

  • Filtro Chebyshev tipo II
  • Convolución
  • Eliminador de offset DC
  • Submuestreador
  • Histéresis
  • · y 18 más

Event detection

9

Primitivas de umbral y gating para eventos discretos.

  • Debounce asimétrico
  • Puerta de eventos
  • Detector de picos
  • Estabilidad en banda
  • Umbral
  • · y 4 más

Vehicle/sensor

10

GNSS, IMU, OBD y otras interfaces del lado del sensor.

  • Fuente GNSS
  • Desplazamiento GNSS
  • Distancia GNSS
  • Estimador de gravedad
  • Flujo IMU
  • · y 5 más

Codec/IO

19

Compresión, serialización, CSV y codificadores de trama.

  • Compresión bzip2
  • Ensamblado de tramas CAN
  • Compresión de tramas CAN
  • Parser CSV
  • Escritor CSV
  • · y 14 más

Time/control

10

Bases de tiempo, planificadores, máquinas de estados.

  • Fuente de reloj de pared
  • Cortador de ventana temporal
  • Lectura/escritura de BD
  • Tick periódico
  • Generador de señal
  • · y 5 más

Geometry/algebra

4

Rotación 3D, atan2, constructores de matrices.

  • atan2
  • Constructor de matrices
  • Rotación 3D
  • Transformación de rotación

Graph plumbing

26

Pub/sub entre grafos, contadores, sondas.

  • Contador
  • Escritor BD
  • Descartar
  • Mezclar flujos
  • Sonda
  • · y 21 más

Energy/power

5

Ratios de energía, clasificadores de potencia, integradores persistentes.

  • Perfil de distancia
  • Ratio de energía
  • Integrador persistente
  • Clasificador de potencia
  • Publicador de eventos de potencia

¿Necesitas un módulo de kernel que no está en el catálogo? Munic añade nuevos módulos por programa — habla con ingeniería.

En contexto

MSP en la cadena de señal MOS4.

MSP se sitúa entre el bus vehicular y la nube. Multi Stacks entrega tramas brutas; MSP las transforma en señales con nombre; el procesador de eventos y el broker MQTT las llevan a la nube.

Plataforma no-code

MSP es uno de los motores no-code de MOS4. Explore la superficie no-code completa junto al procesador de eventos y la capa de configuración de flota.

Visión general de la plataforma

Multi Stacks — entrada de Nivel 1

Multi Stacks decodifica tramas CAN brutas y PIDs OBD y los publica como las entradas de Nivel 1 a las que se suscriben los grafos MSP.

Multi Stacks

OBDStacks — fuente de señal OBD

OBDStacks alimenta el flujo de PIDs OBD en las señales de Nivel 1 de MSP a través de los dominios de diagnósticos y tren de potencia.

OBDStacks

SDK — envíe grafos mediante programación

El SDK expone el contrato de servicio MSP completo. Envíe, active y desactive grafos desde cualquier contenedor o integración en la nube.

Referencia del SDK

Traiga la señal que quiere extraer.

Muéstrenos el dominio vehicular y el algoritmo; crearemos el grafo con usted en un dispositivo objetivo de su elección.

¿Construyendo sobre MOS4?

Una respuesta del equipo de ingeniería, ~24 h. Sin presentación, sin NDA.

Hablar con ingeniería