GithubHelp home page GithubHelp logo

hkust-aerial-robotics / esvo Goto Github PK

View Code? Open in Web Editor NEW
420.0 11.0 90.0 396 KB

This repository maintains the implementation of "Event-based Stereo Visual Odometry".

CMake 1.32% Python 0.73% C++ 97.95%

esvo's Introduction

ESVO: Event-based Stereo Visual Odometry

ESVO is a novel pipeline for real-time visual odometry using a stereo event-based camera. Both the proposed mapping and tracking methods leverage a unified event representation (Time Surfaces), thus, it could be regarded as a ''direct'', geometric method using raw event as input.

Please refer to the ESVO Project Page for more detailed information and for testing event data.

Videos

IMAGE ALT TEXT HERE    IMAGE ALT TEXT HERE

Related Publications

1. Installation

We have tested ESVO on machines with the following configurations

  • Ubuntu 18.04.5 LTS + ROS melodic + gcc 5.5.0 + cmake (>=3.10) + OpenCV 3.2
  • Ubuntu 16.04 LTS + ROS kinetic + gcc 5.4.0 + cmake (>=3.10) + OpenCV 3.2
  • Ubuntu 20.04 LTS + ROS Noetic + OpenCV 4

For Ubuntu 16.04, you may need to upgrade your cmake.

1.1 Driver Installation

To work with event cameras, especially for the Dynamic Vision Sensors (DVS/DAVIS), you need to install some drivers. Please follow the instructions (steps 1-9) at rpg_dvs_ros before moving on to the next step. Note that you need to replace the name of the ROS distribution with the one installed on your computer.

We use catkin tools to build the code. You should have it installed during the driver installation.

1.2 Dependencies Installation

You should have created a catkin workspace in Section 1.1. If not, please go back and create one.

Clone this repository into the src folder of your catkin workspace.

$ cd ~/catkin_ws/src 
$ git clone https://github.com/HKUST-Aerial-Robotics/ESVO.git

Dependencies are specified in the file dependencies.yaml. They can be installed with the following commands from the src folder of your catkin workspace:

$ cd ~/catkin_ws/src
$ sudo apt-get install python3-vcstool
$ vcs-import < ESVO/dependencies.yaml

The previous command should clone the the repositories into folders called catkin_simple, glog_catkin, gflags_catkin, minkindr, etc. inside the src folder of your catking workspace, at the same level as this repository (ESVO).

You may need autoreconf to compile glog_catkin. To install autoreconf, run

$ sudo apt-get install autoconf

Note that above command may change on different version of Ubuntu. Please refer to https://askubuntu.com/a/269423 for details.

yaml-cpp is only used for loading calibration parameters from yaml files:

$ cd ~/catkin_ws/src 
$ git clone https://github.com/jbeder/yaml-cpp.git
$ cd yaml-cpp
$ mkdir build && cd build && cmake -DYAML_BUILD_SHARED_LIBS=ON ..
$ make -j

Other ROS dependencies should have been installed in Section 1.1. If not by accident, install the missing ones accordingly. Besides, you also need to have OpenCV (3.2 or later) and Eigen 3 installed.

1.3 ESVO Installation

After cloning this repository, as stated above (reminder)

$ cd ~/catkin_ws/src 
$ git clone https://github.com/HKUST-Aerial-Robotics/ESVO.git

run

$ catkin build esvo_time_surface esvo_core
$ source ~/catkin_ws/devel/setup.bash

2. Usage

To run the pipeline, you need to download rosbag files from the ESVO Project Page.

2.1 esvo_time_surface

This package implements a node that constantly updates the stereo time maps (i.e., time surfaces). To launch it independently, open a terminal and run the command:

$ roslaunch esvo_time_surface stereo_time_surface.launch

To play a bag file, go to esvo_time_surface/launch/rosbag_launcher and modify the path in [bag_name].launch according to where your rosbag file is downloaded. Then execute

$ roslaunch esvo_time_surface [bag_name].launch

2.2 esvo_core

