Closed ghost closed 6 years ago
There are two common possibilities when the translation is off
1) There is some time offset between the sensors, try recalibrating with the --time-calibration
flag set
2) The system did not undergo a sufficient range of movements to observe the offset. I couldn't get the pdf to open so I am not sure how much the sensor moved. If repeforming the calibration ensure you have large changes in rotation and translation about all 3 axes.
Thanks you for the tips.
I tried running the calibration with the --time-calibration
flag and using movements that should excite the sensors more. However, Kalibr give we the following error:
Exception in thread block: [aslam::Exception] /home/evlamaa/kalibr_workspace/src/Kalibr/aslam_nonparametric_estimation/aslam_splines/src/BSplineExpressions.cpp:447: toTransformationMatrixImplementation() assert(_bufferTmin <= _time.toScalar() < _bufferTmax) failed [225.292 <= 225.288 < 225.322]: Spline Coefficient Buffer Exceeded. Set larger buffer margins!
[ERROR] [1538120362.562590]: Optimization failed!
Do you have an idea what might cause this error and how I can fix this?
I manually synchronize the IMU and image stream based on a visual cue. Here, I assume that the offset is constant over time. This already reduces the offset to be, at maximum, the time between two frames. If I understand it correctly, the --time-calibration
flag should be able to detect the remaining delay and correct this?
By default the timing calibration assumes that the imu timestamps are within 10ms of correct. If this assumption is violated the calibration fails. As the error says this can be fixed by setting larger buffer margins. This is done with the --timeoffset-padding
option, try setting it to something like 100ms ie --timeoffset-padding 0.1
Out of curiosity what application are you needing the IMU-camera calibration for, as if you are wanting to fuse readings from the two sensors this method of synchronization will likely be insufficient to obtain accurate results.
The --show-extraction
flag showed me the real problem of the calibration not working, the tag was most of the time not detected. Moving my setup closer to the aprilgrid already improved the transformation into a range that seems reasonable. Now I am trying to get a bigger aprilgrid to make it possible to make larger enough movements. I still want to thank you for your help.
I am working on a project to use VIO (ROVIOLI) on a micro drone (Crazyflie) such that it does not need any external measurement methods (GPS or Ultrawideband positioning). Since the Crazyflies cannot transfer the video feed to my PC I am using an external system to do that. I am also working on a system that removes the need of manual synchronization, but that is not yet finished. I do agree that transmitting the video through the drone would make this allot easier, but sadly bigger drones will probably destroy our lab.
In my experience for reliable operation on a dynamic platform like a drone, ROVIO / ROVIOLI need timestamps that are correct to within 5ms, this could be quite difficult to achieve with your described configuration.
@maartenvlaswinkel Hi I'm trying to use the Kalibr with my crazyflie and I need help with that? Can I text you if you succeeded to run it and get output calibration results?
Hi @mohamedelomari ,
As @ZacharyTaylor already mentioned Kalibr needs a proper synchronization between the video and IMU data streams. Without this, Kalibr will not work. I was able to gets a proper synchronization and got Kalibr to work. Sadly I am not able to share my solution to synchronize the two stream since it was partof a confidential project.
Hi all,
I am using a drone setup with a 30FPS rolling shutter camera and an IMU sampling at 500hz. While I am confident that the camera intrinsic calibration gives a good result, I am not that happy with the result form the camera-imu calibration. These are my results
And the generated plots: report-imucam-imu_camera_cal_deinterlaced_sync_20180926.pdf
I have tried to reduce shocks and motion blur as much as possible. I found the noise model using the Allan deviation.
I think that the rotation part of the transformation could be correct, however, the translation part doesn't make any sense to me. The distance between camera and IMU is in the magnitude of several centimeters instead of meters.
Does anybody know what might be going wrong and how I can improve the results?