Partager via


Filtrage des données (version précédente)

Pour optimiser le débit des données, votre appareil de capteur doit appliquer des critères de filtre aux événements de mise à jour des données afin qu’ils ne soient déclenchés qu’en cas de besoin. Ce filtrage entraîne une utilisation inférieure du processeur (en raison d’un débit réduit du capteur) et une consommation d’énergie moindre (à la fois pour le capteur et le processeur).

Il existe deux valeurs (ou propriétés) qui prennent en charge les critères de filtre d’un appareil de capteur. Le premier est l’intervalle de rapport actuel (CRI) et le second est la sensibilité aux changements (CS). Ces deux propriétés peuvent être définies par une application de capteur.

L’intervalle de rapport actuel correspond à la période minimale, en millisecondes, entre les mises à jour de données qu’un client souhaite recevoir en cas de modification significative. La sensibilité aux modifications est la valeur (ou pourcentage) utilisée pour spécifier une modification significative.

Une application de station météorologique peut spécifier un intervalle de rapport actuel (CRI) pour un capteur de température de 60 000 (une minute). Le capteur de température nécessite une valeur de sensibilité au changement (par opposition à un pourcentage). Si ce capteur de température retourne des degrés Celsius et que la température de sensibilité au changement était de 2,0, ce capteur particulier ne déclenche l’événement de mise à jour des données que lorsque la température a augmenté ou diminué de 2,0 degrés Celsius au cours de l’intervalle de rapport demandé.

Un capteur de lumière ambiante (ALS) est un exemple de capteur qui nécessiterait que la sensibilité aux changements soit spécifiée sous forme de pourcentage. Par exemple, si la valeur de sensibilité au changement pour l’éclairage était 2.0, ce capteur interpréterait la valeur comme un pourcentage et déclencherait uniquement l’événement mis à jour des données lorsque la valeur LUX a diminué ou augmenté de 2 %.

Le tableau suivant répertorie six capteurs courants, les données associées à chacun d’eux et la sensibilité aux modifications correspondantes.

Capteur Champ de données Modifier la valeur de confidentialité
Capteur de lumière LUX % de variation dans le lux
Accéléromètre Accélération X Accélération G-force
Accélération Y Accélération G-force
Accélération Z Accélération G-force
Gyromètre 3D Angular Speed X vitesse Angular (degrés par seconde)
vitesse Angular Y vitesse Angular (degrés par seconde)
Angular Speed Z vitesse Angular (degrés par seconde)
Compass Cap nord magnétique Degrés
True North Heading Degrés
Inclinometer Lacet Degrés
Inclinaison Degrés
Rouleau Degrés
Orientation de l’appareil Quaternion Mouvement des degrés
Matrice de rotation Mouvement des degrés

Le tableau suivant répertorie les valeurs par défaut recommandées pour l’intervalle de rapport actuel (CRI).

Type de capteur Intervalle de rapport par défaut recommandé
Lumière ambiante 5 000
Accéléromètre 100
Gyromètre 100
Compass 100
Inclinometer 50
Orientation 50

Le tableau suivant répertorie les valeurs par défaut recommandées pour la sensibilité aux modifications (CS).

Type de capteur Sensibilité aux modifications par défaut recommandée
Lumière ambiante 50
Accéléromètre 0,02
Gyromètre 0.50
Compass 0.20
Inclinometer 0.50
Orientation 0.50

Modifier la sensibilité (CS) pour l’inclinomètre et les capteurs d’orientation

La sensibilité au changement pour l’inclinomètre et le capteur d’orientation doit être calculée comme l’angle entre deux quaternions. Exprimé mathématiquement comme suit :

2*cos⁻1(dot product(q1, q2))

Ce calcul garantit la cohérence entre les orientations des appareils.

Intervalle de rapport actuel effectif (CRI) et sensibilité aux changements (CS)

Plusieurs applications peuvent définir à la fois l’intervalle de rapport actuel (CRI) et les propriétés Sensibilité aux changements (CS) pour un capteur donné. Il incombe à votre pilote de déterminer quelle propriété demandée s’applique. Les propriétés définies par le pilote sont appelées effective current Report-Interval (E-CRI) et effective Change-Sensitivity s (E-CS).

Définition de E-CRI et E-CS pour les applications clientes

Chaque fois qu’une application cliente établit une connexion à un capteur, votre pilote doit définir les valeurs E-CRI et E-CS. Ces valeurs sont stockées dans ce que l’on appelle un conteneur client. Le tableau suivant répertorie six méthodes prises en charge par un pilote de capteur et spécifie ce que votre pilote doit faire avec son conteneur client et les propriétés E-CRI et E-CS.

Événement d’intérêt Activités du gestionnaire d’événements
ISensorDriver ::OnClientConnect Ajouter un élément client au conteneur