This package implements the proposed mapping and tracking methods. The initialization is implemented inside the mapping part. To launch the system, run

$ roslaunch esvo_core system_xxx.launch

This will launch two esvo_time_surface nodes (for left and right event cameras, respectively), the mapping node and the tracking node simultaneously. Then play the input (already downloaded) bag file by running

$ roslaunch esvo_time_surface [bag_name].launch

To save trajectories at anytime, go to another terminal and terminate the system by

$ rosparam set /ESVO_SYSTEM_STATUS "TERMINATE"

You need to set the path in /cfg/tracking_xxx.yaml to which the result file will be saved.

2.3 esvo_core/mvstereo

This module implements the mapper of ESVO and some other event-based mapping methods (e.g. [26], [45]). As a multi-view stereo (MVS) pipeline, it assumes that poses are known as prior. To launch the mapper, run

$ roslaunch esvo_core mvstereo_xxx.launch

This will launch two esvo_time_surface nodes (for left and right event cameras, respectively), and the mapping node simultaneously. Then play the input (already downloaded) bag file by running

$ roslaunch esvo_time_surface [bag_name].launch

Note that only rpg and upenn datasets are applicable for this module because they come with the ground truth poses.

3. Parameters (Dynamic Reconfigure)

Time Surface

  • use_sim_time : Set True for all offline experiments, which use simulation time.
  • ignore_polarity : Set True because polarity information is not used in the proposed methods.
  • time_surface_mode : Time surface rendering manner (0: Backward; 1: Forward). 0 indicates to use the standard way to refresh the time surface. Please refer to the implementation for more details.
  • decay_ms : The constant exponential decay parameter (unit: ms).
  • median_blur_kernel_size : Determines the size of the kernel for denoising the time surface.
  • max_event_queue_len : Determines the length of the event queue maintained at each coordinate.

Mapping

Event Matching

  • EM_Slice_Thickness: Determines the thickness of the temporal slice (unit: sec).
  • EM_Time_THRESHOLD: Temporal simultaneity threshold.
  • EM_EPIPOLAR_THRESHOLD: Epipolar constraint threshold.
  • EM_TS_NCC_THRESHOLD: Motion consistency threshold.
  • EM_NUM_EVENT_MATCHING: Maximum number of events for event matching.

Block Matching

  • BM_half_slice_thickness : Determines the thickness of the temporal slice (unit: sec).
  • BM_min_disparity : Minimum searching distance for epipolar matching.
  • BM_max_disparity : Maximum searching distance for epipolar matching.
  • BM_step : Epipolar searching interval.
  • BM_ZNCC_Threshold : ZNCC-based matching threshold.
  • BM_bUpDownConfiguration : A flag that indicates the direction of the stereo baseline (True: up-down; False: left-right).
  • bSmoothTimeSurface : To smooth the time surfaces or not.

Non-linear Optimization parameters

  • invDepth_min_range : Lower bound for the resulting inverse depth.
  • invDepth_max_range : Upper bound for the resulting inverse depth.
  • residual_vis_threshold : Threshold on the temporal residual of the inverse depth estimates.
  • stdVar_vis_threshold : Threshold on the uncertainty of the inverse depth estimates.
  • age_vis_threshold : Threshold on the number of fusion operations (inverse depth estimates).
  • age_max_range : Upper bound for the age (used for visualization only).
  • fusion_radius : Determines the number of pixels that are involved in the depth fusion.
  • FUSION_STRATEGY : Fusion strategy. (use CONST_FRAMES or CONST_POINTS)
  • maxNumFusionFrames : Determines how many frames (observations) are fused to the current time. (used in CONST_FRAMES mode)
  • maxNumFusionPoints : Determines how many points are fused to the current time. (used in CONST_POINTS mode)
  • Denoising : This operation helps to denoise events that are induced by reflection of VICON. Set True to use.
  • Regularization : Perform regularization on the resulting inverse depth map.
  • PROCESS_EVENT_NUM : Maximum number of depth estimates performed at every observation.
  • TS_HISTORY_LENGTH : The number of time surfaces maintained.
  • INIT_SGM_DP_NUM_THRESHOLD : Minimum number of depth points needed from SGM-based initialization.
  • mapping_rate_hz : Updating rate of the mapping node.
  • patch_size_X : Size of patches on the time surface (x dimension).
  • patch_size_Y : Size of patches on the time surface (y dimension).
  • LSnorm : Least squares method choice (use l2 or Tdist).
  • Tdist_nu : Parameter of the applied Student's t distribution.
  • Tdist_scale : Parameter of the applied Student's t distribution.
  • Tdist_stdvar : Parameter of the applied Student's t distribution.
  • bVisualizeGlobalPC : Set True to visualize global pointcloud.
  • visualizeGPC_interval : Time interval to push new points to global pointcloud.
  • NumGPC_added_oper_refresh : Number of points pushed to global pointcloud.

