diff --git a/CMakeLists.txt b/CMakeLists.txt index fc7850f8..d7214ce5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,14 @@ cmake_minimum_required(VERSION 3.10) +if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) +endif() + +if(POLICY CMP0146) + # Keep compatibility with packages that still use FindCUDA. + cmake_policy(SET CMP0146 OLD) +endif() + set(CMAKE_CUDA_COMPILER "/usr/local/cuda-12.6/bin/nvcc") project(BOS CXX C CUDA) @@ -22,6 +31,8 @@ option(ENABLE_CLANG_TIDY "Enable clang-tidy for static analysis" ON) include_directories(/usr/local/cuda/include) link_directories(/usr/local/cuda/lib64) +add_compile_options(-march=armv8-a+simd) + find_package(wpilib REQUIRED) find_package(OpenCV REQUIRED) find_package(Eigen3 REQUIRED) @@ -36,9 +47,9 @@ include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip + DOWNLOAD_EXTRACT_TIMESTAMP TRUE ) FetchContent_MakeAvailable(googletest) add_compile_options(-Wno-psabi) add_subdirectory(src) - diff --git a/Testing/Temporary/CTestCostData.txt b/Testing/Temporary/CTestCostData.txt new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/Testing/Temporary/CTestCostData.txt @@ -0,0 +1 @@ +--- diff --git a/Testing/Temporary/LastTest.log b/Testing/Temporary/LastTest.log new file mode 100644 index 00000000..7529c148 --- /dev/null +++ b/Testing/Temporary/LastTest.log @@ -0,0 +1,3 @@ +Start testing: May 20 04:14 UTC +---------------------------------------------------------- +End testing: May 20 04:14 UTC diff --git a/scripts/build.sh b/scripts/build.sh index 9721518e..2703ae55 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -22,5 +22,5 @@ else fi git submodule update --init --progress --depth 1 -cmake -DENABLE_CLANG_TIDY=OFF -DCMAKE_BUILD_TYPE=Release -B "$BUILD_DIR" -G Ninja . +cmake -Wno-dev -DENABLE_CLANG_TIDY=OFF -DCMAKE_BUILD_TYPE=Release -B "$BUILD_DIR" -G Ninja . cmake --build "$BUILD_DIR" diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index bd112f1e..686d5be2 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -1,14 +1,3 @@ #!/bin/bash -DIR="build/src/test/unit_test" -FAILED=0 - -for file in "$DIR"/*; do - if [[ -x "$file" && -f "$file" ]]; then - echo "Running $file" - "$file" || FAILED=1 - fi -done - -exit $FAILED - +ctest --test-dir build/src/test/unit_test --output-on-failure diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f88ba2e..87697488 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,5 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16...4.0) + include_directories(${CMAKE_SOURCE_DIR}) @@ -22,15 +23,15 @@ add_subdirectory(test) add_subdirectory(pathing) add_executable(main_bot_main main_bot_main.cc) -target_link_libraries(main_bot_main PRIVATE camera localization utils pathing) +target_link_libraries(main_bot_main PRIVATE utils localization pathing camera) add_executable(second_bot_main second_bot_main.cc) -target_link_libraries(second_bot_main PRIVATE camera localization utils pathing) +target_link_libraries(second_bot_main PRIVATE utils localization pathing camera) add_executable(unambiguous_second unambiguous_second.cc) -target_link_libraries(unambiguous_second PRIVATE ${OpenCV_LIBS} apriltag ntcore camera nlohmann_json::nlohmann_json Eigen3::Eigen localization utils) +target_link_libraries(unambiguous_second PRIVATE utils localization pathing camera) add_executable(unambiguous_first unambiguous_first.cc) -target_link_libraries(unambiguous_first PRIVATE ${OpenCV_LIBS} apriltag ntcore camera nlohmann_json::nlohmann_json Eigen3::Eigen localization utils pathing) +target_link_libraries(unambiguous_first PRIVATE utils localization pathing camera) set(CMAKE_CXX_CLANG_TIDY "") diff --git a/src/calibration/CMakeLists.txt b/src/calibration/CMakeLists.txt index 05fba2e1..32a7314a 100644 --- a/src/calibration/CMakeLists.txt +++ b/src/calibration/CMakeLists.txt @@ -1,11 +1,33 @@ -cmake_minimum_required(VERSION 3.10) - -add_executable(intrinsics_calibrate intrinsics_calibrate.cc intrinsics_calibrate_lib.cc) -target_link_libraries(intrinsics_calibrate PRIVATE camera utils) +add_executable(IntrinsicsCalibrate intrinsics_calibrate.cc intrinsics_calibrate_lib.cc) +target_sources(IntrinsicsCalibrate + PRIVATE + intrinsics_calibrate.cc + intrinsics_calibrate_lib.cc +) +target_link_libraries(IntrinsicsCalibrate + PRIVATE + camera + utils +) add_executable(frame_shower frame_shower.cc) -target_link_libraries(frame_shower PRIVATE camera utils) +target_sources(frame_shower + PRIVATE + frame_shower.cc +) +target_link_libraries(frame_shower + PRIVATE + camera + utils +) add_executable(focus_calibrate focus_calibrate.cc) -target_link_libraries(focus_calibrate PRIVATE camera utils) - +target_sources(focus_calibrate + PRIVATE + focus_calibrate.cc +) +target_link_libraries(focus_calibrate + PRIVATE + camera + utils +) diff --git a/src/camera/CMakeLists.txt b/src/camera/CMakeLists.txt index 8159e96e..ef546bdc 100644 --- a/src/camera/CMakeLists.txt +++ b/src/camera/CMakeLists.txt @@ -1,3 +1,89 @@ -add_library(camera cscore_streamer.cc disk_camera.cc cv_camera.cc select_camera.cc camera_source.cc write_frame.cc camera_constants.cc multi_camera_source.cc) -target_sources(camera PRIVATE uvc_camera.cc) -target_link_libraries(camera PRIVATE utils absl::status uvc) +add_library(CscoreStreamer) +target_sources(CscoreStreamer + PRIVATE + cscore_streamer.cc +) +target_link_libraries(CscoreStreamer PRIVATE + utils +) + +add_library(DiskCamera) +target_sources(DiskCamera + PRIVATE + disk_camera.cc +) +target_link_libraries(DiskCamera PRIVATE + utils +) + +add_library(CvCamera) +target_sources(CvCamera + PRIVATE + cv_camera.cc + write_frame.cc + write_frame.cc +) +target_link_libraries(CvCamera PRIVATE + utils +) + +add_library(SelectCamera) +target_sources(SelectCamera + PRIVATE + select_camera.cc +) +target_link_libraries(SelectCamera PRIVATE + DiskCamera + CvCamera + utils +) + +add_library(CameraSource) +target_sources(CameraSource + PRIVATE + camera_source.cc +) +target_link_libraries(CameraSource PRIVATE + utils +) + +add_library(CameraConstants) +target_sources(CameraConstants + PRIVATE + camera_constants.cc +) +target_link_libraries(CameraConstants PRIVATE + utils +) + +add_library(MultiCameraSource) +target_sources(MultiCameraSource + PRIVATE + multi_camera_source.cc +) +target_link_libraries(MultiCameraSource PRIVATE + utils +) + +add_library(UVCCamera) +target_sources(UVCCamera + PRIVATE + uvc_camera.cc +) +target_link_libraries(UVCCamera PRIVATE + uvc + absl::status + utils +) + +add_library(camera INTERFACE) +target_link_libraries(camera INTERFACE + CscoreStreamer + DiskCamera + CvCamera + SelectCamera + CameraSource + CameraConstants + MultiCameraSource + UVCCamera +) diff --git a/src/localization/CMakeLists.txt b/src/localization/CMakeLists.txt index 438596c8..64652f5c 100644 --- a/src/localization/CMakeLists.txt +++ b/src/localization/CMakeLists.txt @@ -1,5 +1,114 @@ -cmake_minimum_required(VERSION 3.10) +add_library(GPUApriltagDetector) +target_sources(GPUApriltagDetector + PRIVATE + gpu_apriltag_detector.cc +) +target_link_libraries(GPUApriltagDetector PRIVATE + 971apriltag + utils +) -add_library(localization gpu_apriltag_detector.cc opencv_apriltag_detector.cc run_localization.cc nvidia_apriltag_detector.cc square_solver.cc joint_solver.cc multi_tag_solver.cc position_receiver.cc unambiguous_estimator.cc simulation_sender.cc networktable_sender.cc) -target_sources(localization PRIVATE multi_camera_detector.cc) -target_link_libraries(localization PUBLIC 971apriltag utils camera wpilibc wpiutil vpi absl::status) +add_library(OpencvApriltagDetector) +target_sources(OpencvApriltagDetector + PRIVATE + opencv_apriltag_detector.cc +) +target_link_libraries(OpencvApriltagDetector PRIVATE + utils +) + +add_library(NvidiaApriltagDetector) +target_sources(NvidiaApriltagDetector + PRIVATE + nvidia_apriltag_detector.cc +) +target_link_libraries(NvidiaApriltagDetector PRIVATE + utils +) + +add_library(SquareSolver) +target_sources(SquareSolver + PRIVATE + square_solver.cc +) +target_link_libraries(SquareSolver PRIVATE + utils +) + +add_library(JointSolver) +target_sources(JointSolver + PRIVATE + joint_solver.cc +) +target_link_libraries(JointSolver PRIVATE + utils +) + +add_library(MultitagSolver) +target_sources(MultitagSolver + PRIVATE + multi_tag_solver.cc +) +target_link_libraries(MultitagSolver PRIVATE + utils + SquareSolver +) + +add_library(PositionReceiver) +target_sources(PositionReceiver + PRIVATE + position_receiver.cc +) +target_link_libraries(PositionReceiver PRIVATE + utils +) + +add_library(UnambiguousEstimator) +target_sources(UnambiguousEstimator + PRIVATE + unambiguous_estimator.cc +) +target_link_libraries(UnambiguousEstimator PRIVATE + SquareSolver + MultitagSolver + utils +) + +add_library(SimulationSender) +target_sources(SimulationSender + PRIVATE + simulation_sender.cc +) +target_link_libraries(SimulationSender PRIVATE + utils +) + +add_library(NetworktableSender) +target_sources(NetworktableSender + PRIVATE + networktable_sender.cc +) +target_link_libraries(NetworktableSender PRIVATE + utils +) + +add_library(localization) +target_sources(localization + PRIVATE + run_localization.cc + multi_camera_detector.cc +) +target_link_libraries(localization PRIVATE + GPUApriltagDetector + OpencvApriltagDetector + NvidiaApriltagDetector + SquareSolver + JointSolver + MultitagSolver + PositionReceiver + UnambiguousEstimator + SimulationSender + NetworktableSender + utils + camera +) diff --git a/src/pathing/CMakeLists.txt b/src/pathing/CMakeLists.txt index 5d057b96..c4c96868 100644 --- a/src/pathing/CMakeLists.txt +++ b/src/pathing/CMakeLists.txt @@ -1,2 +1,10 @@ -add_library(pathing pathfinding.cc splines.cc controller.cc) -target_link_libraries(pathing PUBLIC wpilibc wpiutil ntcore nlohmann_json::nlohmann_json utils localization ${OpenCV_LIBS}) +add_library(pathing) +target_sources(pathing PRIVATE + pathfinding.cc + splines.cc + controller.cc +) +target_link_libraries(pathing PRIVATE + utils + localization +) diff --git a/src/test/unit_test/CMakeLists.txt b/src/test/unit_test/CMakeLists.txt index 28880f18..6b9ce1b2 100644 --- a/src/test/unit_test/CMakeLists.txt +++ b/src/test/unit_test/CMakeLists.txt @@ -1,3 +1,4 @@ +include(GoogleTest) enable_testing() add_executable(joint_solve_test joint_solve_test.cc) @@ -18,6 +19,8 @@ target_link_libraries(matrix PRIVATE localization utils GTest::gtest_main) add_executable(pathing_test pathing_test.cc) target_link_libraries(pathing_test PRIVATE pathing utils nlohmann_json::nlohmann_json GTest::gtest_main) -include(GoogleTest) +gtest_discover_tests(joint_solve_test) gtest_discover_tests(multi_tag_test) gtest_discover_tests(square_solve_test) +gtest_discover_tests(general_solver_test) +# gtest_discover_tests(pathing_test) diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt index 87daae36..cbd9ca68 100644 --- a/src/utils/CMakeLists.txt +++ b/src/utils/CMakeLists.txt @@ -1,5 +1,24 @@ -add_library(utils timer.cc nt_utils.cc camera_utils.cc log.cc constants_from_json.cc transform.cc) -target_link_libraries(utils PUBLIC wpilibc nlohmann_json::nlohmann_json absl::log absl::check absl::flags absl::flags_parse apriltag ntcore vpi) +add_library(utils) +target_sources(utils + PRIVATE + timer.cc + nt_utils.cc + camera_utils.cc + log.cc + constants_from_json.cc + transform.cc +) +target_link_libraries(utils PUBLIC + wpilibc + nlohmann_json::nlohmann_json + absl::log + absl::check + absl::flags + absl::flags_parse + apriltag + ntcore + vpi +) if(!ENABLE_CLANG_TIDY) target_precompile_headers(utils PUBLIC pch.h) diff --git a/third_party/971apriltag/CMakeLists.txt b/third_party/971apriltag/CMakeLists.txt index 0feaec03..ce65db2a 100644 --- a/third_party/971apriltag/CMakeLists.txt +++ b/third_party/971apriltag/CMakeLists.txt @@ -1,11 +1,4 @@ -cmake_minimum_required(VERSION 3.10) - -include_directories(. /usr/local/cuda/include ${OpenCV_INCLUDE_DIRS}) -add_compile_options(-march=armv8-a+simd) - find_package(wpilib REQUIRED) -enable_language(CUDA) - add_library(971apriltag_dep) target_sources(971apriltag_dep