Aller au contenu principal

Pipeline LiDAR terrestre

Utilisez ce pipeline quand vous travaillez avec des scanners LiDAR fixes ou portatifs (Leica, FARO, Trimble, BLK2GO, etc.) et devez transformer des nuages de points en cartes AR Clip VPS.

Prétraitement

  1. Nettoyez les scans bruts — retirez les artefacts de trépied, les retours multiples et les objets mobiles dans Cyclone, ReCap, CloudCompare ou un outil similaire.
  2. Recalez les stations — alignez les scans séparés à l'aide de cibles ou de méthodes cloud-to-cloud.
  3. Colorisez — appliquez des textures photographiques si vous en avez ; sinon, projetez l'intensité LiDAR en niveaux de gris.

Export

  • Produisez un maillage simplifié (≤ 5 millions de triangles) pour l'aperçu visuel.
  • Exportez le nuage de points en E57/LAZ/PLY.
  • Gardez un système de coordonnées cohérent : plan tangent local en intérieur, CRS géoréférencé en extérieur.

Envoi avec l'API REST Python

# upload_lidar.py
from pathlib import Path
import os
import requests

API_BASE = "https://api.arclip.app/vps/api/v3"
TOKEN = os.environ["ARCLIP_TOKEN"]
DATA_PATH = Path("outputs/plant.e57")

headers = {"Authorization": f"Bearer {TOKEN}"}

payload = {
"name": "Factory Floor",
"dataType": "point_cloud",
"sourceFormat": "e57",
"hybrid": True,
"coordinate": {"lat": 35.68124, "lon": 139.76712}
}

init = requests.post(f"{API_BASE}/maps/import", json=payload, headers=headers)
init.raise_for_status()
info = init.json()
upload_url, map_id = info["uploadUrl"], info["mapId"]

with DATA_PATH.open("rb") as src:
put = requests.put(upload_url, data=src, headers={"Content-Type": "application/octet-stream"})
put.raise_for_status()

finalize = requests.post(f"{API_BASE}/maps/{map_id}/finalize", json={"publish": False}, headers=headers)
finalize.raise_for_status()
print(f"LiDAR map {map_id} queued → {finalize.json()['status']}")
  • hybrid=True indique que l'envoi contient à la fois un nuage de points et un maillage facultatif (s'il est présent dans le lot E57/LAZ).
  • Pour un jeu de données uniquement intérieur, omettez le bloc de coordonnées.

Post-traitement et ancres

Une fois la carte en READY :

  1. Définissez des points d'ancrage pour les machines, les entrées et les sorties.
  2. Envoyez-les via un petit fichier JSON :
import json

anchors = [
{"name": "CNC-01", "position": [2.4, 0.0, 8.7]},
{"name": "safety_exit", "position": [-11.2, 0.0, 3.1]}
]
resp = requests.post(
f"{API_BASE}/maps/{map_id}/anchors",
headers=headers,
json={"items": anchors}
)
resp.raise_for_status()
  1. Publiez la carte depuis la Console, ou appelez POST /maps/{id}/publish une fois le contrôle qualité terminé.