Tracking

  • invDepth_min_range : Lower bound for the depth of input pointcoud. (Used for visualization only).
  • invDepth_max_range : Upper bound for the depth of input pointcoud. (Used for visualization only).
  • TS_HISTORY_LENGTH : The number of time surfaces maintained.
  • REF_HISTORY_LENGTH : The number of reference local maps maintained.
  • tracking_rate_hz : Updating rate of the tracking node.
  • patch_size_X : Size of patches on the time surface (x dimension).
  • patch_size_Y : Size of patches on the time surface (y dimension).
  • kernelSize : Kernel size for smoothing the negative time surface.
  • MAX_REGISTRATION_POINTS : Maximum number of 3D points that are involved in the 3D-2D registration.
  • BATCH_SIZE : Number of 3D points used in each iteration.
  • MAX_ITERATION : Maximum number of iterations.
  • LSnorm : Choice of Least-squares method. (use Huber or l2)
  • huber_threshold : Huber norm parameter.
  • MIN_NUM_EVENTS : Threshold on the number of events occurred since the last observation. This one is used to check if enough stimuli are perceived by the event camera.
  • RegProblemType : Jacobian computation manner (0 numerical; 1 analytical).
  • SAVE_TRAJECTORY : Set True to save trajectory.
  • SEQUENCE_NAME : Assign it when saving the trajectory.
  • VISUALIZE_TRAJECTORY : Set True to visualize path.

4. Notes for Good Results

Real-time performance is witnessed on a Razor Blade 15 laptop (Intel® Core™ i7-8750H CPU @ 2.20GHz × 12).

  • To get real-time performance, you need a powerful PC with modern CPUs which supports at least 6 threads. Remember to keep you computer cool!

  • The mapping and tracking are loosely coupled, which indicates that the failure of anyone will lead to bad results of the other, and hence of the whole system.

  • If the initialization does not look reasonably good, reset the system by clicking the checkbox resetButton in the dynamic reconfigure. This checker box is used as a button. Sorry for the bad GUI design.

  • If you use a PC with limited computational resources, you could slow down the playback of the rosbag by a factor, e.g.

    $ rosbag play xxx.bag -r 0.5 --clock

and modify the rate of the external clock (usd for synchronizing the stereo time surfaces) accordingly, e.g.

`<node name="global_timer" pkg="rostopic" type="rostopic" args="pub -s -r 50 /sync std_msgs/Time 'now' ">`

In this example, the bag file is played at a factor of 0.5, and thus, the synchronization signal is set to 50 Hz accordingly. These modifications must be made accordingly such that the time surface is updated (refreshed) at 100 Hz in simulation time. You can check this by running,

$ rostopic hz /TS_left $ rostopic hz /TS_right

