Initial Commit (tested training, testing, and TRT conversion)
This commit is contained in:
321
flightlib/CMakeLists.txt
Normal file
321
flightlib/CMakeLists.txt
Normal file
@@ -0,0 +1,321 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
project(flightlib VERSION 0.1.0)
|
||||
|
||||
message(STATUS "====================== !Flightmare! ======================")
|
||||
|
||||
# ###############################################################################
|
||||
# Options
|
||||
# ###############################################################################
|
||||
option(ENABLE_FAST "Build with optimizations for speed" ON)
|
||||
option(ENABLE_BLAS "Build using BLAS and LAPACK libraries" OFF)
|
||||
option(ENABLE_PARALLEL "Build using openmp parallelization" ON)
|
||||
option(EIGEN_FROM_SYSTTEM "Use the system-provided Eigen" ON)
|
||||
set(
|
||||
EIGEN_ALTERNATIVE "" CACHE STRING
|
||||
"Path to alternative Eigen, autodownload if blank"
|
||||
)
|
||||
|
||||
# ###############################################################################
|
||||
# Finding Dependencies
|
||||
# ###############################################################################
|
||||
|
||||
# Eigen3
|
||||
message(STATUS "======> Setup Dependencies")
|
||||
|
||||
if(EIGEN_FROM_SYSTTEM)
|
||||
find_package(Eigen3 3.3.4 QUIET)
|
||||
|
||||
if(EIGEN3_FOUND)
|
||||
message(STATUS "Using system provided Eigen.")
|
||||
message(${EIGEN3_INCLUDE_DIR})
|
||||
else()
|
||||
message(STATUS "No sufficient Eigen version (3.3.4) found.")
|
||||
message(STATUS "Restoring to download Eigen sources.")
|
||||
include(cmake/eigen.cmake)
|
||||
endif()
|
||||
elseif(EIGEN_ALTERNATIVE STREQUAL "")
|
||||
include(cmake/eigen.cmake)
|
||||
else()
|
||||
set(EIGEN_INCLUDE_DIR ${EIGEN_ALTERNATIVE})
|
||||
endif()
|
||||
|
||||
message(STATUS "Eigen3 include dir: ${EIGEN3_INCLUDE_DIR}")
|
||||
|
||||
# PCL (Many VTK errors are reported, but do not affect compilation)
|
||||
find_package(PCL 1.10 REQUIRED)
|
||||
message(STATUS "Using system provided PCL.")
|
||||
message(${PCL_INCLUDE_DIRS})
|
||||
include_directories(${PCL_INCLUDE_DIRS})
|
||||
link_directories(${PCL_LIBRARY_DIRS})
|
||||
add_definitions(${PCL_DEFINITIONS})
|
||||
|
||||
# Including dependencies
|
||||
find_package(OpenCV REQUIRED)
|
||||
include_directories(${OpenCV_INCLUDE_DIRS})
|
||||
|
||||
# Including dependencies
|
||||
include(cmake/pybind11.cmake)
|
||||
include(cmake/yaml.cmake)
|
||||
|
||||
# Including OpenMP & CUDA
|
||||
find_package(OpenMP REQUIRED)
|
||||
find_package(CUDA REQUIRED)
|
||||
|
||||
if(ENABLE_BLAS)
|
||||
set(BLA_VENDOR "Generic")
|
||||
find_package(BLAS REQUIRED)
|
||||
|
||||
if(BLAS_FOUND)
|
||||
message(STATUS "Found BLAS: ${BLAS_LIBRARIES}")
|
||||
else()
|
||||
message(ERROR "Could not enable BLAS because BLAS was not found")
|
||||
endif()
|
||||
|
||||
find_package(LAPACK REQUIRED)
|
||||
|
||||
if(LAPACK_FOUND)
|
||||
message(STATUS "Found Lapack: ${LAPACK_LIBRARIES}")
|
||||
else()
|
||||
message(ERROR "Could not enable LAPACK because LAPACK was not found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Check for ccache
|
||||
if(NOT DEFINED CATKIN_DEVEL_PREFIX)
|
||||
find_program(CCACHE_PROGRAM ccache)
|
||||
|
||||
if(CCACHE_PROGRAM)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
|
||||
else()
|
||||
message(INFO "Build time could be improved with ccache!")
|
||||
message(INFO "sudo apt install ccache")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ###############################################################################
|
||||
# Setup Compilation Flag
|
||||
# ###############################################################################
|
||||
message(STATUS "======> Setup Compilation ")
|
||||
|
||||
add_definitions(-DEIGEN_STACK_ALLOCATION_LIMIT=1048576)
|
||||
include_directories(${EIGEN_INCLUDE_DIR} "tests")
|
||||
include_directories(${OpenCV_INCLUDE_DIRS})
|
||||
|
||||
# Set default build type
|
||||
if(NOT EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
cuda_select_nvcc_arch_flags(CUDA_ARCH_FLAGS)
|
||||
message("CUDA Architecture: ${CUDA_ARCH_FLAGS}")
|
||||
|
||||
if(${CMAKE_BUILD_TYPE} STREQUAL Release)
|
||||
SET(CUDA_NVCC_FLAGS "${CUDA_ARCH_FLAGS};-O3;-use_fast_math" CACHE STRING "nvcc flags" FORCE)
|
||||
message("build CUDA with -O3")
|
||||
else()
|
||||
message("build CUDA with Debug")
|
||||
SET(CUDA_NVCC_FLAGS "-g ;-G ;${CUDA_ARCH_FLAGS}" CACHE STRING "nvcc flags" FORCE)
|
||||
SET(CUDA_VERBOSE_BUILD ON CACHE BOOL "nvcc verbose" FORCE)
|
||||
endif()
|
||||
|
||||
# Add c++ flags
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -fPIC -Wall -DNDEBUG -fopenmp")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -fPIC -Wall -g -fopenmp")
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
# Architectural flags
|
||||
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
|
||||
message(STATUS "Using ARMv7 optimized flags!")
|
||||
set(CMAKE_CXX_ARCH_FLAGS " -Wno-psabi -march=armv7-a -mfpu=neon -mfloat-abi=hard -funsafe-math-optimizations")
|
||||
elseif("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
|
||||
message(STATUS "Using ARM aarch64 optimized flags!")
|
||||
set(CMAKE_CXX_ARCH_FLAGS " -Wno-psabi -march=armv8-a+crypto -mcpu=cortex-a57+crypto")
|
||||
else()
|
||||
set(CMAKE_CXX_ARCH_FLAGS " -march=native")
|
||||
endif()
|
||||
|
||||
# Optimized flags
|
||||
if(ENABLE_FAST)
|
||||
message(STATUS "Enabling fast optimization flags!")
|
||||
set(CMAKE_CXX_FAST_FLAGS " -Ofast")
|
||||
else()
|
||||
set(CMAKE_CXX_FAST_FLAGS " -O0")
|
||||
endif()
|
||||
|
||||
# BLAS Flags
|
||||
if(BLAS_FOUND AND LAPACK_FOUND)
|
||||
message(STATUS "Enabling BLAS and LAPACK")
|
||||
set(CMAKE_CXX_BLAS_FLAGS " -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACK -DEIGEN_USE_LAPACKE")
|
||||
else()
|
||||
set(CMAKE_CXX_BLAS_FLAGS "")
|
||||
endif()
|
||||
|
||||
# Summarize Flags
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FAST_FLAGS} ${CMAKE_CXX_ARCH_FLAGS} ${CMAKE_CXX_PAR_FLAGS}")
|
||||
string(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||
message(STATUS "The activated CXX RELEASE configuration is:\n ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||
message(STATUS "The activated CXX DEBUG configuration is:\n ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||
|
||||
# ###############################################################################
|
||||
# Specify Build Resources
|
||||
# ###############################################################################
|
||||
message(STATUS "======> Setup Build ")
|
||||
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/arc_utilities)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/sdf_tools)
|
||||
|
||||
# Create file lists for flightlib source
|
||||
file(GLOB_RECURSE FLIGHTLIB_SOURCES
|
||||
src/bridges/*.cpp
|
||||
src/dynamics/*.cpp
|
||||
src/objects/*.cpp
|
||||
src/sensors/*.cpp
|
||||
src/sensors/*.cu
|
||||
src/envs/*.cpp
|
||||
src/common/*.cpp
|
||||
src/grad_traj_optimization/*.cpp
|
||||
)
|
||||
|
||||
# Create file lists for flightlib_gym source
|
||||
file(GLOB_RECURSE FLIGHTLIB_GYM_SOURCES
|
||||
src/wrapper/*.cpp
|
||||
)
|
||||
|
||||
# ###############################################################################
|
||||
# Optional Catkin Build
|
||||
# ###############################################################################
|
||||
if(DEFINED CATKIN_DEVEL_PREFIX)
|
||||
message(STATUS "======> Building with -- catkin -- ")
|
||||
include(cmake/catkin.cmake)
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
roscpp
|
||||
sdf_tools
|
||||
pcl_ros
|
||||
pcl_conversions
|
||||
sensor_msgs
|
||||
)
|
||||
|
||||
# ###############################################################################
|
||||
# Setup Build
|
||||
# ###############################################################################
|
||||
|
||||
# Library and Executables
|
||||
include_directories(include)
|
||||
include_directories(${PROJECT_SOURCE_DIR}/third_party/sdf_tools/include)
|
||||
include_directories(${PROJECT_SOURCE_DIR}/third_party/arc_utilities/include)
|
||||
|
||||
# 1. The Training Lib
|
||||
if(NOT FLIGHTLIB_SOURCES)
|
||||
set(LIBRARY_NAME)
|
||||
else()
|
||||
# flightlib -CUDA
|
||||
cuda_add_library(${PROJECT_NAME} ${FLIGHTLIB_SOURCES})
|
||||
target_link_libraries(${PROJECT_NAME} # PRIVATE
|
||||
${OpenCV_LIBRARIES}
|
||||
${PCL_LIBRARIES}
|
||||
${CUDA_curand_LIBRARY}
|
||||
${CUDA_cublas_LIBRARY}
|
||||
${CUDA_LIBRARIES}
|
||||
${catkin_LIBRARIES} ${PCL_LIBRARIES} ${PROJECT_SOURCE_DIR}
|
||||
yaml-cpp
|
||||
zmq
|
||||
zmqpp
|
||||
stdc++fs)
|
||||
set(LIBRARY_NAME ${PROJECT_NAME})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
||||
endif()
|
||||
|
||||
if(FLIGHTLIB_GYM_SOURCES)
|
||||
# flightlib_gym (python3 binding with Pybind11)
|
||||
pybind11_add_module(flightgym MODULE
|
||||
${FLIGHTLIB_GYM_SOURCES})
|
||||
|
||||
if(EIGEN3_FOUND)
|
||||
target_include_directories(flightgym PRIVATE
|
||||
|
||||
# ${PROJECT_SOURCE_DIR}/externals/pybind11-src/include
|
||||
${PYBIND11_INCLUDE_DIR}
|
||||
${PROJECT_SOURCE_DIR}/include
|
||||
${EIGEN3_INCLUDE_DIR})
|
||||
else()
|
||||
target_include_directories(flightgym PRIVATE
|
||||
|
||||
# ${PROJECT_SOURCE_DIR}/externals/pybind11-src/include
|
||||
${PYBIND11_INCLUDE_DIR}
|
||||
${PROJECT_SOURCE_DIR}/externals/eigen/eigen3 # pybind11 use #include <Eigen/Core>, however, flightmare use #include <eigen3/Eigen/Core>
|
||||
${PROJECT_SOURCE_DIR}/include)
|
||||
endif()
|
||||
|
||||
target_link_libraries(flightgym PRIVATE ${LIBRARY_NAME})
|
||||
endif()
|
||||
|
||||
if(ENABLE_BLAS AND BLAS_FOUND AND LAPACK_FOUND)
|
||||
message(STATUS "Linking standard BLAS ${BLAS_LIBRARIES}")
|
||||
target_link_libraries(${LIBRARY_NAME}
|
||||
${BLAS_LIBRARIES}
|
||||
${LAPACK_LIBRARIES}
|
||||
${LAPACKE_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
# Build Other ROS PKG
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
tf
|
||||
nav_msgs
|
||||
cv_bridge
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${catkin_INCLUDE_DIRS}
|
||||
${PROJECT_SOURCE_DIR}/include
|
||||
)
|
||||
|
||||
# 2. ROS Simulation Node
|
||||
add_executable(flightros_node
|
||||
src/ros_nodes/flight_pilot.cpp
|
||||
src/ros_nodes/flight_pilot_node.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(flightros_node
|
||||
${LIBRARY_NAME}
|
||||
${catkin_LIBRARIES}
|
||||
${OpenCV_LIBRARIES}
|
||||
zmqpp
|
||||
stdc++fs
|
||||
)
|
||||
|
||||
# 3. The Planner
|
||||
add_executable(yopo_planner_node
|
||||
src/ros_nodes/yopo_planner_node.cpp
|
||||
)
|
||||
target_link_libraries(yopo_planner_node
|
||||
${LIBRARY_NAME}
|
||||
${catkin_LIBRARIES}
|
||||
)
|
||||
|
||||
# 4. Tool: Trajectory Evaluation
|
||||
add_executable(traj_eval_node
|
||||
src/ros_nodes/traj_eval_node.cpp
|
||||
)
|
||||
target_link_libraries(traj_eval_node
|
||||
${LIBRARY_NAME}
|
||||
${catkin_LIBRARIES}
|
||||
)
|
||||
|
||||
# 5. Tool: Map Visualization
|
||||
add_executable(map_visual_node
|
||||
src/ros_nodes/map_visual_node.cpp
|
||||
)
|
||||
target_link_libraries(map_visual_node
|
||||
${LIBRARY_NAME}
|
||||
${catkin_LIBRARIES}
|
||||
)
|
||||
|
||||
message(STATUS "================ !Done. No more nightmare! ================")
|
||||
Reference in New Issue
Block a user