From 9a921a0c48f1fed9bef54a9bf5843ed9583e5287 Mon Sep 17 00:00:00 2001 From: volkbay Date: Tue, 4 Apr 2023 00:39:11 +0300 Subject: [PATCH 1/2] Added Dockerfile, modified x_events/CMakeLists (may revert later). --- .volkbay/Dockerfile | 34 ++++++ .volkbay/x_events/CMakeLists.txt | 179 +++++++++++++++++++++++++++++++ dependencies.yaml | 24 +++++ 3 files changed, 237 insertions(+) create mode 100644 .volkbay/Dockerfile create mode 100644 .volkbay/x_events/CMakeLists.txt diff --git a/.volkbay/Dockerfile b/.volkbay/Dockerfile new file mode 100644 index 0000000..5b2f5b6 --- /dev/null +++ b/.volkbay/Dockerfile @@ -0,0 +1,34 @@ +# Author: @volkbay[2023] +FROM osrf/ros:noetic-desktop-full + +RUN apt-get update +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ + git python3-vcstool python3-catkin-tools libtool nano + +# Install Eigen3 3.4 (required by Haste Library) (not found in apt repo) +WORKDIR /home +RUN git clone https://gitlab.com/libeigen/eigen.git && \ + mkdir -p /home/eigen/build +WORKDIR /home/eigen/build +RUN cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local && \ + make install + +# Init catkin environment +ENV WORKSPACE /eklt_vio_ws +RUN mkdir -p /${WORKSPACE}/src +WORKDIR ${WORKSPACE} +RUN catkin init &&\ + catkin config --extend /opt/ros/noetic + +# Clone dependencies and modify CMake configurations +WORKDIR ${WORKSPACE}/src +RUN git clone https://github.com/volkbay/x_evaluate.git && \ + ## Following `sed` is required to clone git repos by HTTPS ... + ## without global git configurations. + sed -i 's+git@github.com:+https://github.com/+g' x_evaluate/dependencies.yaml && \ + vcs-import < x_evaluate/dependencies.yaml + +# Build Catkin packages +RUN catkin build -j${nproc} x_evaluate + +ENTRYPOINT [ "/bin/bash && source ${WORKSPACE}/devel/setup.bash" ] diff --git a/.volkbay/x_events/CMakeLists.txt b/.volkbay/x_events/CMakeLists.txt new file mode 100644 index 0000000..e35ae88 --- /dev/null +++ b/.volkbay/x_events/CMakeLists.txt @@ -0,0 +1,179 @@ +################################################################################# +# User build settings + +set(DUAL_THREAD true) # Set true to process image and inertial data on different + # threads +set(VERBOSE true) # Set false to disable all publishing and standard output + # stream, except pose at update rate. That will improve runtime. +set(TIMING false) # Set true to enable timers +set(PROFILING false) # Set true to disable compiler flags which are not + # compatible with Callgrind profiling tool. +set(UNIT_TESTS false) # Set true to enable unit tests + +################################################################################# + +cmake_minimum_required(VERSION 2.8.3) +cmake_policy(SET CMP0048 NEW) # avoids CMAKE_PROJECT_VERSION warning +project(x) + +set(CMAKE_BUILD_TYPE Release) + +# Set definitions +if(DUAL_THREAD) + add_definitions(-DDUAL_THREAD) +endif() +if(VERBOSE) + add_definitions(-DVERBOSE) +endif() +if(TIMING) + add_definitions(-DTIMING) +endif() +if(UNIT_TESTS) + add_definitions(-DRUN_UNIT_TESTS) +endif() +if (CMAKE_BUILD_TYPE MATCHES Debug) + add_definitions(-DDEBUG -DDEBUGMSF) +elseif (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) + # Enable asserts + add_definitions(-UNDEBUG) +endif() +add_definitions(-D_LINUX -D_REENTRANT) + +# Eigen plugin +add_definitions(-DEIGEN_MATRIXBASE_PLUGIN=) + +# Look for OpenCV >= 3.3.1 +find_package(OpenCV 4 QUIET) +if(NOT ${OpenCV_FOUND}) + find_package(OpenCV 3.3.1 QUIET) + if(NOT ${OpenCV_FOUND}) + # OpenCV: fallback to opencv3_catkin ros package + find_package(opencv3_catkin QUIET) + if(opencv3_catkin_FOUND) + message("OpenCV3_catkin detected") + set(OPENCV_PACKAGE "opencv3_catkin") + set(OpenCV_INCLUDE_DIRS "") + set(OpenCV_LIBRARIES "") + else() + message(FATAL_ERROR "No OpenCV >= 3.3.1 or 4 detected.") + endif() + endif() +endif() + +find_package(catkin REQUIRED COMPONENTS + cmake_modules + ${OPENCV_PACKAGE} + ceres_catkin + glog_catkin +) + +find_package(Eigen3 3.4 CONFIG REQUIRED) +set(EIGEN3_INCLUDE_DIR "${Eigen3_DIR}/../../../include/eigen3/") +find_package(easy_profiler_catkin REQUIRED) + + +# Set build flags, depending on the architecture +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall") + +if (CMAKE_BUILD_TYPE MATCHES Debug) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") +endif() + +if (CMAKE_BUILD_TYPE MATCHES Release) + + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") # tested on Jetson TX2 + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crypto -mcpu=cortex-a57+crypto -flto -ffast-math -fvect-cost-model=unlimited") + #elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch32") # uncomment with correct check for Snapdragon Flight Pro + # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=softfp -flto -ffast-math -fvect-cost-model=unlimited") + endif() + + if (${PROFILING} MATCHES false) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funsafe-loop-optimizations -fsee -funroll-loops -fno-math-errno -funsafe-math-optimizations -ffinite-math-only -fno-signed-zeros") + endif() + +endif() + +# build with catkin build x --cmake-args -DMY_DEBUG=1 +if (MY_DEBUG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Og") +endif() + +## For debugging memory leaks +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Og -fno-omit-frame-pointer -fsanitize=address") # REMOVE ME LATER +#set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -g -Og -fno-omit-frame-pointer -fsanitize=address") # REMOVE ME LATER + +# For downstream packages in catkin +set(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) +set(EIGEN3_LIBRARIES ${EIGEN3_LIBRARIES}) + +# Configure this package +catkin_package( + DEPENDS EIGEN3 + INCLUDE_DIRS include ${EIGEN3_INCLUDE_DIRS} ${ceres_catkin_INCLUDE_DIRS} ${glog_catkin_INCLUDE_DIRS} + LIBRARIES x +) + +## Package internal and additional locations of header files +## Separating the projects include directory from {catkin_INCLUDE_DIRS} +## allows to tag that with SYSTEM, which disables GCC warnings for +## these (all the ros header, opencv, ..) +include_directories (include) + +include_directories (SYSTEM + ${OpenCV_INCLUDE_DIRS} + ${catkin_INCLUDE_DIRS} + ${easy_profiler_catkin_INCLUDE_DIRS} + ${glog_catkin_INCLUDE_DIRS} +) + +set (SOURCE + src/x/ekf/ekf.cpp + src/x/ekf/propagator.cpp + src/x/ekf/state.cpp + src/x/ekf/state_buffer.cpp + src/x/ekf/updater.cpp + src/x/vio/vio.cpp + src/x/vio/vio_updater.cpp + src/x/vio/state_manager.cpp + src/x/vio/track_manager.cpp + src/x/vio/msckf_update.cpp + src/x/vio/msckf_slam_update.cpp + src/x/vio/slam_update.cpp + src/x/vio/range_update.cpp + src/x/vio/solar_update.cpp + src/x/vio/tools.cpp + src/x/vision/utils.cpp + src/x/vision/camera.cpp + src/x/vision/feature.cpp + src/x/vision/tiled_image.cpp + src/x/vision/timing.cpp + src/x/vision/tracker.cpp + src/x/vision/triangulation.cpp + src/x/eklt/optimizer.cpp + src/x/eklt/eklt_tracker.cpp + src/x/eklt/async_feature_interpolator.cpp + src/x/eklt/viewer.cpp + src/x/eklt/eklt_vio_updater.cpp + src/x/eklt/eklt_vio.cpp + src/x/eklt/types.cpp + src/x/eklt/utils.cpp + src/x/events/e_vio.cpp + src/x/events/event_accumulator.cpp + src/x/eklt/async_feature_tracker.cpp + src/x/haste/haste_tracker.cpp + src/x/haste/haste_vio.cpp +) + +add_library (x ${SOURCE}) + +target_compile_definitions(x PUBLIC -DUSING_EASY_PROFILER) + +# Additional libraries to link against +target_link_libraries(x + ${OpenCV_LIBRARIES} + ${catkin_LIBRARIES} + ${easy_profiler_catkin_LIBRARIES} + Eigen3::Eigen +) \ No newline at end of file diff --git a/dependencies.yaml b/dependencies.yaml index c612d2c..687c1e3 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -7,3 +7,27 @@ repositories: type: git url: git@github.com:ethz-asl/gflags_catkin.git version: master + catkin_simple: + type: git + url: git@github.com:catkin/catkin_simple + version: master + x_events: + type: git + url: git@github.com:jpl-x/x_events + version: events + glog_catkin: + type: git + url: git@github.com:ethz-asl/glog_catkin + version: master + x_easy_profiler_catkin: + type: git + url: git@github.com:florian-world/x_easy_profiler_catkin + version: master + ceres_catkin: + type: git + url: git@github.com:ethz-asl/ceres_catkin + version: master + eigen_catkin: + type: git + url: git@github.com:ethz-asl/eigen_catkin + version: master \ No newline at end of file From afcd89bc548a030a0b92fc4d7df3ed8a4a6d3ca8 Mon Sep 17 00:00:00 2001 From: volkbay Date: Sun, 9 Apr 2023 23:51:21 +0300 Subject: [PATCH 2/2] Modified plots.py for MatplotLib>=3.5. Updated Dockerfile. Added .vscode to .gitignore. Updated dependencies.yaml. --- .gitignore | 5 +- .volkbay/Dockerfile | 24 ++++- .volkbay/x_events/CMakeLists.txt | 179 ------------------------------- dependencies.yaml | 4 +- src/x_evaluate/plots.py | 5 +- 5 files changed, 31 insertions(+), 186 deletions(-) delete mode 100644 .volkbay/x_events/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 8494edc..0be3c5a 100644 --- a/.gitignore +++ b/.gitignore @@ -137,4 +137,7 @@ dmypy.json # Cython debug symbols cython_debug/ -.idea \ No newline at end of file +.idea + +# VS Code +.vscode/ \ No newline at end of file diff --git a/.volkbay/Dockerfile b/.volkbay/Dockerfile index 5b2f5b6..e76dd57 100644 --- a/.volkbay/Dockerfile +++ b/.volkbay/Dockerfile @@ -1,11 +1,23 @@ # Author: @volkbay[2023] +# +## Example Usage ## +## +## Build image with: `docker build -t eklt-vio .` +## Run container with: `docker run -it -v : eklt-vio` +## Load environment: `source ../devel/setup.bash` +## Evaluate with: `python3 x_evaluate/test/evaluate.py --configuration x_evaluate/test/evaluate.yaml ... +## --output_folder //output ... +## --dataset_dir --frontend XVIO --name "XVIO"` +## +## FROM osrf/ros:noetic-desktop-full RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ - git python3-vcstool python3-catkin-tools libtool nano + git python3-vcstool python3-catkin-tools libtool nano \ + python3-pip -# Install Eigen3 3.4 (required by Haste Library) (not found in apt repo) +# Install Eigen3 v3.4 (required by Haste Lib used in X Lib, this version cannot be found in apt repo for Ubuntu 20.04) WORKDIR /home RUN git clone https://gitlab.com/libeigen/eigen.git && \ mkdir -p /home/eigen/build @@ -22,6 +34,8 @@ RUN catkin init &&\ # Clone dependencies and modify CMake configurations WORKDIR ${WORKSPACE}/src + +#TODO: @volkbay: Change volkbay to jpl-x if PR accepted RUN git clone https://github.com/volkbay/x_evaluate.git && \ ## Following `sed` is required to clone git repos by HTTPS ... ## without global git configurations. @@ -31,4 +45,8 @@ RUN git clone https://github.com/volkbay/x_evaluate.git && \ # Build Catkin packages RUN catkin build -j${nproc} x_evaluate -ENTRYPOINT [ "/bin/bash && source ${WORKSPACE}/devel/setup.bash" ] +RUN pip3 install -r x_evaluate/requirements.txt && \ + pip3 install ./x_evaluate + +# Run container +ENTRYPOINT [ "/bin/bash" ] \ No newline at end of file diff --git a/.volkbay/x_events/CMakeLists.txt b/.volkbay/x_events/CMakeLists.txt deleted file mode 100644 index e35ae88..0000000 --- a/.volkbay/x_events/CMakeLists.txt +++ /dev/null @@ -1,179 +0,0 @@ -################################################################################# -# User build settings - -set(DUAL_THREAD true) # Set true to process image and inertial data on different - # threads -set(VERBOSE true) # Set false to disable all publishing and standard output - # stream, except pose at update rate. That will improve runtime. -set(TIMING false) # Set true to enable timers -set(PROFILING false) # Set true to disable compiler flags which are not - # compatible with Callgrind profiling tool. -set(UNIT_TESTS false) # Set true to enable unit tests - -################################################################################# - -cmake_minimum_required(VERSION 2.8.3) -cmake_policy(SET CMP0048 NEW) # avoids CMAKE_PROJECT_VERSION warning -project(x) - -set(CMAKE_BUILD_TYPE Release) - -# Set definitions -if(DUAL_THREAD) - add_definitions(-DDUAL_THREAD) -endif() -if(VERBOSE) - add_definitions(-DVERBOSE) -endif() -if(TIMING) - add_definitions(-DTIMING) -endif() -if(UNIT_TESTS) - add_definitions(-DRUN_UNIT_TESTS) -endif() -if (CMAKE_BUILD_TYPE MATCHES Debug) - add_definitions(-DDEBUG -DDEBUGMSF) -elseif (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) - # Enable asserts - add_definitions(-UNDEBUG) -endif() -add_definitions(-D_LINUX -D_REENTRANT) - -# Eigen plugin -add_definitions(-DEIGEN_MATRIXBASE_PLUGIN=) - -# Look for OpenCV >= 3.3.1 -find_package(OpenCV 4 QUIET) -if(NOT ${OpenCV_FOUND}) - find_package(OpenCV 3.3.1 QUIET) - if(NOT ${OpenCV_FOUND}) - # OpenCV: fallback to opencv3_catkin ros package - find_package(opencv3_catkin QUIET) - if(opencv3_catkin_FOUND) - message("OpenCV3_catkin detected") - set(OPENCV_PACKAGE "opencv3_catkin") - set(OpenCV_INCLUDE_DIRS "") - set(OpenCV_LIBRARIES "") - else() - message(FATAL_ERROR "No OpenCV >= 3.3.1 or 4 detected.") - endif() - endif() -endif() - -find_package(catkin REQUIRED COMPONENTS - cmake_modules - ${OPENCV_PACKAGE} - ceres_catkin - glog_catkin -) - -find_package(Eigen3 3.4 CONFIG REQUIRED) -set(EIGEN3_INCLUDE_DIR "${Eigen3_DIR}/../../../include/eigen3/") -find_package(easy_profiler_catkin REQUIRED) - - -# Set build flags, depending on the architecture -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall") - -if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") -endif() - -if (CMAKE_BUILD_TYPE MATCHES Release) - - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") - - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") # tested on Jetson TX2 - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crypto -mcpu=cortex-a57+crypto -flto -ffast-math -fvect-cost-model=unlimited") - #elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch32") # uncomment with correct check for Snapdragon Flight Pro - # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=softfp -flto -ffast-math -fvect-cost-model=unlimited") - endif() - - if (${PROFILING} MATCHES false) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funsafe-loop-optimizations -fsee -funroll-loops -fno-math-errno -funsafe-math-optimizations -ffinite-math-only -fno-signed-zeros") - endif() - -endif() - -# build with catkin build x --cmake-args -DMY_DEBUG=1 -if (MY_DEBUG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Og") -endif() - -## For debugging memory leaks -#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Og -fno-omit-frame-pointer -fsanitize=address") # REMOVE ME LATER -#set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -g -Og -fno-omit-frame-pointer -fsanitize=address") # REMOVE ME LATER - -# For downstream packages in catkin -set(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) -set(EIGEN3_LIBRARIES ${EIGEN3_LIBRARIES}) - -# Configure this package -catkin_package( - DEPENDS EIGEN3 - INCLUDE_DIRS include ${EIGEN3_INCLUDE_DIRS} ${ceres_catkin_INCLUDE_DIRS} ${glog_catkin_INCLUDE_DIRS} - LIBRARIES x -) - -## Package internal and additional locations of header files -## Separating the projects include directory from {catkin_INCLUDE_DIRS} -## allows to tag that with SYSTEM, which disables GCC warnings for -## these (all the ros header, opencv, ..) -include_directories (include) - -include_directories (SYSTEM - ${OpenCV_INCLUDE_DIRS} - ${catkin_INCLUDE_DIRS} - ${easy_profiler_catkin_INCLUDE_DIRS} - ${glog_catkin_INCLUDE_DIRS} -) - -set (SOURCE - src/x/ekf/ekf.cpp - src/x/ekf/propagator.cpp - src/x/ekf/state.cpp - src/x/ekf/state_buffer.cpp - src/x/ekf/updater.cpp - src/x/vio/vio.cpp - src/x/vio/vio_updater.cpp - src/x/vio/state_manager.cpp - src/x/vio/track_manager.cpp - src/x/vio/msckf_update.cpp - src/x/vio/msckf_slam_update.cpp - src/x/vio/slam_update.cpp - src/x/vio/range_update.cpp - src/x/vio/solar_update.cpp - src/x/vio/tools.cpp - src/x/vision/utils.cpp - src/x/vision/camera.cpp - src/x/vision/feature.cpp - src/x/vision/tiled_image.cpp - src/x/vision/timing.cpp - src/x/vision/tracker.cpp - src/x/vision/triangulation.cpp - src/x/eklt/optimizer.cpp - src/x/eklt/eklt_tracker.cpp - src/x/eklt/async_feature_interpolator.cpp - src/x/eklt/viewer.cpp - src/x/eklt/eklt_vio_updater.cpp - src/x/eklt/eklt_vio.cpp - src/x/eklt/types.cpp - src/x/eklt/utils.cpp - src/x/events/e_vio.cpp - src/x/events/event_accumulator.cpp - src/x/eklt/async_feature_tracker.cpp - src/x/haste/haste_tracker.cpp - src/x/haste/haste_vio.cpp -) - -add_library (x ${SOURCE}) - -target_compile_definitions(x PUBLIC -DUSING_EASY_PROFILER) - -# Additional libraries to link against -target_link_libraries(x - ${OpenCV_LIBRARIES} - ${catkin_LIBRARIES} - ${easy_profiler_catkin_LIBRARIES} - Eigen3::Eigen -) \ No newline at end of file diff --git a/dependencies.yaml b/dependencies.yaml index 687c1e3..7d772a9 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -13,13 +13,13 @@ repositories: version: master x_events: type: git - url: git@github.com:jpl-x/x_events + url: git@github.com:volkbay/x_events #TODO: @volkbay: Change volkbay to jpl-x if PR accepted version: events glog_catkin: type: git url: git@github.com:ethz-asl/glog_catkin version: master - x_easy_profiler_catkin: + easy_profiler_catkin: type: git url: git@github.com:florian-world/x_easy_profiler_catkin version: master diff --git a/src/x_evaluate/plots.py b/src/x_evaluate/plots.py index e854ad8..1f0e290 100644 --- a/src/x_evaluate/plots.py +++ b/src/x_evaluate/plots.py @@ -448,7 +448,10 @@ def boxplot_compare(ax: plt.Axes, x_tick_labels, data, legend_labels, colors=Non ax.set_xticks(np.arange(n_xlabel)) ax.set_xticklabels(x_tick_labels) ax.set_xlim(-.6, n_xlabel-.4) - ax.xaxis.grid(b=None) + try: # @volkbay: Matplotlib > 3.5 has changed attribute 'b' to 'visible' + ax.xaxis.grid(b=None) + except ValueError: + ax.xaxis.grid(visible=None) if legend: # ax.legend(leg_handles, leg_labels, bbox_to_anchor=( # 1.05, 1), loc=2, borderaxespad=0.)