They are both supposed to be approximately 100 Hz.

  • The esvo_core is implemented using hyper-thread techniques. Please modify the number of threads used for mapping and tracking according to your PC's capability. The parameters can be found in include/esvo_core/tools/utils.h.
  • The esvo_time_surface supports hyper-thread computation. We find this may be necessary when to deal with sensors with higher resolution than that of a DAVIS346 (346 x 260). The single thread implementation takes <= 5 ms on DAVIS240C (240 x 180) and <= 10 ms on DAVIS346 (346 x 260). We have evaluated the double-thread version on the mentioned PC platform, which gives <= 3 ms on 240 x 180 resolution and <= 6 ms on <= 346 x 260 resolution.
  • Note that ESVO is non-deterministic, namely results may be different each time you run it on the same rosbag file. This is due to stochastic operations involved in the tracking, and also, the parallelism of the system. The performance differs according to the condition of your PC, e.g. you will get better efficiency if you turn off all other running programmes.

5. Datasets

The event data fed to ESVO needs to be recorded at remarkbly higher streaming rate than that in the default configuration (30 Hz) of the rpg_dvs_ros driver. This is due to the fact that the esvo_time_surface operates at 100 Hz. To refresh the time surfaces with the most current events to the utmost, a notably higher streaming rate is needed (e.g., 1000 Hz). The streaming rate can be either simply set in the hardware or modified via rewriting the bag. We provide a naive example in /rosbag_editor to show how.

For convenience we provide a number of bag files, which have been rewritten to meet above requirement. They can be downloaded from the ESVO Project Page.

6. License

ESVO is licensed under the GNU General Public License Version 3 (GPLv3), see http://www.gnu.org/licenses/gpl.html.

For commercial use, please contact Yi Zhou and Shaojie Shen.

Email addresses are available in the project page.

7. Log

  • 12/01/2021 Merge with Suman Ghosh's pull request. This commit fixed the running issue on machines with Ubuntu 20.04 + ROS Noetic + OpenCV 4.
  • 28/01/2021 We provide the independent mapping module of ESVO. This module maybe useful for people who are interested in event-based multi-view stereo (MVS) methods, which typically assume poses are known as prior knowledge. Besides, methods in [26], [45] are also implemented for comparison purpose. Please refer to 2.3 esvo_core/mvstereo.
  • 23/02/2021 ESVO was integrated into the modular iniVation DV software platform. It runs at up to 200 fps on Jetson TX2, and is fully open-source. Download here: https://lnkd.in/deuRKSK.

esvo's People

Contributors

ethan-zhou avatar ghoshsuman avatar guillermogb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esvo's Issues

catkin build error

make[2]: *** [/home/wwj/Downloads/catkin_ws/devel/lib/esvo_core/esvo_MVStereo] Error 1
make[1]: *** [CMakeFiles/esvo_MVStereo.dir/all] Error 2

DSEC dataset parameters

Hello,

