Files
DriverLIdar/CMakeLists.txt
QUYVN 59880871b0 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>
2026-07-01 10:14:52 +07:00

83 lines
2.6 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(lidarlib VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
find_package(Threads REQUIRED)
option(BUILD_SHARED_LIBS "Build shared (.so) libraries instead of static" ON)
# ── lidarlib: OLEI (UDP) + SICK (TCP) drivers, the unified make_lidar()
# factory, and config.json load/save. No web UI. ──
set(LIDARLIB_SOURCES
src/olei_lidar.cpp
src/sick_lidar.cpp
src/olei_config.cpp
)
add_library(lidarlib ${LIDARLIB_SOURCES})
set_target_properties(lidarlib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
POSITION_INDEPENDENT_CODE ON
)
target_include_directories(lidarlib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(lidarlib PUBLIC Threads::Threads)
option(LIDARLIB_BUILD_EXAMPLES "Build example/demo binaries" ON)
if(LIDARLIB_BUILD_EXAMPLES)
add_executable(example examples/example.cpp)
target_link_libraries(example PRIVATE lidarlib)
add_executable(test_dual examples/test_dual.cpp)
target_link_libraries(test_dual PRIVATE lidarlib)
add_executable(sick_example examples/sick_example.cpp)
target_link_libraries(sick_example PRIVATE lidarlib)
# Headless skeleton app: load config.json -> make_lidar() each -> print scans.
# Replace its print loop with your own GUI; this is the integration template.
add_executable(lidar_app examples/lidar_app.cpp)
target_link_libraries(lidar_app PRIVATE lidarlib)
endif()
# ── install + find_package() support ──
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS lidarlib
EXPORT lidarlibTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT lidarlibTargets
FILE lidarlibTargets.cmake
NAMESPACE lidarlib::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)
configure_package_config_file(
cmake/lidarlibConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)