Skip to content

Commit 21289e6

Browse files
authored
Port terrain planner benchmark to ros2 (#73)
* Fix terrain_planner export missing dependencies Signed-off-by: Ryan Friedman <25047695+Ryanf55@users.noreply.github.com> * Fix boost export Signed-off-by: Ryan Friedman <25047695+Ryanf55@users.noreply.github.com> * Port terrain planner benchmark to ROS 2 * Only ported the terrain_planner_benchmark_node so far, the rest are excluded Signed-off-by: Ryan Friedman <25047695+Ryanf55@users.noreply.github.com> * Document and don't install resources Signed-off-by: Ryan Friedman <25047695+Ryanf55@users.noreply.github.com> --------- Signed-off-by: Ryan Friedman <25047695+Ryanf55@users.noreply.github.com>
1 parent 076f49e commit 21289e6

File tree

13 files changed

+189
-126
lines changed

13 files changed

+189
-126
lines changed

terrain_navigation_ros/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ find_package(sensor_msgs REQUIRED)
4646
find_package(tf2_geometry_msgs REQUIRED)
4747
find_package(visualization_msgs REQUIRED)
4848

49-
find_package(Boost REQUIRED COMPONENTS serialization system filesystem)
49+
find_package(Boost REQUIRED)
5050
find_package(Eigen3 REQUIRED)
5151

5252
if(CMAKE_SYSTEM_NAME STREQUAL Linux)

terrain_planner/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ find_package(geometry_msgs REQUIRED)
3333
find_package(grid_map_msgs REQUIRED)
3434
find_package(tf2_geometry_msgs REQUIRED)
3535

36-
find_package(Boost REQUIRED COMPONENTS serialization system filesystem)
36+
find_package(Boost REQUIRED)
3737
find_package(Eigen3 REQUIRED)
3838
find_package(OpenCV REQUIRED)
3939
find_package(ompl REQUIRED)
@@ -74,6 +74,7 @@ ament_target_dependencies(${PROJECT_NAME} PUBLIC
7474
grid_map_core
7575
grid_map_geo
7676
terrain_navigation
77+
Boost
7778
)
7879

7980
# Executables
@@ -176,6 +177,12 @@ install(DIRECTORY
176177
DESTINATION share/${PROJECT_NAME}/
177178
)
178179

180+
ament_export_dependencies(
181+
Boost
182+
tf2_geometry_msgs
183+
tf2_eigen
184+
)
185+
179186
# Test
180187
if(BUILD_TESTING)
181188
find_package(ament_cmake_gtest REQUIRED)
Lines changed: 49 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,64 @@
1-
cmake_minimum_required(VERSION 2.8.12)
1+
cmake_minimum_required(VERSION 3.14.4)
22
project(terrain_planner_benchmark)
33

4-
add_definitions(-std=c++17 -Wall)
4+
if(NOT CMAKE_C_STANDARD)
5+
set(CMAKE_C_STANDARD 99)
6+
endif()
7+
if(NOT CMAKE_CXX_STANDARD)
8+
set(CMAKE_CXX_STANDARD 17)
9+
endif()
510

6-
find_package(GDAL)
7-
find_package(OpenCV REQUIRED)
8-
find_package(ompl REQUIRED)
9-
10-
find_package(catkin REQUIRED COMPONENTS
11-
eigen_catkin
12-
grid_map_core
13-
grid_map_cv
14-
grid_map_msgs
15-
grid_map_ros
16-
grid_map_pcl
17-
grid_map_geo
18-
terrain_navigation
19-
terrain_planner
20-
)
21-
22-
catkin_package(
23-
INCLUDE_DIRS include
24-
LIBRARIES terrain_planner_benchmark
25-
)
26-
27-
include_directories(
28-
${catkin_INCLUDE_DIRS}
29-
include
30-
${Boost_INCLUDE_DIR}
31-
${Eigen_INCLUDE_DIRS}
32-
${GeographicLib_INCLUDE_DIRS}
33-
${OMPL_INCLUDE_DIR}
34-
)
11+
# Set policy for 3.16 for CMP0076 defaulting to ON
12+
cmake_policy(VERSION 3.16)
3513

36-
add_library(${PROJECT_NAME}
37-
src/terrain_planner_benchmark.cpp
38-
)
39-
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
40-
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${GeographicLib_LIBRARIES} ${OMPL_LIBRARIES})
14+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
15+
add_compile_options(-Wall -Wextra -Wpedantic)
16+
endif()
4117

