ethz-asl / kalibr

The Kalibr visual-inertial calibration toolbox
Other
4.43k stars 1.4k forks source link

Accelerometer bias exceeding 3-sigma bound even when other results seem fine. #680

Open TakShimoda opened 7 months ago

TakShimoda commented 7 months ago

Hello, I'm doing stereo-imu calibration on a realsense d435i. I use the infra1 and infra2 topics from the camera at 848x480 resolution and 30fps for stereo, and get the IMU data at 400Hz. I'm using the 6x6 april grid as the target.

Here's what I did: 1) realsense imu calibration. I calibrated the imu inside the d435i to account for the intrinsics and biases so it reads close to [0, -9.81, 0] at rest in the xyz axes (using the realsense coordinates where y is opposite of gravity). 2) Allan Variance ROS, where I placed the IMU at rest for 20 hours, and followed the same steps in the repository. The result of imu.yaml is:

#white - inflate 5x
#randomwalk - inflate 10x
#=========Original data======== 
# #Accelerometer
# accelerometer_noise_density: 0.0016366054249606224 
# accelerometer_random_walk: 7.976531501174554e-05 

# #Gyroscope
# gyroscope_noise_density: 0.00021995795281750234 
# gyroscope_random_walk: 2.882662305656072e-06 

#Accelerometer
accelerometer_noise_density: 0.008183027 
accelerometer_random_walk: 7.976531501174554e-04 

#Gyroscope
gyroscope_noise_density: 0.00109979
gyroscope_random_walk: 2.882662305656072e-05 

rostopic: '/camera/imu' #Make sure this is correct
update_rate: 400.0 #Make sure this is correct

3) I then performed the camera calibration and the camera-imu calibration where I tried to excite multiple axes each time throughout the recording. The camera calibration resulted in reprojection errors at about 1 pixel and a Gaussian distribution. For the camera-imu, I do get the reprojection error for both cameras mostly within the 3 sigma bound as shown: image image

However, the accelerometer bias exceeds the 3-sigma bound in one of the axes shown below: image

I was wondering if I should inflate the accelerometer noise even more in the imu.yaml file that's given by allan-variance-ros, or if I should try another recording? The 3-sigma bound for the accelerometer already seems pretty large. I tried a separate recording where I excited each of the 6 axes individually, but got worse results, where the biases significantly exceeded the 3-sigma bound in two axes, and I tend to notice accurate results in the report are heavily reliant on a good recording. I also try to move the camera as slowly as possible to avoid jitters. The only thing I notice in my recordings is that sometimes, the checker board falls out of the screen, but I think kalibr ignores those frames.