355 lines
13 KiB
CMake
355 lines
13 KiB
CMake
cmake_minimum_required(VERSION 3.0.2)
|
|
project(robot_localization)
|
|
|
|
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(catkin REQUIRED COMPONENTS
|
|
angles
|
|
diagnostic_msgs
|
|
diagnostic_updater
|
|
eigen_conversions
|
|
geographic_msgs
|
|
geometry_msgs
|
|
message_filters
|
|
message_generation
|
|
nav_msgs
|
|
nodelet
|
|
roscpp
|
|
roslint
|
|
sensor_msgs
|
|
std_msgs
|
|
std_srvs
|
|
tf2
|
|
tf2_geometry_msgs
|
|
tf2_ros)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(YAML_CPP yaml-cpp)
|
|
if(NOT YAML_CPP_FOUND)
|
|
find_package(yaml-cpp REQUIRED)
|
|
endif()
|
|
|
|
|
|
# Geographiclib installs FindGeographicLib.cmake to this non-standard location
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/usr/share/cmake/geographiclib/")
|
|
find_package(GeographicLib REQUIRED)
|
|
|
|
# Attempt to find Eigen using its own CMake module.
|
|
# If that fails, fall back to cmake_modules package.
|
|
find_package(Eigen3)
|
|
set(EIGEN_PACKAGE EIGEN3)
|
|
if(NOT EIGEN3_FOUND)
|
|
find_package(cmake_modules REQUIRED)
|
|
find_package(Eigen REQUIRED)
|
|
set(EIGEN3_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS})
|
|
set(EIGEN3_LIBRARIES ${EIGEN_LIBRARIES})
|
|
set(EIGEN_PACKAGE Eigen)
|
|
endif()
|
|
|
|
if(NOT MSVC)
|
|
set_directory_properties(PROPERTIES COMPILE_OPTIONS "-Wall;-Werror")
|
|
endif()
|
|
add_definitions(-DEIGEN_NO_DEBUG -DEIGEN_MPL2_ONLY)
|
|
|
|
set(ROSLINT_CPP_OPTS "--filter=-build/c++11,-runtime/references")
|
|
roslint_cpp()
|
|
|
|
###################################
|
|
## catkin specific configuration ##
|
|
###################################
|
|
add_service_files(
|
|
FILES
|
|
GetState.srv
|
|
SetDatum.srv
|
|
SetPose.srv
|
|
SetUTMZone.srv
|
|
ToggleFilterProcessing.srv
|
|
FromLL.srv
|
|
ToLL.srv
|
|
)
|
|
|
|
generate_messages(
|
|
DEPENDENCIES
|
|
geographic_msgs
|
|
geometry_msgs
|
|
std_msgs
|
|
)
|
|
|
|
catkin_package(
|
|
INCLUDE_DIRS
|
|
include
|
|
LIBRARIES
|
|
ekf
|
|
ekf_localization_nodelet
|
|
filter_base
|
|
filter_utilities
|
|
navsat_transform
|
|
navsat_transform_nodelet
|
|
ros_filter
|
|
ros_filter_utilities
|
|
robot_localization_estimator
|
|
ros_robot_localization_listener
|
|
ukf
|
|
ukf_localization_nodelet
|
|
CATKIN_DEPENDS
|
|
angles
|
|
cmake_modules
|
|
diagnostic_msgs
|
|
diagnostic_updater
|
|
eigen_conversions
|
|
geographic_msgs
|
|
geometry_msgs
|
|
message_filters
|
|
message_runtime
|
|
nav_msgs
|
|
roscpp
|
|
sensor_msgs
|
|
std_msgs
|
|
std_srvs
|
|
tf2
|
|
tf2_geometry_msgs
|
|
tf2_ros
|
|
DEPENDS
|
|
${EIGEN_PACKAGE}
|
|
GeographicLib
|
|
YAML_CPP
|
|
)
|
|
|
|
###########
|
|
## Build ##
|
|
###########
|
|
|
|
include_directories(
|
|
include
|
|
${catkin_INCLUDE_DIRS}
|
|
${EIGEN3_INCLUDE_DIRS}
|
|
${YAML_CPP_INCLUDE_DIRS})
|
|
|
|
link_directories(${YAML_CPP_LIBRARY_DIRS})
|
|
|
|
# Library definitions
|
|
add_library(filter_utilities src/filter_utilities.cpp)
|
|
add_library(filter_base src/filter_base.cpp)
|
|
add_library(ekf src/ekf.cpp)
|
|
add_library(ukf src/ukf.cpp)
|
|
add_library(robot_localization_estimator src/robot_localization_estimator.cpp)
|
|
add_library(ros_robot_localization_listener src/ros_robot_localization_listener.cpp)
|
|
add_library(ros_filter_utilities src/ros_filter_utilities.cpp)
|
|
add_library(ros_filter src/ros_filter.cpp)
|
|
add_library(navsat_transform src/navsat_transform.cpp)
|
|
add_library(ekf_localization_nodelet src/ekf_localization_nodelet.cpp)
|
|
add_library(ukf_localization_nodelet src/ukf_localization_nodelet.cpp)
|
|
add_library(navsat_transform_nodelet src/navsat_transform_nodelet.cpp)
|
|
|
|
# Executables
|
|
add_executable(ekf_localization_node src/ekf_localization_node.cpp)
|
|
add_executable(ukf_localization_node src/ukf_localization_node.cpp)
|
|
add_executable(navsat_transform_node src/navsat_transform_node.cpp)
|
|
add_executable(robot_localization_listener_node src/robot_localization_listener_node.cpp)
|
|
|
|
# Dependencies
|
|
add_dependencies(filter_base ${PROJECT_NAME}_gencpp)
|
|
add_dependencies(navsat_transform ${PROJECT_NAME}_gencpp)
|
|
add_dependencies(robot_localization_listener_node ${PROJECT_NAME}_gencpp)
|
|
|
|
# Linking
|
|
target_link_libraries(ros_filter_utilities ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(filter_utilities ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(filter_base filter_utilities ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(ekf filter_base ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(ukf filter_base ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(ros_filter ekf ukf ros_filter_utilities ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(robot_localization_estimator filter_utilities filter_base ekf ukf ${EIGEN3_LIBRARIES})
|
|
target_link_libraries(ros_robot_localization_listener robot_localization_estimator ros_filter_utilities
|
|
${catkin_LIBRARIES} ${EIGEN3_LIBRARIES} ${YAML_CPP_LIBRARIES})
|
|
target_link_libraries(robot_localization_listener_node ros_robot_localization_listener ${catkin_LIBRARIES})
|
|
target_link_libraries(ekf_localization_node ros_filter ${catkin_LIBRARIES})
|
|
target_link_libraries(ekf_localization_nodelet ros_filter ${catkin_LIBRARIES})
|
|
target_link_libraries(ukf_localization_node ros_filter ${catkin_LIBRARIES})
|
|
target_link_libraries(ukf_localization_nodelet ros_filter ${catkin_LIBRARIES})
|
|
target_link_libraries(navsat_transform filter_utilities ros_filter_utilities ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES} ${GeographicLib_LIBRARIES})
|
|
target_link_libraries(navsat_transform_node navsat_transform ${catkin_LIBRARIES} ${GeographicLib_LIBRARIES})
|
|
target_link_libraries(navsat_transform_nodelet navsat_transform ${catkin_LIBRARIES} ${GeographicLib_LIBRARIES})
|
|
|
|
#############
|
|
## Install ##
|
|
#############
|
|
|
|
## Mark executables and/or libraries for installation
|
|
install(TARGETS
|
|
ekf
|
|
ekf_localization_nodelet
|
|
filter_base
|
|
filter_utilities
|
|
navsat_transform
|
|
navsat_transform_nodelet
|
|
ros_filter
|
|
ros_filter_utilities
|
|
robot_localization_estimator
|
|
ros_robot_localization_listener
|
|
ukf
|
|
ukf_localization_nodelet
|
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
|
|
|
install(TARGETS
|
|
ekf_localization_node
|
|
navsat_transform_node
|
|
robot_localization_listener_node
|
|
ukf_localization_node
|
|
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
|
|
|
|
## Mark cpp header files for installation
|
|
install(DIRECTORY include/${PROJECT_NAME}/
|
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
|
FILES_MATCHING PATTERN "*.h"
|
|
PATTERN ".svn" EXCLUDE)
|
|
|
|
install(DIRECTORY launch/
|
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
|
|
FILES_MATCHING PATTERN "*.launch")
|
|
|
|
install(DIRECTORY params/
|
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/params)
|
|
|
|
install(FILES
|
|
LICENSE
|
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
|
)
|
|
install(FILES nodelet_plugins.xml
|
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
|
)
|
|
|
|
#############
|
|
## Testing ##
|
|
#############
|
|
|
|
if (CATKIN_ENABLE_TESTING)
|
|
|
|
roslint_add_test()
|
|
|
|
# Not really necessary, but it will cause the build to fail if it's
|
|
# missing, rather than failing once the tests are being executed
|
|
find_package(rosbag REQUIRED)
|
|
find_package(rostest REQUIRED)
|
|
|
|
#### FILTER BASE TESTS ####
|
|
catkin_add_gtest(filter_base-test test/test_filter_base.cpp)
|
|
target_link_libraries(filter_base-test filter_base ${catkin_LIBRARIES})
|
|
|
|
# This test uses ekf_localization node for convenience.
|
|
add_rostest_gtest(test_filter_base_diagnostics_timestamps
|
|
test/test_filter_base_diagnostics_timestamps.test
|
|
test/test_filter_base_diagnostics_timestamps.cpp)
|
|
target_link_libraries(test_filter_base_diagnostics_timestamps ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_filter_base_diagnostics_timestamps ekf_localization_node)
|
|
|
|
#### EKF TESTS #####
|
|
add_rostest_gtest(test_ekf
|
|
test/test_ekf.test
|
|
test/test_ekf.cpp)
|
|
target_link_libraries(test_ekf ros_filter ekf ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
|
|
add_rostest_gtest(test_ekf_localization_node_interfaces
|
|
test/test_ekf_localization_node_interfaces.test
|
|
test/test_ekf_localization_node_interfaces.cpp)
|
|
target_link_libraries(test_ekf_localization_node_interfaces ros_filter ekf ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ekf_localization_node_interfaces ekf_localization_node)
|
|
|
|
add_rostest_gtest(test_ekf_localization_node_bag1
|
|
test/test_ekf_localization_node_bag1.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ekf_localization_node_bag1 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ekf_localization_node_bag1 ekf_localization_node)
|
|
|
|
add_rostest_gtest(test_ekf_localization_node_bag2
|
|
test/test_ekf_localization_node_bag2.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ekf_localization_node_bag2 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ekf_localization_node_bag2 ekf_localization_node)
|
|
|
|
add_rostest_gtest(test_ekf_localization_node_bag3
|
|
test/test_ekf_localization_node_bag3.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ekf_localization_node_bag3 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ekf_localization_node_bag3 ekf_localization_node)
|
|
|
|
add_rostest_gtest(test_ekf_localization_nodelet_bag1
|
|
test/test_ekf_localization_nodelet_bag1.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ekf_localization_nodelet_bag1 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ekf_localization_nodelet_bag1 ekf_localization_nodelet)
|
|
|
|
#### UKF TESTS #####
|
|
add_rostest_gtest(test_ukf
|
|
test/test_ukf.test
|
|
test/test_ukf.cpp)
|
|
target_link_libraries(test_ukf ros_filter ukf ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
|
|
add_rostest_gtest(test_ukf_localization_node_interfaces
|
|
test/test_ukf_localization_node_interfaces.test
|
|
test/test_ukf_localization_node_interfaces.cpp)
|
|
target_link_libraries(test_ukf_localization_node_interfaces ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ukf_localization_node_interfaces ukf_localization_node)
|
|
|
|
add_rostest_gtest(test_ukf_localization_node_bag1
|
|
test/test_ukf_localization_node_bag1.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ukf_localization_node_bag1 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ukf_localization_node_bag1 ukf_localization_node)
|
|
|
|
add_rostest_gtest(test_ukf_localization_node_bag2
|
|
test/test_ukf_localization_node_bag2.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ukf_localization_node_bag2 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ukf_localization_node_bag2 ukf_localization_node)
|
|
|
|
add_rostest_gtest(test_ukf_localization_node_bag3
|
|
test/test_ukf_localization_node_bag3.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ukf_localization_node_bag3 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ukf_localization_node_bag3 ukf_localization_node)
|
|
|
|
add_rostest_gtest(test_ukf_localization_nodelet_bag1
|
|
test/test_ukf_localization_nodelet_bag1.test
|
|
test/test_localization_node_bag_pose_tester.cpp)
|
|
target_link_libraries(test_ukf_localization_nodelet_bag1 ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
add_dependencies(test_ukf_localization_nodelet_bag1 ukf_localization_nodelet)
|
|
|
|
#### RLE/RLL TESTS #####
|
|
add_rostest_gtest(test_robot_localization_estimator
|
|
test/test_robot_localization_estimator.test
|
|
test/test_robot_localization_estimator.cpp)
|
|
target_link_libraries(test_robot_localization_estimator
|
|
robot_localization_estimator
|
|
${catkin_LIBRARIES}
|
|
${rostest_LIBRARIES})
|
|
|
|
add_executable(test_ros_robot_localization_listener_publisher test/test_ros_robot_localization_listener_publisher.cpp)
|
|
target_link_libraries(test_ros_robot_localization_listener_publisher
|
|
${catkin_LIBRARIES})
|
|
|
|
add_rostest_gtest(test_ros_robot_localization_listener
|
|
test/test_ros_robot_localization_listener.test
|
|
test/test_ros_robot_localization_listener.cpp)
|
|
target_link_libraries(test_ros_robot_localization_listener
|
|
ros_robot_localization_listener
|
|
${catkin_LIBRARIES}
|
|
${rostest_LIBRARIES})
|
|
|
|
#### NAVSAT CONVERSION TESTS ####
|
|
catkin_add_gtest(navsat_conversions-test test/test_navsat_conversions.cpp)
|
|
target_link_libraries(navsat_conversions-test navsat_transform ${catkin_LIBRARIES})
|
|
|
|
#### NAVSAT TRANSFORM TESTS ####
|
|
add_rostest_gtest(test_navsat_transform
|
|
test/test_navsat_transform.test
|
|
test/test_navsat_transform.cpp)
|
|
target_link_libraries(test_navsat_transform ${catkin_LIBRARIES} ${rostest_LIBRARIES})
|
|
|
|
endif()
|