client Lire les valeurs CRI et CS par défaut si nécessaire, stocker dans le conteneur client
ISensorDriver ::OnClientDisconnect Supprimez le client du conteneur client et définissez E-CRI et E-CS comme il convient en fonction des clients restants
ISensorDriver ::OnClientSubscribeToEvents Mettez à jour le champ « abonné aux événements » (défini sur true) pour le capteur en question. Activez la création de rapports d’événements à partir du capteur.
ISensorDriver ::OnClientUnSubscribeToEvents Mettez à jour le champ « abonné aux événements » ( défini sur false) pour le capteur en question. Si aucun abonné ne reste, désactivez les rapports d’événements de l’appareil.
ISensorDriver ::OnSetProperties Si les propriétés CS ou CRI sont définies, mettez à jour les champs de conteneur client appropriés.
IFileCallbackCleanup ::OnCleanupFile Le client s’est planté ou a cessé de répondre. Le client doit être supprimé du conteneur client.

Le tableau suivant représente le conteneur client d’un accéléromètre 3D avec quatre applications clientes connectées. Deux de ces applications clientes (correspondant aux 2e et 4e lignes) se sont abonnées à des événements.

Handle de fichier client Abonné aux événements CRI, éléments CS (X) CX (Y) CS (Z)
FF80A267 FALSE 50 0,001 0,001 0,001
FF802489 TRUE 70 0,02 0,02 0,02
FF80D345 FALSE 15 NULL NULL NULL
FF803287 TRUE 100 0.005 0.005 0.005

Une fois que le pilote a évalué cet ensemble de clients connectés, il a choisi les valeurs suivantes pour E-CRI et E-CS :

  • E-CRI : 70 ms
  • Valeurs E-CS : (peut se réduire à une valeur unique à l’aide du plus petit seuil)
    • X :0.005
    • Y :0.005
    • Z : 0,005

Notez dans cet exemple que les clients qui n’ont pas d’ensemble de récepteurs d’événements (première et troisième lignes) sont ignorés, car le filtrage des événements ne s’applique pas à ces clients.

Filtrage des événements de mise à jour des données en évaluant les valeurs CRI et CS effectives (E-CRI, E-CS)

Une fois que les valeurs E-CRI et E-CS actuelles ont été déterminées et mises à jour à mesure que les états de connexion des capteurs changent, votre appareil de capteur utilise ces valeurs pour filtrer les événements qui sont déclenchés pour les applications clientes connectées. Ces valeurs sont comparées à la différence entre la ou les valeurs de données « actuelles » et les valeurs de données précédentes. Si les valeurs E-CS ont été dépassées pendant une période égale ou supérieure à l’E-CRI, ce n’est qu’alors qu’un événement de données doit être déclenché. La seule exception est le démarrage de l’appareil de capteur, lorsque la ou les valeurs par défaut sont appliquées afin que les clients puissent recevoir la notification appropriée.

L’illustration suivante montre comment le filtrage du temps des données brutes du capteur est évalué afin de déterminer quand les événements de données doivent être déclenchés.

Illustration des données de capteur filtrées dans le temps.

Dans l’illustration précédente, les données rouges dans la partie inférieure du diagramme représentent les données brutes du capteur. La ligne verte représente les données qui seraient retournées aux clients qui interrogent les données (l’une des nombreuses façons d’implémenter ce comportement) et les valeurs X rouges représentent quand des événements de données sont déclenchés. Les lignes bleues sont les seuils des limites E-CS (+/- E-CS par rapport à la valeur du dernier événement de données).

En implémentant cette logique de filtrage d’événements, le nombre d’événements mis à jour des données peut être considérablement réduit et les applications peuvent toujours être averties lorsque des modifications significatives dans les données du capteur se produisent.

Optimisations du runtime d’appareil pour le filtrage des données

Cette section décrit plusieurs optimisations du runtime que vous devez prendre en compte lorsque vous développez un pilote de capteur.

Interruptions de prise en charge

Votre pilote doit s’appuyer sur les interruptions au lieu d’interroger l’appareil. Cela se traduira par des améliorations des performances et de la gestion de l’alimentation. Ces améliorations sont les suivantes.

  1. Votre appareil peut entrer un état d’alimentation inférieur en fonction de la sensibilité aux modifications et de l’intervalle de rapport actuel.
  2. L’utilisation d’interruptions réduit l’exécution inutile de code dans le pilote et le microprogramme du capteur.
  3. L’utilisation d’interruptions réduit l’activité du bus.

Notes

Si un pilote s’appuie sur des interruptions mais que l’intervalle de rapport actuel et la logique de sensibilité aux changements existent dans le pilote, le pilote reçoit potentiellement un nombre important d’interruptions entre les mises à jour de données. Par conséquent, le pilote peut devoir désactiver (ou masquer) les interruptions jusqu’à l’expiration de l’intervalle de rapport actuel.

Déplacer la prise en charge de la sensibilité aux modifications vers l’appareil

Si le matériel ou le microprogramme de votre capteur prend en charge la détection de seuil, vous devez utiliser cette fonctionnalité pour prendre en charge la sensibilité aux modifications. En déplaçant le support vers l’appareil, puis en répondant à l’interruption correspondante, vous réduisez la surcharge de traitement dans votre pilote.

Déplacer la prise en charge des intervalles de rapport vers les appareils

Si le matériel ou le microprogramme de votre capteur prend en charge la notion d’intervalle de rapport, vous devez utiliser cette fonctionnalité.

Si votre capteur ne prend pas en charge les intervalles de rapports natifs, envisagez de désactiver les interruptions pour un sous-ensemble de l’intervalle de rapport actuel. Ensuite, une fois ce temps écoulé, récupérez les données actuelles de l’appareil.