Le capteur de distance avant

S’applique à : Simulation Robot réel

Le lidar balaie un plan horizontal à environ 20 cm du sol : il ne voit pas ce qui est plus bas. Le cas typique est la table à pied central : le lidar voit la colonne, la navigation la contourne de justesse, et le robot bute dans le pied, en croix ou en disque, qui s’étale au ras du sol.

Le RatBot porte pour cela, à l’avant, un capteur de distance multizone VL53L5CX (temps de vol, ou ToF) : 8 × 8 zones sur un champ de 45° × 45°, à 10 cm du sol, pointé droit devant. Nav2 s’en sert pour marquer ces obstacles bas dans ses cartes de coûts.

Note

État au 2026-10-20 : la carte pilote le vrai capteur (pilote de ST), essayé sur ratbot-1 : 15 images par seconde, sans erreur. Il n’est pas encore fixé sur le robot, ni son orientation vérifiée : la navigation réelle ne s’en sert pas encore. En simulation, le capteur est imité, et la navigation s’en sert.

Sans capteur, la carte ne publie rien : une zone muette vaut mieux qu’un obstacle inventé. Le bloc tof des diagnostics dit ce qu’il en est, et la carte retente le démarrage du capteur toutes les 5 s : un capteur branché après coup démarre de lui-même, sans redémarrer le robot.

Il est prévu à 10 cm du sol, droit devant, la face avant à 3,5 cm devant l’axe des roues (décidé le 2026-10-20) : plus haut, les objets bas proches passeraient sous son champ.

Le capteur démarre en environ 3 s : son logiciel interne (84 Kio) lui est envoyé à chaque mise sous tension. Il mesure ensuite 15 images par seconde, en 8 × 8 zones, en retenant pour chaque zone la cible la plus proche.

Ce qu’il publie

Topic

Type

Contenu

sensors/tof/depth

sensor_msgs/Image

image 8 × 8, une distance en millimètres par zone, 0 pour une zone sans mesure ; publiée par la carte (en simulation, par ratbot_tof_sim)

sensors/tof/points

sensor_msgs/PointCloud2

les mêmes mesures en points 3D, sol reconnu et posé à hauteur nulle ; Nav2 y lit les obstacles

sensors/tof/clearing

sensor_msgs/PointCloud2

des rayons qui couvrent tout le champ du capteur, jusqu’à la mesure de chaque zone, ou jusqu’à 1,5 m si elle ne voit rien : Nav2 s’en sert pour effacer ce que le capteur voit libre. Ce ne sont pas des obstacles.

Note

Sans ce nuage d’effacement, une marque fausse posée un jour au-dessus des rayons qui descendent vers le sol n’était plus jamais effacée : les marques s’accumulaient en taches rondes sur la carte de coûts, au point de bloquer le robot (décor lisv, 2026-10-25).

Ces marques fausses venaient du freinage : le robot pique du nez d’un degré, et le capteur voyait le sol plus près que prévu, pris pour un obstacle bas à 85 cm devant. Le sol est désormais reconnu pour un robot penché jusqu’à 2°. Contrepartie : un obstacle très bas (4 cm) n’est vu qu’à partir de 70 cm, au lieu de 78.

Pour les voir dans RViz : ajouter un affichage PointCloud2 sur /ratbot_1/sensors/tof/points, ou Image sur /ratbot_1/sensors/tof/depth.

L’essayer en simulation

Le décor tables est fait pour cela : une pièce et deux tables à pied central, l’une à pied en croix, l’autre à socle en disque. Le robot 1 part face à la première.

./scripts/ratbot up tables ground_truth_tf:=false
./scripts/ratbot nav 1          # charge la carte du décor

Puis, dans RViz, un but derrière l’une des tables, par exemple en (2,0 ; 0,0) derrière la table au pied en croix. Essais du 2026-10-14, distance au plus près entre le centre du robot et l’axe de la colonne :

Lidar seul (use_tof:=false)

Lidar et capteur ToF

Pied en croix (il faut 38 cm)

16 cm : sur le pied, robot bloqué

54 cm : à côté du pied, but atteint

Socle en disque (il faut 30 cm)

7 cm : dans le socle

38 cm : à côté du socle, but atteint

Hauteur du capteur

Le convertisseur reconnaît le sol avec une tolérance relative : une irrégularité du sol de hauteur h déplace le sol vu d’environ h divisé par la hauteur du capteur. Plus le capteur est bas, plus il prend un seuil, un tapis ou un joint de parquet pour un obstacle :

Irrégularité du sol

Capteur à 4 cm

Capteur à 10 cm

5 mm (seuil, tapis fin)

obstacle fantôme

ignorée

1,2 cm (tapis)