I am trying to get results with ESVO on the new DSEC dataset (http://rpg.ifi.uzh.ch/dsec.html). The dataset has 640x480 resolution and stereo baseline of 60 cm. The event rate is significantly higher than of MVSEC and other referenced datasets, so I tried to tune the parameters accordingly. I manage to get good mapping initialization with SGM (thousands of points):

Selection_116

Afterwards, I get very few points in the pointcloud:
Selection_117

Here are the tracking and mapping parameters I am currently using:
invDepth_min_range: 0.005
invDepth_max_range: 0.5
TS_HISTORY_LENGTH: 100
REF_HISTORY_LENGTH: 10
tracking_rate_hz: 100
patch_size_X: 1
patch_size_Y: 1
kernelSize: 5
MAX_REGISTRATION_POINTS: 2000
BATCH_SIZE: 300
MAX_ITERATION: 10
LSnorm: Huber #Huber #l2
huber_threshold: 50
MIN_NUM_EVENTS: 1000
RegProblemType: 1 #( 0 numerical; 1 analytical)
SAVE_TRAJECTORY: False
PATH_TO_SAVE_TRAJECTORY: "/home/antea/main_ws/src/ESVO" # CHANGE THIS PATH
VISUALIZE_TRAJECTORY: True

invDepth_min_range: 0.005
invDepth_max_range: 0.5
residual_vis_threshold: 20
stdVar_vis_threshold: 0.15
age_max_range: 10
age_vis_threshold: 1
fusion_radius: 0
FUSION_STRATEGY: "CONST_FRAMES" # "CONST_FRAMES"
maxNumFusionFrames: 40
maxNumFusionPoints: 2000
Denoising: False
SmoothTimeSurface: False
Regularization: False
bVisualizeGlobalPC: True
visualizeGPC_interval: 1
NumGPC_added_oper_refresh: 3000
visualize_range: 5.0
PROCESS_EVENT_NUM: 5000
TS_HISTORY_LENGTH: 100
INIT_SGM_DP_NUM_THRESHOLD: 500
mapping_rate_hz: 10

DepthProblemConfig
patch_size_X: 15
patch_size_Y: 7
LSnorm: Tdist # l2
Tdist_nu: 2.182
Tdist_scale: 17.277
Tdist_stdvar: 59.763

EventBM parameters
BM_half_slice_thickness: 0.001
BM_min_disparity: 1
BM_max_disparity: 100
BM_step: 1
BM_ZNCC_Threshold: 0.1
BM_bUpDownConfiguration: False

If it helps, I can provide a rosbag with a sample of this dataset.
Any suggestions would be helpful, thanks!

TimeSurface_left-2 process has died!

the compile process is done, but when i run the "roslaunch esvo_time_surface stereo_time_surface.launch" file and the HKU bag, the process has died.
what is the problem and how to solve it?
Thanks!
ccfcfcc9e1b24a862c4074db42c1eaa

something error when I compile

when I run:catkin build esvo_time_surface esvo_core
something error happend.
Cloud you please help me to solve this problem? I' dont know how to solve it.


Errors << esvo_core:make /home/pclin/esvo_ws/logs/esvo_core/build.make.005.log
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘vtable for YAML::BadConversion’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::detail::node_data::empty_scalarabi:cxx11’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘typeinfo for YAML::BadConversion’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::detail::node_data::convert_to_map(std::shared_ptrYAML::detail::memory_holder const&)’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::BadConversion::~BadConversion()’未定义的引用
collect2: error: ld returned 1 exit status
make[2]: *** [/home/pclin/esvo_ws/devel/.private/esvo_core/lib/esvo_core/esvo_Tracking] Error 1
make[1]: *** [CMakeFiles/esvo_Tracking.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::detail::node_data::empty_scalarabi:cxx11’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘typeinfo for YAML::BadConversion’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::BadConversion::~BadConversion()’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘vtable for YAML::BadConversion’未定义的引用
/home/pclin/esvo_ws/devel/.private/esvo_core/lib/libesvo_core_LIB.so:对‘YAML::detail::node_data::convert_to_map(std::shared_ptrYAML::detail::memory_holder const&)’未定义的引用
collect2: error: ld returned 1 exit status
make[2]: *** [/home/pclin/esvo_ws/devel/.private/esvo_core/lib/esvo_core/esvo_Mapping] Error 1
make[1]: *** [CMakeFiles/esvo_Mapping.dir/all] Error 2
make: *** [all] Error 2
Thanks a lot!!!

lack of rostopic

Excuse me ,Dr zhou,i use davis346 to record my own rosbag for ESVO,but there is not a rostipic named /optitrack/davis_stereo.
if this rostopic necessary?
if it is necessary, i want to ask how do you get this rostopic?thank you.

Error when using my own rosbag

Every time I run the mapping code on my own dataset the program crashes with the following error. I guess there is some out of bound memory access in the code. Looks like the program is trying to access an element out of the matrix size.

error_esvo


esvo_Mapping: /usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:365: Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<int, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = int; Eigen::Index = long int]: Assertion row >= 0 && row < rows() && col >= 0 && col < cols()' failed.`

This has already been reported before (link below).
https://github.com/HKUST-Aerial-Robotics/ESVO/issues/1#issuecomment-699609839

Please let me know if you find the solution.

**Note: ** I changed INIT_SGM_DP_NUM_THRESHOLD to 120 as I was not getting enough matching points to intialize SGM.

Initialization failed once

When I try to test esvo on other dataset, it always shows that initialization failed once, and then whole system will reset. The terminal always shows like:
I0730 15:50:41.684104 17011 esvo_Mapping.cpp:481] ********** Initialization (SGM) returns 0 points.
I0730 15:50:41.684176 17011 esvo_Mapping.cpp:243] Initialization fails once.
I have checked my calibration.

