Moulin à marée
cartographie ROV sans GPS

Une chambre maçonnée partiellement inondée, géométrie inconnue. Pas de GPS, pas d'USBL, pas de DVL — mais des murs fixes et un sonar 360°.

Ping360 · scan-matching ICP Plan + nuage 3D Dérive IMU annulée

01 Le problème

Un moulin à marée possède une ou plusieurs chambres maçonnées sous le niveau de la mer, inondées à marée haute. Ces chambres ont une géométrie unique — souvent un plan rectangulaire avec une abside courbe à une extrémité — mais leur plan précis est inconnu (aucun relevé ou archive). Elles peuvent être accessibles par un ROV de 450 mm de diamètre, mais pas par un plongeur en sécurité.

Le défi de positionnement: dans un espace confiné en maçonnerie, le GPS n'a aucun signal, l'USBL nécessite un angle dégagé vers la surface (impossible sous voûte), et l'IMU seule accumule une dérive de position croissante proportionnelle à √t. En 2–3 minutes, l'erreur dépasse la taille de la pièce, rendant toute carte exploitable impossible.

Solution: les murs de la chambre sont fixes et connus une fois le premier tour effectué. Le Ping360 mesure les distances sur 360°. En recalant (scan-matching) chaque nouveau balayage sur la carte accumulée, on obtient la correction de pose à chaque sweep — l'erreur de position reste bornée quelle que soit la durée de la mission.

02 Suite capteurs BlueROV

Capteur Fréquence Apport Rôle dans le pipeline
Ping360
sonar rotatif mécanique
~1 sweep/2 s X, Y cap Coupe horizontale 360°. Mesure la distance aux murs dans toutes les directions. Chaque sweep donne ~400 points → scan-matching ICP → pose ROV recalée.
IMU
accéléro + gyro + magnéto
100 Hz roll, pitch, yaw Prédiction haute fréquence entre sweeps. Le yaw est fusionné avec le cap Ping360 recalé pour éviter l'accumulation. Roll/pitch améliorent la correction de la coupe 2D inclinée.
Capteur de pression
Bar30 / BlueRobotics
10 Hz profondeur Z Donne la profondeur absolue sous la surface de l'eau. Combiné avec la cote de marée du moment → altitude absolue par rapport au fond de la chambre.
Ping1D
altimètre acoustique
5–15 Hz hauteur fond Distance au fond maçonné directement sous le ROV. Permet de "coller" la coupe sonar à la bonne hauteur Z dans le volume 3D. Détecte aussi la voûte si orienté vers le haut.
Caméra frontale
+ 2 caméras latérales
30 fps texture X, Y local Structure From Motion sur les séquences → texture des murs, photogrammétrie locale. Raffinement de la carte dans les zones à fort contraste visuel (joints, pierres).
Side-scan sonars ×2
imagerie acoustique latérale
continu imagerie murs Imagerie acoustique des parois latérales pendant le déplacement. Détecte fissures, joints, zones de décollement. Complément aux caméras dans l'eau turbide.

03 Démonstration — scan-matching ICP (vue de dessus)

Le ROV parcourt la chambre. Comparez dead-reckoning IMU seul vs recalage Ping360.

Temps: 0 s

04 Reconstruction 3D — nuage de points extrudé

Le contour 2D reconstruit est extrudé entre le fond (Ping1D) et la surface (pression). Rotation à la souris. Cliquez "Exporter .ply" pour télécharger un vrai fichier PLY ASCII.

Déplacez la souris sur le canvas 2D pour explorer, puis générez la 3D.

Points:
Hauteur colonne:
Surface plan:

05 Pourquoi ça marche

La chambre du moulin est un espace statique et rigide. Les murs ne bougent pas. Cette propriété triviale est la clé du positionnement: on peut traiter le contour des murs comme une référence absolue locale — une "carte" qui ne dérive pas, contrairement à toute mesure inertielle.

À chaque sweep complet du Ping360 (~2 s), on obtient une nouvelle coupe 2D des murs. L'algorithme ICP (Iterative Closest Point) trouve la transformation rigide (rotation + translation) qui aligne au mieux ces points sur la carte accumulée. Cette transformation corrige la pose estimée du ROV sans aucune infrastructure externe. C'est une fermeture de boucle permanente — à chaque tour du sonar.

Encart mathématique

Dead-reckoning IMU seul: l'erreur de position croît comme σ_pos ∝ √t (marche aléatoire). Après 3 min, avec σ_acc = 0.05 m/s², l'erreur typique dépasse 1 m.

Avec ICP: à chaque sweep, on minimise E = Σ ||q_i − (R·p_i + t)||² sur les paires (point scan courant p_i, point carte le plus proche q_i). L'erreur résiduelle est bornée par la précision du Ping360 (~5 cm) et non par le temps — c'est une contrainte absolue renouvelée toutes les 2 s.

Convergence ICP 2D: en espace contraint et plan, 5–10 itérations suffisent (l'initialisation par l'IMU est proche de la solution). La solution unique existe si la chambre n'est pas circulaire — ce qui est le cas ici (4 coins + abside).

Z (profondeur): Z_abs = -P/(ρg) (pression Bar30). Z_fond = Z_abs - alt_Ping1D. Pas de dérive: les deux capteurs sont absolus (l'un par rapport à la surface, l'autre par rapport au fond local).

06 Données extraites — livrables

📐
Plan/contour DXF
Contour 2D de la chambre, dimensions cotées, exportable CAD/GIS
Nuage de points .ply/.las
Volume 3D complet, compatible CloudCompare / ArcScene / Blender
📏
Dimensions chambre
Longueur, largeur, rayon abside, hauteur d'eau à la date de mission
📊
Hauteur colonne d'eau
Profil vertical pression → fond, évolution pendant la mission
🏗
Verticalité des murs
Détection d'aplomb / dévers par comparaison des coupes à différentes profondeurs
🛰
Trajectoire ROV
Chemin parcouru dans le référentiel chambre, qualité de couverture sonar
📸
Mosaïque photo
Imagerie texturée des parois depuis caméras latérales + side-scans
📄
Rapport mission PDF
Synthèse: plan, métriques, observations, recommandations patrimoniales