Skip to content

Commit e375350

Browse files
authored
Switch robot_localization to modern CMake idioms. (#895)
Some of these have been best practice for a while, and some of them will become best practice in the near future. 1. Move the include directory down one-level. This is to better support overlays and underlays; see ros2/ros2#1150 for the entire saga. The upshot is that all includes should be one more directory level down, and CMake will handle the differences. This has been best practice since Humble. 2. Switch from ament_target_dependencies() to target_link_libraries(). ament_target_dependencies was developed in the days before target_link_libraries() was fully capable, and nowadays target_link_libraries() is a superset of the functionality. There is one oddity here, in that in order to deal with ROS message packages, we have to use ${<msg_pkg_name>_TARGETS}, rather than the traditional CMake target like msg_pkg_name::msg_pkg_name. This is a bug in ROS that will eventually be fixed. 3. Export a CMake target from robot_localization. This means that downstream packages will be able to use target_link_libraries(<target> robot_localization::robot_localization) 4. Export all dependencies with ament_export_dependencies. This ensures that downstream project which rely on this one will be able to find all of the includes. Signed-off-by: Chris Lalancette <[email protected]>
1 parent 19065fa commit e375350

File tree

5 files changed

+87
-97
lines changed

5 files changed

+87
-97
lines changed

CMakeLists.txt

Lines changed: 74 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,24 @@ endif()
1616

1717
find_package(ament_cmake REQUIRED)
1818
find_package(angles REQUIRED)
19-
find_package(rclcpp REQUIRED)
19+
find_package(Boost REQUIRED)
20+
find_package(builtin_interfaces REQUIRED)
2021
find_package(diagnostic_msgs REQUIRED)
2122
find_package(diagnostic_updater REQUIRED)
23+
find_package(Eigen3 REQUIRED)
2224
find_package(geographic_msgs REQUIRED)
2325
find_package(geometry_msgs REQUIRED)
2426
find_package(message_filters REQUIRED)
2527
find_package(nav_msgs REQUIRED)
28+
find_package(rclcpp REQUIRED)
2629
find_package(rosidl_default_generators REQUIRED)
2730
find_package(sensor_msgs REQUIRED)
31+
find_package(std_msgs REQUIRED)
2832
find_package(std_srvs REQUIRED)
2933
find_package(tf2 REQUIRED)
3034
find_package(tf2_eigen REQUIRED)
3135
find_package(tf2_geometry_msgs REQUIRED)
3236
find_package(tf2_ros REQUIRED)
33-
find_package(Eigen3 REQUIRED)
34-
find_package(Boost REQUIRED)
3537
find_package(yaml_cpp_vendor REQUIRED)
3638
find_package(yaml-cpp REQUIRED)
3739

@@ -57,12 +59,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
5759
ADD_LINTER_TESTS
5860
)
5961

60-
include_directories(SYSTEM ${Eigen_INCLUDE_DIRS})
61-
include_directories(
62-
include
63-
${EIGEN3_INCLUDE_DIRS}
64-
${Boost_INCLUDE_DIRS}
65-
)
62+
rosidl_get_typesupport_target(cpp_typesupport_target "${PROJECT_NAME}" "rosidl_typesupport_cpp")
6663

