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:
82
CMakeLists.txt
Normal file
82
CMakeLists.txt
Normal file
@@ -0,0 +1,82 @@
|
||||
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
|
||||
)
|
||||
Reference in New Issue
Block a user