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 |
|---|---|---|
|
|
image 8 × 8, une distance en millimètres par zone, 0 pour une zone
sans mesure ; publiée par la carte (en simulation, par
|
|
|
les mêmes mesures en points 3D, sol reconnu et posé à hauteur nulle ; Nav2 y lit les obstacles |
|
|
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 ( |
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 |
|---|---|
|
le capteur mesure ; |
|
normal pendant ~2 s après la mise sous tension |
|
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 ;
|
|
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.