ur_robot_driver/CMakeLists.txt
2025-05-28 00:25:11 +08:00

228 lines
5.1 KiB
CMake

cmake_minimum_required(VERSION 3.5)
project(ur_robot_driver)
# Default to off as this only works in environments where a new docker container can be started with the appropriate networking, which
# might not be possible e.g. inside the buildfarm
option(
UR_ROBOT_DRIVER_BUILD_INTEGRATION_TESTS
"Build integration tests using the start_ursim script"
OFF
)
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-Wno-unused-parameter)
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
message("${PROJECT_NAME}: You did not request a specific build type: selecting 'RelWithDebInfo'.")
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
find_package(ament_cmake REQUIRED)
find_package(backward_ros REQUIRED)
find_package(controller_manager REQUIRED)
find_package(controller_manager_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(hardware_interface REQUIRED)
find_package(pluginlib REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_lifecycle REQUIRED)
find_package(rclpy REQUIRED)
find_package(std_msgs REQUIRED)
find_package(std_srvs REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(ur_client_library REQUIRED)
find_package(ur_dashboard_msgs REQUIRED)
find_package(ur_msgs REQUIRED)
include_directories(include)
set(THIS_PACKAGE_INCLUDE_DEPENDS
controller_manager
controller_manager_msgs
geometry_msgs
hardware_interface
pluginlib
rclcpp
rclcpp_lifecycle
std_msgs
std_srvs
tf2_geometry_msgs
ur_client_library
ur_dashboard_msgs
ur_msgs
)
add_library(ur_robot_driver_plugin
SHARED
src/dashboard_client_ros.cpp
src/hardware_interface.cpp
src/urcl_log_handler.cpp
src/robot_state_helper.cpp
)
target_link_libraries(
ur_robot_driver_plugin
ur_client_library::urcl
)
target_include_directories(
ur_robot_driver_plugin
PRIVATE
include
)
ament_target_dependencies(
ur_robot_driver_plugin
${${PROJECT_NAME}_EXPORTED_TARGETS}
${THIS_PACKAGE_INCLUDE_DEPENDS}
)
pluginlib_export_plugin_description_file(hardware_interface hardware_interface_plugin.xml)
#
# dashboard_client
#
add_executable(dashboard_client
src/dashboard_client_ros.cpp
src/dashboard_client_node.cpp
src/urcl_log_handler.cpp
)
target_link_libraries(dashboard_client ur_client_library::urcl)
ament_target_dependencies(dashboard_client ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
#
# ur_ros2_control_node
#
add_executable(ur_ros2_control_node
src/ur_ros2_control_node.cpp
)
ament_target_dependencies(ur_ros2_control_node
controller_manager
rclcpp
)
#
# controller_stopper_node
#
add_executable(controller_stopper_node
src/controller_stopper.cpp
src/controller_stopper_node.cpp
)
ament_target_dependencies(controller_stopper_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
#
# robot_state_helper
#
add_executable(robot_state_helper
src/robot_state_helper.cpp
src/robot_state_helper_node.cpp
)
target_link_libraries(robot_state_helper ur_client_library::urcl)
ament_target_dependencies(robot_state_helper ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
add_executable(urscript_interface
src/urscript_interface.cpp
)
ament_target_dependencies(urscript_interface ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
install(
TARGETS dashboard_client ur_ros2_control_node controller_stopper_node urscript_interface robot_state_helper
DESTINATION lib/${PROJECT_NAME}
)
# INSTALL
install(
TARGETS ur_robot_driver_plugin
DESTINATION lib
)
install(
DIRECTORY include/
DESTINATION include
)
## EXPORTS
ament_export_include_directories(
include
)
ament_export_libraries(
ur_robot_driver_plugin
)
install(DIRECTORY resources
DESTINATION share/${PROJECT_NAME}
REGEX "/ursim/" EXCLUDE
)
install(DIRECTORY include/
DESTINATION include
)
ament_export_dependencies(
hardware_interface
pluginlib
rclcpp
rclcpp_lifecycle
${THIS_PACKAGE_INCLUDE_DEPENDS}
)
# Install Python execs
ament_python_install_package(${PROJECT_NAME})
# Install Python executables
install(PROGRAMS
scripts/tool_communication.py
scripts/ur3e_actions.py
scripts/start_ursim.sh
scripts/hi.py
scripts/ur3e_topic.py
examples/examples.py
examples/force_mode.py
DESTINATION lib/${PROJECT_NAME}
)
install(PROGRAMS scripts/wait_dashboard_server.sh
DESTINATION bin
)
install(PROGRAMS scripts/start_ursim.sh
DESTINATION lib/${PROJECT_NAME}
)
install(DIRECTORY config launch
DESTINATION share/${PROJECT_NAME}
)
ament_package()
if(BUILD_TESTING)
find_package(ur_controllers REQUIRED)
find_package(ur_description REQUIRED)
find_package(ur_msgs REQUIRED)
find_package(launch_testing_ament_cmake)
if(${UR_ROBOT_DRIVER_BUILD_INTEGRATION_TESTS})
add_launch_test(test/launch_args.py
TIMEOUT
180
)
add_launch_test(test/dashboard_client.py
TIMEOUT
180
)
add_launch_test(test/robot_driver.py
TIMEOUT
800
)
add_launch_test(test/integration_test_controller_switch.py
TIMEOUT
800
)
add_launch_test(test/integration_test_force_mode.py
TIMEOUT
800
)
add_launch_test(test/urscript_interface.py
TIMEOUT
500
)
endif()
endif()