42-
add_executable(terrain_planner_benchmark_node
43-
src/terrain_planner_benchmark_node.cpp
44-
)
45-
add_dependencies(terrain_planner_benchmark_node ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
46-
target_link_libraries(terrain_planner_benchmark_node ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} pthread)
18+
find_package(ament_cmake REQUIRED)
19+
find_package(GDAL 3.5)
20+
find_package(OpenCV REQUIRED)
21+
find_package(ompl REQUIRED)
4722

48-
add_executable(ompl_benchmark_node
49-
src/ompl_benchmark_node.cpp
50-
)
51-
add_dependencies(ompl_benchmark_node ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
52-
target_link_libraries(ompl_benchmark_node ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} pthread)
23+
find_package(grid_map_core REQUIRED)
24+
find_package(grid_map_cv REQUIRED)
25+
find_package(grid_map_msgs REQUIRED)
26+
find_package(grid_map_ros REQUIRED)
27+
find_package(grid_map_pcl REQUIRED)
28+
find_package(grid_map_geo REQUIRED)
29+
find_package(terrain_navigation REQUIRED)
30+
find_package(Boost REQUIRED) # Workaround for terrain_planner not exporting this correctly
31+
find_package(terrain_planner REQUIRED)
5332

54-
add_executable(test_ics
55-
src/test_ics.cpp
56-
)
57-
add_dependencies(test_ics ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
58-
target_link_libraries(test_ics ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
33+
add_library(${PROJECT_NAME})
34+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
5935

60-
add_executable(test_rrt_replanning_node
61-
src/test_rrt_replanning_node.cpp
36+
target_include_directories(${PROJECT_NAME}
37+
PUBLIC
38+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
6239
)
63-
add_dependencies(test_rrt_replanning_node ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
64-
target_link_libraries(test_rrt_replanning_node ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
6540

66-
add_executable(surface_visualization
67-
src/surface_visualization.cpp
68-
)
69-
add_dependencies(surface_visualization ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
70-
target_link_libraries(surface_visualization ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
41+
add_executable(terrain_planner_benchmark_node)
42+
add_executable(ompl_benchmark_node EXCLUDE_FROM_ALL)
43+
add_executable(test_ics EXCLUDE_FROM_ALL)
44+
add_executable(test_rrt_replanning_node EXCLUDE_FROM_ALL)
45+
add_executable(surface_visualization EXCLUDE_FROM_ALL)
46+
add_executable(test_dubins_classification EXCLUDE_FROM_ALL)
47+
add_executable(run_replay EXCLUDE_FROM_ALL)
48+
add_executable(test_rrt_circle_goal EXCLUDE_FROM_ALL)
49+
add_subdirectory(src)
7150

72-
add_executable(test_dubins_classification
73-
src/test_dubins_classification.cpp
51+
include(GNUInstallDirs)
52+
install(
53+
TARGETS
54+
terrain_planner_benchmark_node
55+
EXPORT export_${PROJECT_NAME}
56+
DESTINATION lib/${PROJECT_NAME}
7457
)
75-
add_dependencies(test_dubins_classification ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
76-
target_link_libraries(test_dubins_classification ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
7758

78-
add_executable(run_replay
79-
src/rviz_replay.cpp
59+
install(DIRECTORY
60+
launch
61+
DESTINATION share/${PROJECT_NAME}/
8062
)
81-
add_dependencies(run_replay ${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
82-
target_link_libraries(run_replay ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
8363

84-
add_executable(test_rrt_circle_goal
85-
src/test_rrt_circle_goal.cpp
86-
)
87-
add_dependencies(test_rrt_circle_goal terrain_planner ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${GDAL_LIBRARY})
88-
target_link_libraries(test_rrt_circle_goal ${PROJECT_NAME} ${catkin_LIBRARIES} ${GDAL_LIBRARY} ${OpenCV_LIBRARIES} ${OMPL_LIBRARIES})
64+
ament_package()

terrain_planner_benchmark/COLCON_IGNORE

Whitespace-only changes.

terrain_planner_benchmark/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Terrain Planner Benchmark
2+
3+
This package currently depends on a private terrain dataset.
4+
See [74](https://github.com/ethz-asl/terrain-navigation/issues/74) for details.
5+
6+
## Build
7+
8+
Build this repository, and your terrain source.
9+
```
10+
colcon build --packages-up-to terrain_planner_benchmark terrain_models
11+
```
12+
13+
## Terrain Planner Benchmark Node
14+
15+
```bash
16+
source install/setup.bash
17+
ros2 launch terrain_planner_benchmark goaltype_benchmark.launch
18+
```

terrain_planner_benchmark/include/terrain_planner_benchmark/rviz_replay.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ class ReplayRunner {
5555
nh_.subscribe("/grid_map", 1, &ReplayRunner::GridmapCallback, this, ros::TransportHints().tcpNoDelay());
5656
vehicle_position_sub_ = nh_.subscribe("/planner_status", 10, &ReplayRunner::plannerStatusCallback, this);
5757
planner_status_pub_ = nh_.advertise<planner_msgs::NavigationStatus>("planner_status2", 1);
58-
path_segment_pub_ = nh_.advertise<visualization_msgs::Marker>("visualized_path", 1);
59-
reference_visual_pub_ = nh_.advertise<visualization_msgs::Marker>("visualized_reference", 1);
58+
path_segment_pub_ = nh_.advertise<visualization_msgs::msg::Marker>("visualized_path", 1);
59+
reference_visual_pub_ = nh_.advertise<visualization_msgs::msg::Marker>("visualized_reference", 1);
6060
terrain_info_pub_ = nh_.advertise<planner_msgs::TerrainInfo>("terrain_info", 1);
6161
double statusloop_dt_ = 0.05;
6262
ros::TimerOptions statuslooptimer_options(
@@ -133,10 +133,10 @@ class ReplayRunner {
133133
}
134134

135135
// Visualize vehicle path and path reference
136-
visualization_msgs::Marker marker = trajectory2MarkerMsg(vehicle_history_, 0, Eigen::Vector3d(1.0, 0.0, 1.0));
136+
visualization_msgs::msg::Marker marker = trajectory2MarkerMsg(vehicle_history_, 0, Eigen::Vector3d(1.0, 0.0, 1.0));
137137
path_segment_pub_.publish(marker);
138138

139-
// visualization_msgs::Marker reference_marker = trajectory2MarkerMsg(reference_history_, 0, "viridis");
139+
// visualization_msgs::msg::Marker reference_marker = trajectory2MarkerMsg(reference_history_, 0, "viridis");
140140
std::vector<Eigen::Vector3d> segment_colors;
141141
for (auto& segment_id : segment_history_) {
142142
const std::vector<std::vector<float>>& ctable = colorMap.at("gist_rainbow");
@@ -154,7 +154,7 @@ class ReplayRunner {
154154
static_cast<double>(rgb[2]));
155155
segment_colors.push_back(segment_color);
156156
}
157-
visualization_msgs::Marker reference_marker = trajectory2MarkerMsg(reference_history_, 0, segment_colors);
157+
visualization_msgs::msg::Marker reference_marker = trajectory2MarkerMsg(reference_history_, 0, segment_colors);
158158
reference_visual_pub_.publish(reference_marker);
159159
};
160160

terrain_planner_benchmark/launch/goaltype_benchmark.launch

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
<arg name="location" default="dischma"/>
33
<arg name="runs" default="50"/>
44

5-
<node pkg="tf" type="static_transform_publisher" name="world_map" args="0 0 0 0 0 0 world map 10"/>
5+
<node pkg="tf2_ros" exec="static_transform_publisher" name="world_map" args="--frame-id world --child-frame-id map"/>
66

7-
<node pkg="terrain_planner_benchmark" type="terrain_planner_benchmark_node" name="benchmark_planner" output="screen" required="true">
8-
<param name="location" value="$(arg location)"/>
9-
<param name="map_path" value="$(find terrain_models)/models/$(arg location).tif"/>
10-
<param name="color_file_path" value="$(find terrain_models)/models/$(arg location)_color.tif"/>
11-
<param name="output_directory" value="$(find terrain_planner)/../output"/>
12-
<param name="number_of_runs" value="$(arg runs)"/>
7+
<node pkg="terrain_planner_benchmark" exec="terrain_planner_benchmark_node" name="benchmark_planner" output="screen">
8+
<param name="location" value="$(var location)"/>
9+
<param name="map_path" value="$(find-pkg-share terrain_models)/models/$(var location).tif"/>
10+
<param name="color_file_path" value="$(find-pkg-share terrain_models)/models/$(var location)_color.tif"/>
11+
<param name="output_directory" value="$(find-pkg-share terrain_planner)/../output"/>
12+
<param name="number_of_runs" value="$(var runs)"/>
1313
<param name="random" value="true"/>
1414
</node>
1515
</launch>

terrain_planner_benchmark/package.xml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<package>
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
24
<name>terrain_planner_benchmark</name>
35
<version>0.0.1</version>
46
<description>Benchmarking framework for terrain planners</description>
@@ -13,8 +15,7 @@
1315
<url type="bugtracker">https://github.com/Jaeyoung-Lim/steep-terrain-navigation/issues</url>
1416

1517
<!-- Dependencies which this package needs to build itself. -->
16-
<buildtool_depend>catkin</buildtool_depend>
17-
<build_depend>eigen_catkin</build_depend>
18+
<buildtool_depend>ament_cmake</buildtool_depend>
1819
<build_depend>grid_map_core</build_depend>
1920
<build_depend>grid_map_cv</build_depend>
2021
<build_depend>grid_map_ros</build_depend>
@@ -24,8 +25,9 @@
2425
<build_depend>terrain_navigation</build_depend>
2526
<build_depend>ompl</build_depend>
2627
<build_depend>terrain_planner</build_depend>
27-
<run_depend>eigen_catkin</run_depend>
28-
<run_depend>python3-gdal</run_depend>
28+
<exec_depend>python3-gdal</exec_depend>
29+
2930
<export>
31+
<build_type>ament_cmake</build_type>
3032
</export>
3133
</package>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
target_sources(${PROJECT_NAME}
2+
PRIVATE
3+
terrain_planner_benchmark.cpp
4+
)
5+
target_link_libraries(${PROJECT_NAME}
6+
PUBLIC
7+
terrain_navigation::terrain_navigation
8+
terrain_planner::terrain_planner
9+
${OpenCV_LIBRARIES} ${GeographicLib_LIBRARIES} ${OMPL_LIBRARIES}
10+
)
11+
12+
target_sources(${PROJECT_NAME}_node
13+
PRIVATE
14+
terrain_planner_benchmark_node.cpp
15+
)
16+
target_link_libraries(${PROJECT_NAME}_node
17+
PRIVATE
18+
${PROJECT_NAME}::${PROJECT_NAME} rclcpp::rclcpp ${geometry_msgs_TARGETS}
19+
)
20+
21+
target_sources(ompl_benchmark_node
22+
PRIVATE
23+
ompl_benchmark_node.cpp
24+
)
25+
26+
target_sources(test_ics
27+
PRIVATE
28+
test_ics.cpp
29+
)
30+
31+
target_sources(test_rrt_replanning_node
32+
PRIVATE
33+
test_rrt_replanning_node.cpp
34+
)
35+
36+
target_sources(surface_visualization
37+
PRIVATE
38+
surface_visualization.cpp
39+
)
40+
41+
target_sources(test_dubins_classification
42+
PRIVATE
43+
test_dubins_classification.cpp
44+
)
45+
46+
target_sources(run_replay
47+
PRIVATE
48+
rviz_replay.cpp
49+
)
50+
51+
target_sources(test_rrt_circle_goal
52+
PRIVATE
53+
test_rrt_circle_goal.cpp
54+
)

0 commit comments

Comments
 (0)