LRF50VB UART protocol and integration
LRF50VB 50m Single-Point DToF LiDAR Sensor for Industrial Automation, AGV and Traffic Safety Monitoring
Typical applications: Industrial automation, AGV & robot obstacle avoidance, Traffic safety monitoring.
At a glance
| Protocol family | Family B (5C, streaming) |
| Default baud | 460800 bps, 8N1 |
| Frame | 4 bytes |
| Distance unit on the wire | millimetres |
| Measurement range (datasheet) | 0.05–50 m (90% refl.) · 0.05–20 m |
Specification
Values come from the ERDI datasheet for this model. Where the datasheet gives a condition, it is shown.
| Parameter | Value | Condition |
|---|---|---|
| Laser wavelength | 905 nm | |
| Ranging range | 0.05–50 m (90% refl.) · 0.05–20 m | 10% refl. |
| Ranging accuracy | ±5 cm (<5 m) · 1% (≥5 m) | |
| Measurement frequency | 100 Hz | |
| Interface | UART / I²C | |
| Supply voltage | 3.3–5 V DC | |
| Dimensions | 18.7 × 11.8 × 13.3 mm | |
| Weight | 1.3 g | |
| Laser safety class | Class 1 | |
| Operating temperature | -20 to +60 ℃ | |
| Field of view | 1.9° | |
| Repeatability | ±30 mm | |
| Ambient light immunity | 10 m | 60 kLux |
| Peak current | 70 mA | 5 V |
| Average current | 40 mA | 5 V |
| Average power consumption | 0.2 W | |
| Wire specification | 4-pin 1.0 mm terminal, 10 cm tinned stranded wires | |
| Customization | Available in appearance / structure / output protocol |
Pinout and wiring
| PIN | Definition / Wire Color | User Interface |
|---|---|---|
| 1 | GND (Black) | External Power - |
| 2 | 3.3-5V (Red) | External Power + |
| 3 | RX (SDA) (Green) | TX (SDA) |
| 4 | TX (SCL) (Yellow) | RX (SCL) |
Cross TX and RX (module TX to host RX), share ground, and power the module from a supply that matches the supply voltage in the specification table. See Wiring and power.
Protocol summary
- Data frame: 4 bytes,
5C <dist_lo> <dist_hi> <check>, free-running. - Default baud: 460800 bps, 8 data bits, 1 stop bit, no parity.
- Distance: 2 bytes, little-endian, unit millimetres. The VB series reports millimetres and the H series centimetres, so
5C 02 11 ECis 4.354 m on a VB module and 43.54 m on an H module. - Out-of-range marker: the module outputs 50000 when there is no valid target. Treat it as no target, not as a distance.
- Checksum: bitwise inverse of the 8-bit sum of all bytes between the header and the check byte.
| Command | Request frame |
|---|---|
| Start ranging | 5A 0A 02 02 00 F1 |
| Stop ranging | 5A 0A 02 00 00 F3 |
The full frame description is in Family B protocol. Try it without installing anything in the browser serial monitor.
Code examples
- Python
- Arduino
- ESPHome
- ROS 2
pip install erdi-lrf # PyPI, MIT
erdi-lrf --port /dev/ttyUSB0 --model LRF50VB stream --count 20
from erdi_lrf import ErdiLRF
# COM3 on Windows, /dev/ttyUSB0 or /dev/serial0 on Linux
with ErdiLRF("/dev/ttyUSB0", "LRF50VB") as lrf:
for r in lrf.stream():
print("out of range" if r.out_of_range else f"{r.metres:.3f} m", "raw", r.raw)
#include <ErdiLRF.h>
ErdiLRF lrf(Serial1, ERDI_LRF50VB);
void setup() {
Serial.begin(115200);
Serial1.begin(erdiDefaultBaud(ERDI_LRF50VB)); // 460800 baud; ESP32: Serial1.begin(baud, SERIAL_8N1, RX_PIN, TX_PIN)
lrf.setTimeout(1000);
}
void loop() {
ErdiMeasurement m;
if (lrf.measure(&m) == ERDI_OK) {
Serial.println(m.metres, 3);
}
delay(200);
}
external_components:
- source: github://ErdiTech/erdi-lrf-home-assistant
components: [erdi_lrf]
uart:
id: lrf_uart
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 460800
sensor:
- platform: erdi_lrf
uart_id: lrf_uart
model: LRF50VB
name: "Laser distance"
update_interval: 1s
cd ~/ros2_ws/src && git clone https://github.com/ErdiTech/erdi_lrf_driver.git
cd ~/ros2_ws && rosdep install --from-paths src --ignore-src -y && colcon build --packages-select erdi_lrf_driver
source install/setup.bash
ros2 launch erdi_lrf_driver erdi_lrf.launch.py port:=/dev/ttyUSB0 model:=LRF50VB rate:=10.0
ros2 topic echo /range
Platform status
Only rows with evidence say Verified. See the compatibility matrix for what that means and where the evidence is.
| Platform | Status | Guide |
|---|---|---|
| Python (erdi-lrf) | Untested | Python / Raspberry Pi / Jetson |
| Arduino / PlatformIO | Untested | Arduino / PlatformIO |
| ESPHome / Home Assistant | Untested | ESPHome |
| ROS 2 | Untested | ROS 2 |
| ArduPilot (Lua script) | Untested | ArduPilot |
| ArduPilot native driver | In review (PR #34983, not merged) | ArduPilot |
Known issues
- The printed example request for reading the serial number does not reproduce with the datasheet's own checksum function. The streaming data frames follow the checksum rule above; build command frames with the rule, not by copying the printed bytes.
- UART logic level is not stated as a separate field for most models. Supply voltage is not the UART voltage: check the module's TX level against your host before wiring, or ask us.
Resources
- Model page with datasheet download: https://erdilrf.com/models/lrf50vb/
- Datasheet and specification page: LRF50VB datasheet and specs
- Interactive 3D view: LRF50VB 3D viewer
- STEP model: available on request, Request STEP
- Drivers and protocol notes: ErdiTech/erdi-lrf-drivers
- Questions: tommy@erdimail.com, +86 133 0819 5790