Chargement en cours…
Télémètre optique Time-of-Flight 0.1-12m à 100 Hz pour navigation autonome, évitement d'obstacle et SLAM
| Caractéristique | Valeur / Spécification |
|---|---|
| Technologie optique | Laser infrarouge VCSEL 850 nm (Classe 1 eye-safe) |
| Protocoles de sortie | UART TTL (115200 bps) et I2C |
| Précision de mesure | ±6 cm (0.1-6m) / ±1% (6-12m) |
| Portée de détection | 0.1 m à 12.0 m en intérieur/extérieur |
| Résolution de distance | 1 cm |
| Angle de diffusion (FoV) | 2° faisceau directif |
| Fréquence de rafraîchissement | Jusqu à 100 Hz (ajustable de 1 à 100 Hz) |
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Range
import serial
class TofLidarNode(Node):
"""Nœud ROS2 publiant la distance laser ToF sur /sensors/laser_distance."""
def __init__(self):
super().__init__('tof_lidar_node')
self.pub = self.create_publisher(Range, '/sensors/laser_distance', 10)
self.ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1)
self.timer = self.create_timer(0.01, self.read_distance) # 100 Hz
def read_distance(self):
if self.ser.read(1) == b'\x59' and self.ser.read(1) == b'\x59':
data = self.ser.read(7)
dist_cm = data[0] + (data[1] << 8)
msg = Range()
msg.header.stamp = self.get_clock().now().to_msg()
msg.header.frame_id = 'lidar_link'
msg.range = float(dist_cm) / 100.0 # Mètres
self.pub.publish(msg)
def main():
rclpy.init()
node = TofLidarNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()