something error when I compile

when I run:catkin build esvo_time_surface esvo_core
something error happend.
Cloud you please help me to solve this problem? I' dont know how to solve it.

CMakeFiles/esvo_Tracking.dir/src/esvo_Tracking.cpp.o:在函数‘kindr::minimal::RotationQuaternionTemplate<double>::isValidRotationMatrix(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, double)’中: esvo_Tracking.cpp:(.text._ZN5kindr7minimal26RotationQuaternionTemplateIdE21isValidRotationMatrixERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEEd[_ZN5kindr7minimal26RotationQuaternionTemplateIdE21isValidRotationMatrixERKN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEEd]+0xcb):对‘google::kLogSiteUninitialized’未定义的引用

sudo apt-get install autoconf

hello, I think that to install auoreconf, the command should be sudo apt-get install autoconf rather than sudo apt-get install autoreconf

Why not considering event polarity

Hello, I'm curious about why the time surface doesn't differentiate the event popularity. Is it useless but causing trouble to optimization?

The RMS measured by the rpg dataset is different from the result in the paper

Hello Dr. Zhou. I used 538b576 to test the RMS of the Relative Pose Error of the rpg data set, but the results are very different from the results in the paper, and the results of the upenn data set are similar to the results in the paper.
I use rostopic to record pose_pub and groundtruth, then use evo_traj to convert rosbag to tum format, and finally use evaluate_rpe.py to calculate the error.
I would like to ask if additional processing is required for the rpg dataset, or is it a problem with the testing method I am using. At the same time, I would like to ask how you measure Relative Pose Error and Absolute Trajectory Error.

dataset R in the paper(deg/s) R(deg/s) t in the paper(cm/s) t(cm/s)
rpg_bin 1.2 10.1 3.1 19.3
rpg_box 3.4 22.2 7.2 27.5
rpg_desk 3.1 12.7 4.5 20.6
rpg_monitor 1.7 14.0 3.2 15.8
upenn_flying1 1.0 1.1 6.5 6.8
upenn_flying3 1.2 1.1 7.1 6.5

about time surface

Hi, thanks for your great work!
The time surface is computed in a fixed neighborhood (2R+1 x 2R+1) in the original paper (HOTs).
The neighborhood in your work is the whole image, right?

MVSEC outdoor data parameters

Hello,

I am trying to run ESVO on outdoor driving data (outdoor_day1 or outdoor_day2) from the MVSEC dataset. I modified the rosbags as suggested and slowed down playback. Unfortunately, I have had no luck with tuning the parameters to get satisfying results. I can barely get 150-200 initialization points from SGM, which is likely not enough for reliable performance. Do you have any suggestions for tuning the parameters for this scenario?

Thanks!

Get different results each time.

Why do I run the program multiple times on the rpg_monitor sequence with the initial default parameter and get different results each time? What is the reason? Is it the frequency or something else?

The default parameter is 50Hz clock, 0.5 power play. I slowed down 10 times, but still had the above problem.

My computer is Inter 12700 with 16 GB of memory.

in real time problems

Excuse me again,Dr,zhou.
i want to run this code with my own DAVIS346 in real time,but i got some problems.
The code is runing and no error occur,but there are not result of mapping and tracking ,As shown in the figure below。
i guess the node of tracking and mapping is not running ,so i want to you give me some suggesstions ,thank you.
Screenshot from 2021-12-02 22-29-52

Bad Results Witnessed on RPG Dataset Since 88bb052

Recently, some people reported that they could not obtain ideal results on RPG dataset. As far as I know, this is very likely caused by the modification in commit 88bb052. Please refer to the commit message for further explanation.

