AR022 – AccelRectification : redressement des accélérations véhicule
1. Contexte
Cet artefact part d’un besoin très concret dans tout pipeline télématique :
Comment passer d’accélérations IMU brutes, exprimées dans le repère capteur, à des accélérations « redressées » dans un repère véhicule / route, exploitables pour l’analyse de conduite et la validation de modèles ?
Trois briques se rencontrent ici :
- RS3 : génération de trajectoires et de signaux inertiels (accel/gyro) simulés à 10 Hz (voire plus) avec géométrie de route, conditions, événements.
- Chaîne de calibration IMU (Tedaldi 2014) : estimation des biais, échelles, non-orthogonalités sans banc de calibration, à partir de poses statiques.
- Telemachus : format pivot pour stocker synchroniquement trajectoire, orientation, IMU et événements dans un seul schéma cohérent.
AR022 « AccelRectification » a pour objectif de cristalliser ce pipeline sous la forme d’un artefact reproductible, réutilisable à la fois :
- pour les expériences RS3 (simu pure ou simu + données réelles),
- pour les papiers P002/P004 (fusion IMU/GNSS, MMKF),
- pour la compétence V001 (modélisation inertielle & calibration).
2. Objectifs de l’artefact
-
Définir clairement les repères utilisés :
- repère capteur (IMU),
- repère véhicule (longitudinal, latéral, vertical),
- repère navigation / monde (NED ou ENU),
- repère route (tangent, normal, vertical route).
-
Proposer un pipeline générique de redressement des accélérations :
- calibration IMU (biais, gains, non-orthogonalité),
- estimation de l’attitude (gyro + éventuellement GNSS / carte),
- projection des accélérations dans le repère navigation,
- suppression de la gravité,
- projection finale dans le repère véhicule / route.
-
Décliner ce pipeline en plusieurs modes de complexité :
- Mode A : IMU seule (gyro + accel) avec filtre complémentaire ou EKF inertiel simple.
- Mode B : IMU + GNSS (cap, vitesse, inclinaison route) via RS3/Telemachus.
- Mode C : projection sur référence route (RoadGeometry / RoadGenome) pour séparer effets route / conduite.
-
Fournir un artefact exécutable (notebook + fonctions Python) permettant :
- de charger un trajet RS3/Telemachus,
- d’appliquer le pipeline,
- de visualiser les composantes longitudinales / latérales / verticales,
- de comparer « brut vs redressé » sur quelques scénarios type (freinage, virage, dos d’âne, etc.).
3. Inputs & outputs visés
3.1. Inputs
-
Un fichier Telemachus ou RS3 enrichi contenant :
- trajectoire GNSS (lat, lon, alt),
- orientation véhicule (yaw, pitch, roll) simulée ou estimée,
- signaux IMU (accel tri-axes, gyro tri-axes),
- éventuellement événements (freinage fort, virage serré, nid-de-poule…),
- méta-données capteur (matrice de calibration IMU issue de Tedaldi 2014).
-
Pour les expérimentations réelles :
- traces brutes capteur (smartphone, boîtier télématique),
- trajectoire map-matched (Newson/Hunter/Hansson),
- profil de route (courbure, pente) issu de RoadGeometry / RoadGenome.
3.2. Outputs
-
Séries temporelles d’accélérations redressées dans différents repères :
- (a_\text{veh,long}), (a_\text{veh,lat}), (a_\text{veh,vert}),
- accélérations dans le repère route (tangent, normal, vertical),
- éventuellement séparation « dynamique conduite » vs « dynamique route ».
-
Visualisations types :
- comparatif accel brut / redressé,
- signatures typiques (freinage, virage, changement de voie, dos d’âne),
- histogrammes / spectres pour calibrer des seuils de détection événementielle.
-
Un rapport court (section « Discussion » dans ce même A022.md) explicitant :
- les limites de chaque mode (A/B/C),
- les hypothèses (trajet bien calibré, absence de dérive importante, qualité GNSS),
- les liens avec les modèles et filtres utilisés dans P002/P004.
4. Pipeline proposé
4.1. Étape 0 : calibration IMU (Tedaldi 2014)
- Utiliser la méthode Tedaldi 2014 pour estimer la matrice de calibration complète :
- biais accel/gyro,
- facteurs d’échelle,
- non-orthogonalité.
- Produire une matrice 6×6 ou un bloc accel (3×3) + bloc gyro (3×3) exploitable dans le pipeline.
- Stocker ces paramètres dans le payload Telemachus associé au capteur.
Cette étape pourra être simulée (RS3) ou appliquée à des données réelles si un jeu de poses statiques est disponible.
4.2. Étape 1 : estimation de l’attitude
Plusieurs variantes à prototyper :
-
A1 – Filtre complémentaire simple :
- intégration gyro,
- remise à zéro lente via la verticale donnée par l’accélération moyenne.
-
A2 – Inertiel + GNSS :
- EKF ou UKF avec état orientation + biais gyro,
- corrections via vitesse GNSS, cap GNSS (ou heading dérivé de la trajectoire),
- contrainte « véhicule roule sur une route » (pitch/roll liés au profil route).
-
A3 – Inertiel + carte :
- utilisation de la géométrie de route (pente/courbure) comme pseudo-mesure,
- cohérence avec RoadGeometry / RoadGenome.
L’artefact n’a pas vocation à réinventer tous les filtres, mais à proposer 1 à 2 implémentations de référence pour chaque grande famille (complémentaire, inertiel+GNSS).
4.3. Étape 2 : projection dans le repère navigation + suppression gravité
À partir de l’attitude estimée, on projette les accélérations du repère capteur vers le repère navigation ((n,e,d)) ou ((x,y,z)) monde, puis on retire la gravité :
- ( a_\text{nav} = R_{\text{nav}\leftarrow\text{imu}} \cdot a_\text{imu} )
- ( a_\text{lin} = a_\text{nav} - g \cdot \begin{bmatrix}0 \ 0 \ 1\end{bmatrix} ) (si (z) vertical)
On obtient ainsi l’accélération linéaire du centre de masse dans le répertoire navigation.
4.4. Étape 3 : projection dans le repère véhicule / route
On construit ensuite les repères :
-
Repère véhicule :
- (x) : longitudinal,
- (y) : latéral,
- (z) : vertical.
-
Repère route :
- tangent à la trajectoire (direction de la vitesse),
- normal horizontale,
- vertical route.
À partir de la vitesse et de la trajectoire (GNSS ou simulée RS3), on construit une base orthonormée locale et on projette (a_\text{lin}) dedans. Cela permet de distinguer :
- composante longitudinale (accélération / freinage),
- composante latérale (virage),
- composante verticale (bosse, dos d’âne, chaussée dégradée).
5. Scénarios RS3 à illustrer
Quelques scénarios types à couvrir dans l’artefact :
-
Freinage fort en ligne droite
- Montrer la montée de la composante longitudinale,
- comparer brut vs redressé (avant/après gravité + projection).
-
Virage constant avec vitesse croissante
- Relier accélération latérale à la courbure RS3 / RoadGeometry,
- vérifier la cohérence (a_\text{lat} \approx v^2/R).
-
Dos d’âne / bosse
- Mettre en évidence les pics verticaux,
- explorer la sensibilité à la calibration IMU.
-
Route en pente
- Séparer composante « pente » (gravité projetée) de la composante « conduite »,
- illustrer l’intérêt de la référence route.
Chaque scénario pourra donner lieu à :
- 1–2 figures clefs,
- une mini-légende interprétative,
- éventuellement un extrait de notebook (captures ou références).
6. Intégration dans l’écosystème Teleforge
- Lien avec V001 : la compétence V001 pourra citer AR022 comme artefact de référence pour le traitement inertiel bas niveau (calibration + redressement).
- Lien avec P002/P004 : les papiers de fusion IMU/GNSS et MMKF pourront s’appuyer sur AR022 pour justifier les prétraitements inertiels.
- Lien avec RS3 : AR022 définira un chemin « standard » RS3 → Telemachus → accélérations redressées, réutilisable dans la génération de datasets.
À terme, AR022 pourra fournir :
- une implémentation Python packagée (
teleforge.accel_rectification), - un ou plusieurs notebooks démonstrateurs,
- un micro-dataset d’exemple (quelques trajectoires RS3 annotées).
7. Roadmap & TODO
- Consolider les choix de repères et notations (véhicule, route, navigation).
- Implémenter la calibration IMU style Tedaldi sur un jeu de données synthétiques RS3.
- Implémenter au moins deux variantes d’estimation d’attitude (complémentaire + inertiel+GNSS simple).
- Définir une fonction utilitaire de projection repère nav → repère route.
- Construire 3–4 scénarios RS3 dédiés à AR022 (freinage, virage, dos d’âne, pente).
- Générer les premières figures et valider qualitativement les résultats.
- Connecter AR022 aux papiers P002/P004 et à la compétence V001 dans
status.yaml.