Skip to content

Commit ce65043

Browse files
Talbot, Fletcher (Data61, Pullenvale)Talbot, Fletcher (Data61, Pullenvale)
Talbot, Fletcher (Data61, Pullenvale)
authored and
Talbot, Fletcher (Data61, Pullenvale)
committed
Fixed build procedure + small bug fix + small vis changes
1 parent ce3b247 commit ce65043

14 files changed

+1017
-412
lines changed

CMakeLists.txt

+144-120
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
1-
cmake_minimum_required(VERSION 2.8.3)
1+
# Copyright (c) 2020
2+
# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
3+
# ABN 41 687 119 230
4+
#
5+
# Author: Fletcher Talbot
6+
7+
cmake_minimum_required(VERSION 3.5)
28
project(syropod_highlevel_controller)
39

4-
## Find catkin macros and libraries
5-
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
6-
## is used, also find other catkin packages
10+
set(PACKAGE_VERSION 0.5.11)
11+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/package.xml")
12+
file(READ package.xml PACKAGE_XML)
13+
string(REGEX REPLACE ".*<version>[\\t ]*(.*)[\\t ]*<\\/version>.*" "\\1" PACKAGE_VERSION "${PACKAGE_XML}")
14+
endif(EXISTS "${CMAKE_CURRENT_LIST_DIR}/package.xml")
15+
set(syropod_highlevel_controller_VERSION "${PACKAGE_VERSION}")
16+
17+
# C++ standards setup.
18+
set(CMAKE_CXX_STANDARD 17)
19+
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
20+
# Ensure -fPIC is added.
21+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
22+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
23+
24+
# Additional CMake modules
25+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
26+
27+
set(CLANG_TIDY_PROJECT_PREFIX SHC) # clang-tidy option prefix
28+
include(compilerSetup) # Setup compiler warnings.
29+
include(clang-tidy) # clang-tidy support
30+
31+
# Find external depedencies.
32+
# Generally, we should specify either CONFIG to use config style scripts, or MODULE for FindPackage scripts.
33+
find_package(Eigen3 REQUIRED)
34+
35+
# Alias eigen include dirs for catkin/version interopability
36+
set(Eigen3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
37+
38+
# Need message generation commands.
739
find_package(catkin REQUIRED COMPONENTS
840
roscpp
941
rospy
@@ -16,41 +48,9 @@ find_package(catkin REQUIRED COMPONENTS
1648
tf2_ros
1749
)
1850

51+
## Generate dynamic reconfigure parameters in the 'cfg' folder
1952
generate_dynamic_reconfigure_options(config/Dynamic.cfg)
2053

21-
## System dependencies are found with CMake's conventions
22-
# find_package(Boost REQUIRED COMPONENTS system)
23-
24-
25-
## Uncomment this if the package has a setup.py. This macro ensures
26-
## modules and global scripts declared therein get installed
27-
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
28-
# catkin_python_setup()
29-
30-
################################################
31-
## Declare ROS messages, services and actions ##
32-
################################################
33-
34-
## To declare and build messages, services or actions from within this
35-
## package, follow these steps:
36-
## * Let MSG_DEP_SET be the set of packages whose message types you use in
37-
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
38-
## * In the file package.xml:
39-
## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
40-
## * If MSG_DEP_SET isn't empty the following dependencies might have been
41-
## pulled in transitively but can be declared for certainty nonetheless:
42-
## * add a build_depend tag for "message_generation"
43-
## * add a run_depend tag for "message_runtime"
44-
## * In this file (CMakeLists.txt):
45-
## * add "message_generation" and every package in MSG_DEP_SET to
46-
## find_package(catkin REQUIRED COMPONENTS ...)
47-
## * add "message_runtime" and every package in MSG_DEP_SET to
48-
## catkin_package(CATKIN_DEPENDS ...)
49-
## * uncomment the add_*_files sections below as needed
50-
## and list every .msg/.srv/.action file to be processed
51-
## * uncomment the generate_messages entry below
52-
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
53-
5454
#Generate messages in the 'msg' folder
5555
add_message_files(
5656
FILES
@@ -59,20 +59,6 @@ generate_dynamic_reconfigure_options(config/Dynamic.cfg)
5959
TargetTipPose.msg
6060
)
6161

62-
## Generate services in the 'srv' folder
63-
# add_service_files(
64-
# FILES
65-
# Service1.srv
66-
# Service2.srv
67-
# )
68-
69-
## Generate actions in the 'action' folder
70-
# add_action_files(
71-
# FILES
72-
# Action1.action
73-
# Action2.action
74-
# )
75-
7662
# Generate added messages and services with any dependencies listed here
7763
generate_messages(
7864
DEPENDENCIES
@@ -92,85 +78,123 @@ generate_dynamic_reconfigure_options(config/Dynamic.cfg)
9278
## DEPENDS: system dependencies of this project that dependent projects also need
9379
catkin_package(
9480
INCLUDE_DIRS include
95-
# LIBRARIES syropod_highlevel_controller
96-
CATKIN_DEPENDS roscpp rospy message_runtime std_msgs sensor_msgs geometry_msgs dynamic_reconfigure
97-
# DEPENDS system_lib
81+
CATKIN_DEPENDS
82+
roscpp
83+
message_runtime
84+
std_msgs
85+
sensor_msgs
86+
geometry_msgs
87+
dynamic_reconfigure
88+
DEPENDS
89+
Eigen3
9890
)
99-
add_definitions(-DEIGEN3_SUPPORT -DDEBUG -std=c++11 -Wall -g -ggdb -O0 -fopenmp -fPIC)
10091

101-
###########
102-
## Build ##
103-
###########
104-
#FILE(GLOB syropod_highlevel_controller_sources "src/*.cpp")
92+
##################################
93+
# Build setup
94+
##################################
95+
96+
# Configure the project config header.
97+
configure_file(shc_config.in.h "${CMAKE_CURRENT_BINARY_DIR}/shc_config.h")
98+
10599
## Specify additional locations of header files
106100
## Your package locations should be listed before other locations
107-
# include_directories(include)
108101
include_directories(
109102
include
110103
${catkin_INCLUDE_DIRS}
111-
/usr/include/eigen3
104+
SYSTEM
105+
${Eigen3_INCLUDE_DIRS}
112106
)
113107

114-
## Declare a cpp library
115-
# add_library(syropod_highlevel_controller
116-
# src/${PROJECT_NAME}/syropod_highlevel_controller.cpp
117-
# )
108+
# Project source files. There are two options here:
109+
# 1. Populate the following varibles inline here:
110+
# - SOURCES for source files to be built and header files associated with built sources.
111+
# - PUBLIC_HEADERS for all headers to be marshalled as part of the public API.
112+
# May double up with SOURCES
113+
# 2. Create a file alongside CMakeLists.txt called "sourcelist.cmake" and populate
114+
# the same varaibles in that file instead, then use "incldue(sourcelist.cmake)" here.
115+
#include(sourcelist.cmake)
116+
# For executables we don't need to concern outselves with PUBLIC_HEADERS as we can assume noone will link to the
117+
# executable. Cases where linking to the executable is requried (e.g., plugins) are beyond the scope of this exercise.
118+
set(SOURCES
119+
src/admittance_controller.cpp
120+
src/debug_visualiser.cpp
121+
src/main.cpp
122+
src/model.cpp
123+
src/pose_controller.cpp
124+
src/state_controller.cpp
125+
src/walk_controller.cpp
126+
# include/${PROJECT_NAME}/admittance_controller.h
127+
# include/${PROJECT_NAME}/debug_visualiser.h
128+
# include/${PROJECT_NAME}/model.h
129+
# include/${PROJECT_NAME}/parameters_and_states.h
130+
# include/${PROJECT_NAME}/pose.h
131+
# include/${PROJECT_NAME}/pose_controller.h
132+
# include/${PROJECT_NAME}/standard_includes.h
133+
# include/${PROJECT_NAME}/state_controller.h
134+
# include/${PROJECT_NAME}/walk_controller.h
135+
shc_config.in.h
136+
)
137+
138+
118139

119-
## Declare a cpp executable
120-
add_executable(syropod_highlevel_controller_node src/main.cpp src/model.cpp src/walk_controller.cpp src/pose_controller.cpp src/debug_visualiser.cpp src/admittance_controller.cpp src/state_controller.cpp)
140+
# Build generated header list.
141+
set(GENERATED_FILES
142+
"${CMAKE_CURRENT_BINARY_DIR}/shc_config.h"
143+
)
144+
145+
# Generate the executable.
146+
add_executable(${PROJECT_NAME}_node include ${SOURCES} ${GENERATED_FILES})
147+
# CMake does not automatically propagate CMAKE_DEBUG_POSTFIX to executables. We do so to avoid confusing link issues
148+
# which can would when building release and debug exectuables to the same path.
149+
# set_target_properties(waypoint_gui_node PROPERTIES DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
121150

122-
## Add cmake target dependencies of the executable/library
123-
## as an example, message headers may need to be generated before nodes
151+
# Add dependencies for catkin exports and exports from this project.
152+
# Variables may be empty, so these lines may need to be disabled. For example, in this case
153+
# ${PROJECT_NAME}_EXPORTED_TARGETS is only availabe because we have generated messages for this package.
154+
add_dependencies(${PROJECT_NAME}_node ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp ${PROJECT_NAME}_gencfg)
124155

125-
## Specify libraries to link a library or executable target against
126-
target_link_libraries(syropod_highlevel_controller_node ${catkin_LIBRARIES} -fopenmp)
127156

128-
add_dependencies(syropod_highlevel_controller_node syropod_highlevel_controller_generate_messages_cpp syropod_highlevel_controller_gencfg)
129-
130-
#############
131-
## Install ##
132-
#############
133-
134-
# all install targets should use catkin DESTINATION variables
135-
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
136-
137-
## Mark executable scripts (Python etc.) for installation
138-
## in contrast to setup.py, you can choose the destination
139-
# install(PROGRAMS
140-
# scripts/my_python_script
141-
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
142-
# )
143-
144-
## Mark executables and/or libraries for installation
145-
# install(TARGETS syropod_highlevel_controller syropod_highlevel_controller_node
146-
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
147-
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
148-
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
149-
# )
150-
151-
## Mark cpp header files for installation
152-
# install(DIRECTORY include/${PROJECT_NAME}/
153-
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
154-
# FILES_MATCHING PATTERN "*.h"
155-
# PATTERN ".svn" EXCLUDE
156-
# )
157-
158-
## Mark other files for installation (e.g. launch and bag files, etc.)
159-
# install(FILES
160-
# # myfile1
161-
# # myfile2
162-
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
163-
# )
164-
165-
#############
166-
## Testing ##
167-
#############
168-
169-
## Add gtest based cpp test target and link libraries
170-
# catkin_add_gtest(${PROJECT_NAME}-test test/test_syropod_highlevel_controller.cpp)
171-
# if(TARGET ${PROJECT_NAME}-test)
172-
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
173-
# endif()
174-
175-
## Add folders to be run by python nosetests
176-
# catkin_add_nosetests(test)
157+
# Add include directories to the target
158+
# For executables, all includes can be private (see set(SOURCES ...) above).
159+
target_include_directories(${PROJECT_NAME}_node
160+
PRIVATE
161+
# Include path for generated files during build.
162+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
163+
# Add parent directory to support include pattern: #include <project_dir/header.h>
164+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..>
165+
)
166+
167+
# Add catkin include directories and system include directories.
168+
# Always add ${catkin_INCLUDE_DIRS} with the SYSTEM argument
169+
# These dependenties should be private as much as possible.
170+
target_include_directories(${PROJECT_NAME}_node SYSTEM
171+
PRIVATE
172+
"${catkin_INCLUDE_DIRS}"
173+
)
174+
175+
# Link dependencies.
176+
# Properly defined targets will also have their include directories and those of dependencies added by this command.
177+
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})
178+
179+
# Enable clang-tidy
180+
clang_tidy_target(${PROJECT_NAME} EXCLUDE_MATCHES ".*\\.in($|\\..*)")
181+
182+
# Setup folder display with the target for Visual Studio. This should always be done to match
183+
# the on disk layout of the source files.
184+
source_group("generated" FILES ${GENERATED_FILES})
185+
source_group("source" REGULAR_EXPRESSION ".*$")
186+
# With CMake 3.8+ you can do the following:
187+
# source_group(TREE "${CMAKE_CURRENT_LIST_DIR}" PREFIX source FILES ${SOURCES})
188+
189+
# Setup installation.
190+
# Binary installation.
191+
install(TARGETS ${PROJECT_NAME}_node
192+
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
193+
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
194+
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
195+
INCLUDES DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
196+
)
197+
198+
install(DIRECTORY config launch rviz_cfg
199+
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
200+
)

0 commit comments

Comments
 (0)