Robot Monitor

cmake_minimum_required(VERSION 3.16)

project(RobotMonitor VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Quick Quick3D Ros2Core)

qt_standard_project_setup(REQUIRES 6.8)

qt_add_executable(appRobotMonitor
    main.cpp
)

set_source_files_properties(GeometryHeleper.qml Theme.qml PROPERTIES
    QT_QML_SINGLETON_TYPE TRUE
)

qt_add_qml_module(appRobotMonitor
    URI RobotMonitor
    VERSION 1.0
    QML_FILES
        Main.qml
        MainViewModel.qml
        Nav2IrobotActions.qml
        TFManager.qml
        MapVisualSettings.qml
        OccupancyGrid.qml
        GeometryHeleper.qml
        LaserScan.qml
        ShapeData.qml
        ShapeNode.qml
        GridNode.qml
        VideoView.qml
        ExpandablePanel.qml
        Theme.qml
        SceneView.qml
        SidePanel.qml
        DrivePanel.qml
        LayersPanel.qml
        StyledButton.qml
        StatusRow.qml
        StyledCheckBox.qml
        StyledSlider.qml
        VisualSettings.qml
        GridVisualSettings.qml
        LaserScanVisualSettings.qml
        ColorSettingsEntry.qml
        SchemeSelector.qml
        GridPalette.qml
    RESOURCES
        shaders/IndexedGrid.frag
        shaders/IndexedGrid.vert
        images/arrow.svg
        images/triangle.svg
        images/draghandle.svg
        images/gear.svg
        images/robot.svg
    SOURCES
        rosimageitem.h rosimageitem.cpp
        QML_FILES
)

# Collect optional IMPORT_PACKAGES — only include those present in the ROS distro
set(_optional_import_packages "")
find_package(geographic_msgs QUIET)
find_package(nav2_msgs QUIET)
if(geographic_msgs_FOUND AND nav2_msgs_FOUND)
    list(APPEND _optional_import_packages geographic_msgs nav2_msgs)
endif()
find_package(irobot_create_msgs QUIET)
if(irobot_create_msgs_FOUND)
    list(APPEND _optional_import_packages irobot_create_msgs)
endif()

qt_ros2_configure_target(appRobotMonitor
    CAPABILITIES PUBLISHER SUBSCRIBER ACTION
    MODULES
        QtRos2NavigationMessages
        QtRos2GeometryMessages
        QtRos2SensorMessages
    IMPORT_PACKAGES ${_optional_import_packages}
)

set_target_properties(appRobotMonitor PROPERTIES
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

target_link_libraries(appRobotMonitor
    PRIVATE
        Qt6::Quick
        Qt6::Quick3D
)

include(GNUInstallDirs)
install(TARGETS appRobotMonitor
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)