Fix Family B angle decode + add LR-1FMI model

parse_family_b() dùng sai hệ số góc 0.25°/LSB; theo spec Olei chính hãng
(Olei.LidarSensor/LidarDataBlock.GetAngleDegrees) AngleRaw là 0.01°/LSB.
Sai 25× khiến điểm bị gán nhầm góc → một phòng bị bôi thành vòng tròn trên
RViz. Đã verify với thiết bị thật OLELR-1FMI: sau khi sửa ra 2400 điểm/vòng,
0–359.9°, đúng hình học môi trường.

- Đổi hệ số góc 0.25° → 0.01° trong parse_family_b().
- Bỏ qua block invalid (AngleRaw >= 0xFF00) theo spec.
- Dò ranh giới vòng quay PER-POINT thay vì per-packet (một gói có thể chứa
  >1 vòng), tránh gộp nhiều vòng vào một scan.
- Thêm model LR-1FMI (360°, 0.01°/LSB, ~2400 pts/rev) vào bảng model +
  kModelTable, đặt "1FMI" trước "1F" để khớp đúng chuỗi tên.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-01 10:14:52 +07:00
commit 59880871b0
17 changed files with 2288 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
#pragma once
// ─── One-include convenience header ─────────────────────────────────────────
// Pull in the whole public API in a single line:
//
// #include "lidarlib/lidarlib.hpp"
//
// Gives you the data model (LaserScan / ExtraInfo / ScanResult), the unified
// Lidar interface, both concrete drivers (Driver = OLEI/UDP, SickDriver =
// SICK/TCP), the model/brand tables, config.json load/save, and the single
// config function lidarlib::make_lidar().
#include "lidarlib/lidar.hpp"
#include "lidarlib/sick_lidar.hpp"
#include "lidarlib/config.hpp"