For people who are working on small scale environment (with a small baseline configuration) or want to re-generate ideal results on RPG dataset, a quick-hand solution is to checkout an older commit earlier than 88bb052, e.g., 538b576.

I will try to find a unified termination criteria for the inverse depth estimation problem in both small-scale and large-scale data.

TUM_VIE dataset parameters

I'm running ESVO on TUM_VIE datasets. The initialization operates successfully with approximately 10000 points as return, but after initialization, the depth estimation seem to not work fine, as shown like this:
2022-09-21 17-37-07 的屏幕截图
And the ESVO return a bad odometry result. I wonder if my parameters, which are similar to zurish city parameters in your project, are not tuned properly. I try to tune parameters for a long time but it still does not work. I can provide rosbag and h52bag generating code, any help would be appreciated. THX.

terminate called after throwing an instance of 'std::length_error' what(): vector::_M_range_insert

hello, Professor Zhou. When i run the code using my bag(same in dataset),the terminal print:

I1204 21:25:45.739706 570 esvo_Mapping.cpp:243] Initialization fails once.
I1204 21:25:45.747499 560 RegProblemSolverLM.cpp:54] resetRegProblem RESET fails for no enough point cloud in the local map.
I1204 21:25:45.747520 560 RegProblemSolverLM.cpp:55] The system will be re-initialized
I1204 21:25:45.843319 560 RegProblemSolverLM.cpp:54] resetRegProblem RESET fails for no enough point cloud in the local map.
I1204 21:25:45.843341 560 RegProblemSolverLM.cpp:55] The system will be re-initialized
I1204 21:25:45.864013 560 RegProblemSolverLM.cpp:54] resetRegProblem RESET fails for no enough point cloud in the local map.
I1204 21:25:45.864034 560 RegProblemSolverLM.cpp:55] The system will be re-initialized
I1204 21:25:45.868659 570 esvo_Mapping.cpp:481] ********** Initialization (SGM) returns 291 points.
I1204 21:25:45.869015 570 esvo_Mapping.cpp:237] Initialization is successfully done!
terminate called after throwing an instance of 'std::length_error'
what(): vector::_M_range_insert
================================================================================REQUIRED process [esvo_Mapping-5] has died!
process has died [pid 473, exit code -6, cmd /home/zhangwei/catkinevso_ws/devel/lib/esvo_core/esvo_Mapping time_surface_left:=/TS_left time_surface_right:=/TS_right stamped_pose:=/esvo_tracking/pose_pub events_left:=/davis/left/events events_right:=/davis/right/events __name:=esvo_Mapping __log:=/home/zhangwei/.ros/log/9c25dbba-5505-11ec-898a-e442a65d6fd8/esvo_Mapping-5.log].
log file: /home/zhangwei/.ros/log/9c25dbba-5505-11ec-898a-e442a65d6fd8/esvo_Mapping-5
.log
Initiating shutdown!
================================================================================
*`

When use dataset, we can run normally in RPG dataset, but error occured in HKUST dataset. Also, same error occured in ourselves bag.

Could you help me how to solve this problems? Thanks :)

Problem with Eigen while building

After following all the instructions in the README file, I am stuck building the project : catkin build esvo_time_surface esvo_core.
image
image
image

I've already tried uninstalling everything and starting from scratch, and I've googled, but I can't find an explanation for this problem, so I'm posting this Issue in the hope that someone can help me.
I'm trying to run on Ubuntu 20.04 with ROS noetic.

esvo mapping issue with opencv in releaseSlot

I am getting following output when I launch mapping with hkust_lab dataset.

================================================================================REQUIRED process [esvo_Mapping-5] has died!
process has died [pid 18557, exit code -11, cmd /home/ahmed/event_ws/devel/lib/esvo_core/esvo_Mapping time_surface_left:=/TS_left time_surface_right:=/TS_right stamped_pose:=/esvo_tracking/pose_pub events_left:=/davis/left/events events_right:=/davis/right/events __name:=esvo_Mapping __log:=/home/ahmed/.ros/log/a18f2d0a-015e-11eb-b197-0433c2687388/esvo_Mapping-5.log].
log file: /home/ahmed/.ros/log/a18f2d0a-015e-11eb-b197-0433c2687388/esvo_Mapping-5*.log
Initiating shutdown!

[rviz-8] killing on exit
[rqt_gui-7] killing on exit
[esvo_Tracking-6] killing on exit
[esvo_Mapping-5] killing on exit
[global_timer-4] killing on exit
[TimeSurface_right-3] killing on exit
[TimeSurface_left-2] killing on exit
OpenCV Error: Assertion failed (tlsSlots.size() > slotIdx) in releaseSlot, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp, line 1092
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp:1092: error: (-215) tlsSlots.size() > slotIdx in function releaseSlot

OpenCV Error: Assertion failed (tlsSlots.size() > slotIdx) in releaseSlot, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp, line 1092
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp:1092: error: (-215) tlsSlots.size() > slotIdx in function releaseSlot

OpenCV Error: Assertion failed (tlsSlots.size() > slotIdx) in releaseSlot, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp, line 1092
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp:1092: error: (-215) tlsSlots.size() > slotIdx in function releaseSlot

How to calibrate stereo camera

Hello, when I used this project, I noticed that I need to use my own stereo camera calibration parameters. I used ROS monocular camera calibration program to calibrate the two cameras separately, but found that the required calibration file still needed the matrix parameter T_right_left, so I would like to ask how to calibrate my stereo camera. Thank you very much!

Screenshot from 2021-12-04 21-40-40

ESVO parameters for DSEC

Hello HKUST team!,

Would you be willing to share the algorithm parameter values you used to produce the youtube with the zurich_city_04_a dataset?

We are doing some investigations using also VGA sensors and creating our own datasets.

Many thanks in advance.

evaluation

Hi, thanks for the amazing work.

Can you please clarify how do you compute your error metrics, exactly?

Tab. V shows the relative error. Do you use the RPE-script from https://cvg.cit.tum.de/data/datasets/rgbd-dataset/tools#evaluation? If yes, please specify how you call the script (which parameters), but mainly how do you set --max_pairs?

Also, do you do any post-/preprocessing to the trajectory, e.g. interpolation,...?

How can I use two CeleX-5 sensors to record my dataset?

I have two CeleX-5 sensors. When I connect them with my computer, I find I am not able to distinguish them because they have the same VID and PID. They are different with the traditional cameras which are controlled by "VedioCapture capture(0);" and "VedioCapture capture(1);" . I have no idea about how to record stereo datasets for the two CeleX-5 sensors. Can you give me some advice? The following picture shows how to make a monocular sensor work. Thank you!
image

Code comments

hello,I'd like to ask where I can see code comments or other information?

esvo_Mapping error

Hello, I met the error below both with rpg dataset and upenn dataset. Ubuntu 16.04 + gcc5.4.0 + cmake 3.13.0. Eigen is installed before, the version is 3.2.92.
I0103 12:05:16.388438 20419 esvo_Mapping.cpp:234] Initialization is successfully done! esvo_Mapping: /usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:353: Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<int, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = int; Eigen::Index = long int]: Assertion 'row >= 0 && row < rows() && col >= 0 && col < cols()' failed.

esvo_mapping

hello,
In the depthproblem.cpp,why don't need fjac?

esvo_tracking crashes during initialization

Hi, I have compiled ESVO on ubuntu 20.04 after refer to @ghoshsuman 's comment here. But I come across problem when I launch esvo system launch file and it goes like this:
2022-08-16 21-56-31 的屏幕截图
I try to solve the problem but fail, so I'm posting this Issue in the hope that someone can help me.

Tracking node crashes

Hi,

Every time I run esvo_core with either indoor_flying1_edited.bag or indoor_flying3_edited.bag downloaded from your page, I get the following error:
image

The esvo_time_surface node functions well and the map initializes properly. I didn't make any changes to the default parameters. Do you know what might be the problem?

Thanks,
Antea

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.