6764
add_library(
6865
${library_name}
@@ -75,95 +72,69 @@ add_library(
7572
src/ros_filter.cpp
7673
src/ros_filter_utilities.cpp
7774
src/ros_robot_localization_listener.cpp)
78-
79-
rosidl_get_typesupport_target(cpp_typesupport_target "${PROJECT_NAME}" "rosidl_typesupport_cpp")
80-
target_link_libraries(${library_name} "${cpp_typesupport_target}")
81-
82-
add_executable(
83-
ekf_node
84-
src/ekf_node.cpp
75+
target_include_directories(${library_name} PUBLIC
76+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
77+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>"
8578
)
86-
87-
add_executable(
88-
ukf_node
89-
src/ukf_node.cpp
90-
)
91-
92-
add_executable(
93-
navsat_transform_node
94-
src/navsat_transform_node.cpp
79+
target_link_libraries(${library_name} PUBLIC
80+
Boost::boost
81+
"${cpp_typesupport_target}"
82+
Eigen3::Eigen
83+
angles::angles
84+
${diagnostic_msgs_TARGETS}
85+
diagnostic_updater::diagnostic_updater
86+
${geographic_msgs_TARGETS}
87+
${geometry_msgs_TARGETS}
88+
message_filters::message_filters
89+
${nav_msgs_TARGETS}
90+
rclcpp::rclcpp
91+
${sensor_msgs_TARGETS}
92+
${std_msgs_TARGETS}
93+
${std_srvs_TARGETS}
94+
tf2::tf2
95+
tf2_eigen::tf2_eigen
96+
tf2_geometry_msgs::tf2_geometry_msgs
97+
tf2_ros::tf2_ros
9598
)
96-
97-
add_executable(
98-
robot_localization_listener_node
99-
src/robot_localization_listener_node.cpp
100-
)
101-
102-
target_link_libraries(
103-
${library_name}
99+
target_link_libraries(${library_name} PRIVATE
104100
${GeographicLib_LIBRARIES}
105-
${EIGEN3_LIBRARIES}
106101
yaml-cpp::yaml-cpp
107102
)
108103

109-
ament_target_dependencies(
110-
${library_name}
111-
angles
112-
diagnostic_msgs
113-
diagnostic_updater
114-
geographic_msgs
115-
geometry_msgs
116-
message_filters
117-
nav_msgs
118-
rclcpp
119-
sensor_msgs
120-
std_msgs
121-
std_srvs
122-
tf2
123-
tf2_eigen
124-
tf2_geometry_msgs
125-
tf2_ros
126-
yaml_cpp_vendor
127-
)
128-
129-
target_link_libraries(
130-
ekf_node
131-
${library_name}
132-
)
133-
134-
ament_target_dependencies(
104+
add_executable(
135105
ekf_node
136-
rclcpp
106+
src/ekf_node.cpp
137107
)
138-
139-
target_link_libraries(
140-
ukf_node
108+
target_link_libraries(ekf_node PRIVATE
141109
${library_name}
110+
rclcpp::rclcpp
142111
)
143112

144-
ament_target_dependencies(
113+
add_executable(
145114
ukf_node
146-
rclcpp
115+
src/ukf_node.cpp
147116
)
148-
149-
target_link_libraries(
150-
navsat_transform_node
117+
target_link_libraries(ukf_node PRIVATE
151118
${library_name}
119+
rclcpp::rclcpp
152120
)
153121

154-
ament_target_dependencies(
122+
add_executable(
155123
navsat_transform_node
156-
rclcpp
124+
src/navsat_transform_node.cpp
157125
)
158-
159-
target_link_libraries(
160-
robot_localization_listener_node
126+
target_link_libraries(navsat_transform_node PRIVATE
161127
${library_name}
128+
rclcpp::rclcpp
162129
)
163130

164-
ament_target_dependencies(
131+
add_executable(
165132
robot_localization_listener_node
166-
rclcpp
133+
src/robot_localization_listener_node.cpp
134+
)
135+
target_link_libraries(robot_localization_listener_node PRIVATE
136+
${library_name}
137+
rclcpp::rclcpp
167138
)
168139

169140
if(BUILD_TESTING)
@@ -174,6 +145,8 @@ if(BUILD_TESTING)
174145
find_package(ament_cmake_uncrustify REQUIRED)
175146
find_package(launch_testing_ament_cmake REQUIRED)
176147

148+
ament_find_gtest()
149+
177150
#### FILTER BASE TESTS ####
178151
ament_add_gtest(filter_base-test test/test_filter_base.cpp)
179152
target_link_libraries(filter_base-test ${library_name})
@@ -183,7 +156,6 @@ if(BUILD_TESTING)
183156
test/test_filter_base_diagnostics_timestamps.cpp)
184157
target_link_libraries(test_filter_base_diagnostics_timestamps ${library_name})
185158

186-
rosidl_get_typesupport_target(cpp_typesupport_target "${PROJECT_NAME}" "rosidl_typesupport_cpp")
187159
target_link_libraries(test_filter_base_diagnostics_timestamps "${cpp_typesupport_target}")
188160

189161
add_dependencies(test_filter_base_diagnostics_timestamps ekf_node)
@@ -292,7 +264,8 @@ if(BUILD_TESTING)
292264

293265
#### NAVSAT CONVERSION TESTS ####
294266
ament_add_gtest(test_navsat_conversions test/test_navsat_conversions.cpp)
295-
target_link_libraries(test_navsat_conversions ${library_name})
267+
target_include_directories(test_navsat_conversions PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>")
268+
target_link_libraries(test_navsat_conversions ${library_name} ${GeographicLib_LIBRARIES})
296269

297270
ament_add_gtest_executable(test_ros_robot_localization_listener
298271
test/test_ros_robot_localization_listener.cpp)
@@ -355,6 +328,7 @@ install(
355328
)
356329

357330
install(TARGETS ${library_name}
331+
EXPORT ${PROJECT_NAME}
358332
ARCHIVE DESTINATION lib
359333
LIBRARY DESTINATION lib
360334
RUNTIME DESTINATION bin
@@ -373,7 +347,27 @@ install(DIRECTORY
373347
USE_SOURCE_PERMISSIONS
374348
)
375349

376-
ament_export_include_directories(include)
350+
ament_export_include_directories(include/${PROJECT_NAME})
377351
ament_export_libraries(${library_name})
378-
ament_export_dependencies(rosidl_default_runtime)
352+
ament_export_dependencies(
353+
angles
354+
Boost
355+
diagnostic_msgs
356+
diagnostic_updater
357+
Eigen3
358+
geographic_msgs
359+
geometry_msgs
360+
message_filters
361+
nav_msgs
362+
rclcpp
363+
rosidl_default_runtime
364+
sensor_msgs
365+
std_msgs
366+
std_srvs
367+
tf2
368+
tf2_eigen
369+
tf2_geometry_msgs
370+
tf2_ros
371+
)
372+
ament_export_targets(${PROJECT_NAME})
379373
ament_package()

package.xml

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<version>3.9.0</version>
66
<description>Provides nonlinear state estimation through sensor fusion of an abritrary number of sensors.</description>
77

8-
<author email="[email protected]">Tom Moore</author>
8+
<author email="[email protected]">Tom Moore</author>
99
<maintainer email="[email protected]">Tom Moore</maintainer>
1010
<maintainer email="[email protected]">Steve Macenski</maintainer>
1111

@@ -20,17 +20,17 @@
2020
<build_depend>libboost-dev</build_depend>
2121
<build_export_depend>libboost-dev</build_export_depend>
2222

23+
<depend>angles</depend>
24+
<depend>builtin_interfaces</depend>
25+
<depend>diagnostic_msgs</depend>
26+
<depend>diagnostic_updater</depend>
2327
<depend>eigen</depend>
2428
<depend>geographic_msgs</depend>
2529
<depend>geometry_msgs</depend>
26-
<depend>diagnostic_msgs</depend>
27-
<depend>diagnostic_updater</depend>
2830
<depend>geographiclib</depend>
2931
<depend>message_filters</depend>
3032
<depend>nav_msgs</depend>
31-
<depend>angles</depend>
32-
<build_depend>rclcpp</build_depend>
33-
<build_depend>rmw_implementation</build_depend>
33+
<depend>rclcpp</depend>
3434
<depend>sensor_msgs</depend>
3535
<depend>std_msgs</depend>
3636
<depend>std_srvs</depend>
@@ -40,18 +40,14 @@
4040
<depend>tf2_ros</depend>
4141
<depend>yaml_cpp_vendor</depend>
4242

43-
<test_depend>ament_cmake_gtest</test_depend>
44-
<test_depend>builtin_interfaces</test_depend>
4543
<exec_depend>rosidl_default_runtime</exec_depend>
46-
47-
<exec_depend>rclcpp</exec_depend>
48-
<exec_depend>rmw_implementation</exec_depend>
4944

45+
<test_depend>ament_cmake_gtest</test_depend>
5046
<test_depend>ament_lint_auto</test_depend>
5147
<test_depend>ament_lint_common</test_depend>
5248
<test_depend>launch_ros</test_depend>
5349
<test_depend>launch_testing_ament_cmake</test_depend>
54-
50+
5551
<member_of_group>rosidl_interface_packages</member_of_group>
5652

5753
<export>

include/robot_localization/navsat_conversions.hpp renamed to src/navsat_conversions.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
* https://github.com/austin-robot/utexas-art-ros-pkg/blob/afd147a1eb944fc3dbd138574c39699813f797bf/stacks/art_vehicle/art_common/include/art/UTM.h
3737
* https://github.com/austin-robot/utexas-art-ros-pkg/blob/afd147a1eb944fc3dbd138574c39699813f797bf/stacks/art_vehicle/art_common/include/art/conversions.h
3838
*/
39-
#ifndef ROBOT_LOCALIZATION__NAVSAT_CONVERSIONS_HPP_
40-
#define ROBOT_LOCALIZATION__NAVSAT_CONVERSIONS_HPP_
39+
#ifndef NAVSAT_CONVERSIONS_HPP_
40+
#define NAVSAT_CONVERSIONS_HPP_
4141

4242
/** @file
4343
@@ -222,4 +222,4 @@ static inline void UTMtoLL(
222222
} // namespace navsat_conversions
223223
} // namespace robot_localization
224224

225-
#endif // ROBOT_LOCALIZATION__NAVSAT_CONVERSIONS_HPP_
225+
#endif // NAVSAT_CONVERSIONS_HPP_

src/navsat_transform.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#include "rclcpp/qos.hpp"
4444
#include "rclcpp/rclcpp.hpp"
4545
#include "robot_localization/filter_common.hpp"
46-
#include "robot_localization/navsat_conversions.hpp"
46+
#include "navsat_conversions.hpp"
4747
#include "robot_localization/ros_filter_utilities.hpp"
4848
#include "robot_localization/srv/from_ll.hpp"
4949
#include "robot_localization/srv/set_datum.hpp"

test/test_navsat_conversions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
#include <string>
3636

37-
#include "robot_localization/navsat_conversions.hpp"
37+
#include "navsat_conversions.hpp"
3838

3939
void NavsatConversionsTest(
4040
const double lat, const double lon,

0 commit comments

Comments
 (0)