-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathCMakeLists.txt
302 lines (263 loc) · 9.22 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
cmake_minimum_required(VERSION 2.8.3)
project(vrx_gazebo)
# We need erb to process the .world.erb files.
find_program(ERB_EXE_PATH erb)
if(NOT ERB_EXE_PATH)
message(FATAL_ERROR "Could not find the `erb` tool. Try `sudo apt-get install ruby`")
endif()
set (CMAKE_AUTOMOC ON)
set (CMAKE_AUTOUIC ON)
find_package (Qt5Widgets REQUIRED)
find_package (Qt5Core REQUIRED)
find_package (Protobuf REQUIRED)
find_package (gazebo REQUIRED)
find_package(catkin REQUIRED COMPONENTS
message_generation
wamv_gazebo
xacro
gazebo_dev
geographic_msgs
std_msgs
rospy
roscpp
)
########################
## Message generation ##
########################
add_message_files(
FILES
Task.msg
Contact.msg
FloatStamped.msg
)
add_service_files(
FILES
ColorSequence.srv
)
# Python scripts setup
catkin_python_setup()
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS wamv_gazebo xacro gazebo_dev geographic_msgs std_msgs message_runtime
)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
include_directories(include ${catkin_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${QT_USE_FILE}
${GAZEBO_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}/msgs
)
link_directories(${GAZEBO_LIBRARY_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/msgs)
add_subdirectory(msgs)
add_definitions(${QT_DEFINITIONS})
# Plugin for setting color of light buoy.
add_library(light_buoy_plugin src/light_buoy_plugin.cc)
target_link_libraries(light_buoy_plugin
${catkin_LIBRARIES}
light_buoy_colors_msgs
)
add_dependencies(light_buoy_plugin ${catkin_EXPORTED_TARGETS}
light_buoy_colors_msgs
)
install(TARGETS light_buoy_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Plugin for setting color and shape of a placard.
add_library(placard_plugin src/placard_plugin.cc)
target_link_libraries(placard_plugin
${catkin_LIBRARIES}
dock_placard_msgs
)
add_dependencies(placard_plugin
${catkin_EXPORTED_TARGETS}
dock_placard_msgs
)
install(TARGETS placard_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# A generic scoring plugin.
add_library(scoring_plugin src/scoring_plugin.cc)
target_link_libraries(scoring_plugin
${catkin_LIBRARIES}
)
add_dependencies(scoring_plugin
${catkin_EXPORTED_TARGETS}
vrx_gazebo_generate_messages_cpp
vrx_gazebo_generate_services_cpp
)
install(TARGETS scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Plugin for scoring the navigation challenge task.
add_library(navigation_scoring_plugin src/navigation_scoring_plugin.cc)
target_link_libraries(navigation_scoring_plugin
${catkin_LIBRARIES}
scoring_plugin)
add_dependencies(navigation_scoring_plugin ${catkin_EXPORTED_TARGETS})
install(TARGETS navigation_scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Plugin for scoring the station keeping challenge task.
add_library(stationkeeping_scoring_plugin src/stationkeeping_scoring_plugin.cc)
target_link_libraries(stationkeeping_scoring_plugin
${catkin_LIBRARIES}
scoring_plugin)
add_dependencies(stationkeeping_scoring_plugin ${catkin_EXPORTED_TARGETS})
install(TARGETS stationkeeping_scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Plugin for scoring the waypoint navigation challenge task.
add_library(wayfinding_scoring_plugin src/wayfinding_scoring_plugin.cc)
target_link_libraries(wayfinding_scoring_plugin
${catkin_LIBRARIES}
scoring_plugin)
add_dependencies(wayfinding_scoring_plugin ${catkin_EXPORTED_TARGETS})
install(TARGETS wayfinding_scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Plugin for scoring the scan and dock task.
add_library(scan_dock_scoring_plugin src/scan_dock_scoring_plugin.cc)
target_link_libraries(scan_dock_scoring_plugin
${catkin_LIBRARIES}
scoring_plugin
light_buoy_colors_msgs
dock_placard_msgs
)
add_dependencies(scan_dock_scoring_plugin
${catkin_EXPORTED_TARGETS}
light_buoy_colors_msgs
dock_placard_msgs
)
install(TARGETS scan_dock_scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
if("${GAZEBO_MAJOR_VERSION}" GREATER "7")
# Plugin for Task Info GUI Overlay
add_library(gui_task_widget SHARED ${headers_MOC}
src/gui_task_widget.cc
)
target_link_libraries(gui_task_widget
${catkin_LIBRARIES}
${GAZEBO_LIBRARIES}
${PROTOBUF_LIBRARIES}
${QT_LIBRARIES}
)
qt5_use_modules(gui_task_widget Widgets)
add_dependencies(gui_task_widget ${catkin_EXPORTED_TARGETS})
install(TARGETS gui_task_widget
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
endif()
# Plugin for scoring the perception task.
add_library(perception_scoring_plugin src/perception_scoring_plugin.cc)
target_link_libraries(perception_scoring_plugin
${catkin_LIBRARIES}
scoring_plugin)
add_dependencies(perception_scoring_plugin ${catkin_EXPORTED_TARGETS})
install(TARGETS perception_scoring_plugin
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Dock base files that need to be processed with erb
set (dock_base_erb_files
models/dock_2016_base/model.sdf.erb
models/dock_2018_base/model.sdf.erb
)
# Dock files that need to be processed with erb
set (dock_erb_files
models/dock_2016/model.sdf.erb
models/dock_2018/model.sdf.erb
)
# Process the dock base erb files
foreach(_erb ${dock_base_erb_files})
string(REGEX REPLACE ".sdf.erb" ".sdf" _model ${_erb})
set(_model ${CMAKE_CURRENT_SOURCE_DIR}/${_model})
add_custom_command(OUTPUT ${_model}
COMMAND ${ERB_EXE_PATH} ${_erb} > ${_model}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${_erb}
${CMAKE_CURRENT_SOURCE_DIR}/dock_generator.erb
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
list(APPEND dock_base_files ${_model})
endforeach()
add_custom_target(dock_base_erb_generation ALL DEPENDS ${dock_base_files})
# Process the dock erb files
foreach(_erb ${dock_erb_files})
string(REGEX REPLACE ".sdf.erb" ".sdf" _model ${_erb})
set(_model ${CMAKE_CURRENT_SOURCE_DIR}/${_model})
add_custom_command(OUTPUT ${_model}
COMMAND ${ERB_EXE_PATH} ${_erb} > ${_model}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/${_erb}
${CMAKE_CURRENT_SOURCE_DIR}/dock_generator.erb
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
list(APPEND dock_files ${_model})
endforeach()
add_custom_target(dock_erb_generation ALL
DEPENDS
${dock_files}
dock_base_erb_generation
)
# Generate world files from xacro and install
xacro_add_files(
worlds/example_course.world.xacro
worlds/navigation_task.world.xacro
worlds/perception_task.world.xacro
worlds/sandisland.world.xacro
worlds/dock.world.xacro
worlds/scan_and_dock.world.xacro
worlds/stationkeeping_task.world.xacro
worlds/wayfinding_task.world.xacro
worlds/wind_test.world.xacro
INORDER INSTALL DESTINATION worlds
)
# Generate obstacle course
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/models/robotx_2018_qualifying_avoid_obstacles_buoys/model.sdf
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_avoid_obstacles_buoys
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_avoid_obstacles_buoys --seed 1337 --a3 6 --a5 7 --a7 7 > ${CMAKE_CURRENT_SOURCE_DIR}/models/robotx_2018_qualifying_avoid_obstacles_buoys/model.sdf
)
add_custom_target(${PROJECT_NAME}_generate_obstacle_course_buoys ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/models/robotx_2018_qualifying_avoid_obstacles_buoys/model.sdf)
# Install all the config files
install(DIRECTORY config/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config)
# Install all the world files
install(DIRECTORY worlds/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/worlds)
# Install all the model files
install(DIRECTORY models/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/models)
# Install all the launch files
install(DIRECTORY launch/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch)
if (CATKIN_ENABLE_TESTING)
find_package(rostest REQUIRED)
add_rostest_gtest(sandisland_test
test/sandisland.test
test/sandisland.cc)
target_link_libraries(sandisland_test ${catkin_LIBRARIES})
endif()
# Python Scripts
catkin_install_python(PROGRAMS bin/generate_wamv
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})