Capteur laser LiDAR de type Laser Distance Sensor LDS02RR


Descriptions :
Le Capteur laser LiDAR de type Laser Distance Sensor LDS02RR est principalement connu pour être le capteur de distance laser (LDS) utilisé dans certains modèles d’aspirateurs robots Xiaomi/Roborock (comme les modèles S50, E5, S5 Max, S6, et S7).
C’est un capteur rotatif qui joue un rôle crucial dans la navigation et la cartographie de l’environnement par le robot aspirateur.
Schéma câblage :

Caractéristiques techniques :
| Spécification | Détail | 
|---|---|
| Longueur d’onde du laser | 85 nm (dans le proche infrarouge) | 
| Fréquence de répétition des impulsions (données) | 1,8 kHz | 
| Durée de l’impulsion | 200 µs | 
| Plage de mesure | ~ 0,15 m à 6 m | 
| Débit série | 115200 bps | 
| Consommation | ~ 45 mA en veille (sans rotation), ~ 135 mA lorsque le capteur tourne | 
| Type de données | Chaque révolution est divisée en ~ 90 paquets, chaque paquet contenant 4 lectures, totalisant ~ 360 mesures par révolution (1 mesure par degré théorique) | 
Structure de trame :
| Octet | Nom | Description | 
|---|---|---|
| 0 | 0xFA | Début de trame | 
| 1 | Index (0xA0 à 0xF9) | correspond à l’angle de départ (index * 1°) | 
| 2 | Speed_L | vitesse du moteur | 
| 3 | Speed_H | vitesse du moteur | 
| 4–21 | 4 paquets de mesure (4 × 4 octets) | |
| 22 | Checksum (somme de contrôle) | 
Chaque paquet de mesure (4 octets) :
byte0 : distance bits 7..0 byte1 : distance bits 13..8 (bits 0..5), status bits: bit7 = invalid flag, bit6 = strength warning byte2 : signal strength LSB byte3 : signal strength MSB
Informations pratiques :
Vitesse moteur :
- Vitesse typique : ~5 Hz (≈ une révolution toutes les ~200 ms), 360 mesures par révolution (≈1 mesure/°).
 
Format de trame :
- Chaque paquet = 22 octets envoyé en continu. Structure :
 
Byte 0 : START = 0xFA Byte 1 : INDEX (0xA0 .. 0xF9) // packet index (0 → 89) Byte 2-3 : SPEED_L , SPEED_H // little-endian (speed in 1/64 RPM fixed point) Bytes 4-19: Data0 .. Data3 (4 readings × 4 bytes = 16 bytes) Byte 20-21: CHECKSUM_L , CHECKSUM_H // little-endian 2-byte checksum
Chaque lecture (Data i, 4 octets) :
byte0 : distance bits 7..0 byte1 : distance bits 13..8 (bits 0..5), status bits: bit7 = invalid flag, bit6 = strength warning byte2 : signal strength LSB byte3 : signal strength MSB
- Distance = ((byte1 & 0x3F) << 8) | byte0 → résultat en mm (selon variantes, confirmer échelle sur votre unité ; pratique courante = mm).
 - invalid flag (bit7 of byte1) = 1 → mesure invalide/à ignorer.
 
Calcul de l’angle pour chaque lecture :
- Chaque paquet d’index 
idx(0..89) contient 4 lectures correspondant aux angles (idx − 0xA0)*4 → exemples : - index 0xA0 → lectures 0..3 (angles ≈ 0°,1°,2°,3°)
 - index 0xA1 → lectures 4..7, etc.
 - Angle = 
packet_index * 4 + measurement_in_packet(en degrés approximatifs). 
Champ ‘invalid’ :
- Ce champ indique si la mesure est invalide.
 - Il est dérivé du bit 7 (MSB) du byte1.
 - Si ce bit est 1 → mesure invalide (le capteur n’a pas pu renvoyer de distance correcte).
 - Si 0 → mesure valide (distance correcte en mm).
 
Champ ‘strengh’ :
- Ce champ correspond à la force du signal réfléchi (souvent appelé signal strength ou intensity).
 - C’est une valeur entière 16 bits, typiquement comprise entre 0 et ~6000 (selon le capteur).
 
Interprétation :
- Faible valeur (≈0–100) → retour faible → réflexion mauvaise ou distance longue.
 - Grande valeur (>1000) → retour fort → bonne surface réfléchissante, distance fiable.
 
Champ ‘checksum’ :
Chaque trame (22 octets) envoyée par le capteur contient :
[ 0xFA | INDEX | SPEED_L | SPEED_H | ... 16 octets de données ... | CHK_L | CHK_H ]
Les deux derniers octets (CHK_L et CHK_H) représentent une somme de contrôle (checksum) calculée sur les 20 premiers octets (tout sauf les deux derniers).
Ce checksum permet de vérifier que la trame n’a pas été corrompue lors de la transmission série.
