UZ-SLAMLab / ORB_SLAM3

ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM
GNU General Public License v3.0
6.67k stars 2.57k forks source link

When I tested with own data, reset occurs frequently. (Mono-Inertial) #499

Open YouMinJung opened 2 years ago

YouMinJung commented 2 years ago

Hi. when I tested with EuRoC dataset, I get the good result. So I want to test with own data.

I collected camera images and imu data with timestamp. My dataset is like below. image

Furthermore, I calibrated camera-imu with kalibr. This is the own YAML file. image

However, I tested with orb-slam (mono-inertial), remapping occured very frequently. Reset occurred approximately every 4 seconds even when I walk straightly forward.

What is the problem? How to solve this problem..?? help..

makolele12 commented 2 years ago

Are you sure your NoiseGyro value is okay? It is way to big in comparison to the other 3 parameters.

I am having the exact same behavior in Monocular-Inertial. I am using the Intel RealSense D435i camera and even when using the calibration parameters they propose, the IMU does not get initialized and the map is frequently being reinitialized.

This does not happen to me with the same camera and videos but in Monocular-only though.

YouMinJung commented 2 years ago

I calibrated imu sensor using imu_utils. When I record the imu data for the calibration, I shook the sensor approximately 45 minutes. Is this correct action?

Maithilishetty commented 2 years ago

Even I am facing frequent reset problem. Did anyone solve this?

ynma-hanvo commented 2 years ago

same for me. I used stereo-Inertial with my stereo cameras, parameter from kalibr result. also tracking reset every few seconds. for stereo is ok

rancheng commented 2 years ago

have a look here guys:

ORB-SLAM3's YAML file has the following unit: rad/s^0.5 and m/s^1.5:

you probably calibrated the noise density with kalibr, please make sure you convert it back to noise in continuous time!

Always pay attention to the details.

kalibr gyro\accel noise or random walk density can be converted back to noise or random walk by:

import numpy as np
your.gyro.noise_density / np.sqrt(1/200.0) # assume your imu frequency is 200 HZ
your.accel.noise_density / np.sqrt(1/200.0)

your.gyro.random_walk_denity * np.sqrt(1/200.0)
your.accel.random_walk_denity * np.sqrt(1/200.0)

see also: issue #280

sandstorm666 commented 2 years ago

@rancheng I did what you said and still had frequent resets. I calibrated the parameters of the imu as follows. IMU0: Model: calibrated Update rate: 200.0 Accelerometer: Noise density: 0.0181066131887 Noise density (discrete): 0.2560661794 Random walk: 0.000479934988114 Gyroscope: Noise density: 0.00191159599129 Noise density (discrete): 0.0270340497667 Random walk: 1.34283856163e-05 This happens even though I multiply or divide by the square root.

wwendy233 commented 2 years ago

have a look here guys:

ORB-SLAM3's YAML file has the following unit: rad/s^0.5 and m/s^1.5:

you probably calibrated the noise density with kalibr, please make sure you convert it back to noise in continuous time!

Always pay attention to the details.

kalibr gyro\accel noise or random walk density can be converted back to noise or random walk by:

import numpy as np
your.gyro.noise_density / np.sqrt(1/200.0) # assume your imu frequency is 200 HZ
your.accel.noise_density / np.sqrt(1/200.0)

your.gyro.random_walk_denity * np.sqrt(1/200.0)
your.accel.random_walk_denity * np.sqrt(1/200.0)

see also: issue #280

I don't know if I understand it wrong. Should the value in sqrt() be changed to 200 instead of 1/200? For example, when the acc_n output by kalibr is 0.004 and the frequency is 200, should it be written as 0.004/sqrt(200) in ORB-SLAM3's YAML file?

rancheng commented 2 years ago

@wwendy233 are you calibrating the imu with this tool: imu_utils ?

sandstorm666 commented 2 years ago

@wwendy233 are you calibrating the imu with this tool: imu_utils ?

i solved

mahammadirfan commented 2 years ago

Hi @rancheng , I am using https://github.com/ori-drs/allan_variance_ros Do i need to convert the unit as well ?

ricardo11235 commented 2 years ago

Hi @YouMinJung , Can you tell me what type of imu you're using?Does the fps of imu affect the algorithm?my imu can only output 75fps

LarryDong commented 1 year ago

Hi guys, I searched for the unit and gives the conclusion:

  1. Try to use https://github.com/ori-drs/allan_variance_ros but not imu_utils. Check this discussion for detials.
  2. allan_variance_ros's output unit is just the same as orb-slam3, no convertion (like vins-mono, convert to discrete time) is needed. The unit is just continous form, which I think @rancheng 's comment is wrong.
  3. Reset frequently comes from other issues, not just the unit.
wqrydqklyu commented 1 week ago

Are you sure your NoiseGyro value is okay? It is way to big in comparison to the other 3 parameters.

I am having the exact same behavior in Monocular-Inertial. I am using the Intel RealSense D435i camera and even when using the calibration parameters they propose, the IMU does not get initialized and the map is frequently being reinitialized.

This does not happen to me with the same camera and videos but in Monocular-only though.

I am using the same sensor, the Intel RealSense D435i cam, have exactly the same problem you encountered: it works in monocular-only mode but reset frequently in monocular-inertia mode. Have you solved it?