mur fantôme

à la limite

En simulation, 4, 5, 7 et 10 cm évitent les pieds de table aussi bien les uns que les autres : rien ne gagne à descendre le capteur. Il est prévu à 10 cm, pointé droit devant, fixé rigidement ; sa pose réelle sera mesurée une fois monté.

Ce qu’il ne voit pas

  • Au-delà d’environ 1,5 m. La fiche technique annonce de 60 cm à 3,5 m selon la couleur de la cible et la lumière ; la simulation coupe à 1,5 m, plutôt que de voir plus loin que le vrai capteur.

  • Tout près, au ras du sol. Le bas du champ touche le sol à 24 cm du capteur. Un pied de 4 cm de haut disparaît du champ à moins de 15 cm : il doit avoir été vu avant, ce que la carte de coûts retient.

  • Un obstacle bas plus loin que le sol de sa zone. Chaque zone regarde un cône d’environ 5,6° ; une zone qui voit déjà le sol ne distingue pas un obstacle très bas posé au-delà. Il apparaît quand le robot s’approche.

  • Sur les côtés et derrière : un seul capteur, vers l’avant.

Robot sans capteur

Un robot qui n’en porte pas se lance avec use_tof:=false : le capteur disparaît du modèle et la conversion n’est pas lancée.

./scripts/ratbot up tables use_tof:=false

Les réglages du capteur

La carte règle le capteur à chaque démarrage. Ces réglages sont dans le firmware (App/tof.c) ; en changer demande de recompiler et de flasher la carte.

réglage

valeur

pourquoi

résolution

8 × 8 zones

le maximum du capteur

cadence

15 images/s

le maximum en 8 × 8

mode

continu

l’émetteur reste allumé : meilleure portée et meilleure tenue à la lumière ambiante. Le mode « autonome » consomme moins, mais mesure moins bien

cible retenue par zone

la plus proche

pour un robot, c’est le pied de table qui compte, pas le mur derrière (le réglage d’usine retient la cible au signal le plus fort)

pompe de charge de l’émetteur

coupée

voir ci-dessous

La pompe de charge. Elle relève la tension de l’émetteur laser, pour qu’il fonctionne sur un module alimenté en 2,8 V. Sur un module en 3,3 V, elle ne sert pas, et la couper réduit l’échauffement. Mesuré le 2026-10-20 sur ratbot-1, mur à 30 cm :

pompe allumée

pompe coupée

distance mesurée

302 mm

302 mm

variation d’une image à l’autre

1,5 mm

1,2 mm

zones valides

54 sur 64

55 sur 64

température de la puce

67 °C

57-58 °C

Même image, même précision de près, 10 °C de moins. Seule la portée maximale, vers 3 ou 4 m, peut baisser de quelques pour cent : sans effet ici, puisque la navigation ne retient le capteur que jusqu’à 1,5 m. Un projet qui aurait besoin de voir loin remet la pompe en passant TOF_INTERNAL_CP_OFF à 0 dans App/tof.c.

Avertissement

Pompe coupée, le module doit être alimenté en 3,3 V sur AVDD. Sur un module qui fournit 2,8 V à la puce, l’émetteur faiblirait : moins de zones valides, et une portée réduite. Avec un autre modèle de module, refaire la mesure ci-dessus avant de garder ce réglage.

Dépanner

Le bloc tof de Diagnostics :

message

que faire

tof nominal

le capteur mesure ; frames compte les images

tof sensor starting (firmware upload)

normal pendant ~2 s après la mise sous tension

no VL53L5CX at 0x29; I2C2 answers: 0x48

le capteur ne répond pas. La carte a balayé le bus : seul le capteur de température de la carte (0x48) répond. Le module n’est pas alimenté, ou ses fils SDA et SCL n’arrivent pas : vérifier le câblage sur J4 et la tension entre VIN et GND du module. Une autre adresse dans la liste veut dire que le module répond, mais pas où on l’attend ; none veut dire que le bus est bloqué. Si 0x29 figure dans la liste, un composant y répond, mais ce n’est pas un VL53L5CX (un autre capteur de la famille, par exemple)

tof sensor found but start failed (driver status N)

le capteur répond, mais l’envoi de son logiciel a échoué. Souvent une alimentation trop faible pendant le démarrage. La carte retente toutes les 5 s

Le connecteur J4 porte, dans l’ordre : 1 GND, 2 +3,3 V, 3 +5 V, 4 SCL, 5 SDA. La puce VL53L5CX fonctionne en 3,3 V. Un module sans régulateur se branche sur la broche 2 (+3,3 V) ; un module avec régulateur (un petit composant près de VIN) peut se brancher sur la broche 3 (+5 V), qui lui laisse plus de marge.