Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running on EurocMav Datasets #16

Open
goldbattle opened this issue Feb 21, 2020 · 10 comments
Open

Running on EurocMav Datasets #16

goldbattle opened this issue Feb 21, 2020 · 10 comments
Assignees

Comments

@goldbattle
Copy link

Hi, thanks again for open sourcing. Was trying to get your system running on the EurocMav datasets. I was able to compile and run on the TUM-VI room1 dataset it is just the euroc mavs that are having issues for me. I have attached the configuration file that I have created. I am starting the rosbag files from the very beginning of each dataset.

config.zip

Do you have a config file that I could use to evaluate your method on the EurocMav with?
If not, do you see any problems with the one I have attached?

@stephanietsuei
Copy link
Collaborator

We have not been testing on the EurocMav datasets. Can you please elaborate more on the problems that you're seeing?

Looking at your config file, this are the best guesses I can give you, short of trying to run and tune it myself.

  1. I notice that X.td is zero, and it is probably not zero. Since EuRoC and Kalibr are both published by ETH, you should be able to run the calibration dataset through Kalibr and get a better number.
  2. Double-check numbers for min_depth and max_depth and any other standard deviation numbers. They are very specific to the environment. TUM-VI room sequences are entirely contained in a small room, so 5m might be too small.
  3. If the datasets do not start from rest, set gravity_init_counter to 0 and make sure that X.Wg is correct.
  4. Make the noise parameters in Qimu bigger.; For TUM-VI dataset, we inflated the numbers by three times.
  5. If all that fails, edit src/CMakeLists.txt and turn on online calibration. (XIVO is under active development. I recently committed something that affects the radial-tangential distortion model, so please pull the latest copy of the devel branch.)

@malteprinzler
Copy link

Have you been able to find a working solution?
When I looked into the IMU data of euroc and data9_workbench, I found that the directions of gravity are not equal (+9.7 for euroc / -9.7 for data9_workbench). I guess the orientation of the mounted IMU differs however I am not sure which parameter to adapt in order to correct for this.

@stephanietsuei
Copy link
Collaborator

stephanietsuei commented Feb 26, 2020

I haven't had time to really look at this, but I can comment on how Xivo deals with gravity.

If you start from constant velocity (e.g. rest), and if the parameter gravity_init_counter is greater than 0, then Xivo will use the average of the first gravity_init_counter IMU measurements to solve for the transformation that aligns the parameter gravity to the spatial frame. This transformation is stored as the state variable Wg (gravity vector -> spatial frame, so really Wsg). During this period, Xivo will not attempt to estimate the state. Wg will be adjusted/updated during state estimation.

The code that initializes gravity is the function xivo::Estimator::InitializeGravity which is called from xivo::Estimator::InertialMeasInternal

If you already know the proper value of Wg, then you can put that value in X.Wg and then set gravity_init_counter to 0. If your dataset does not start from constant velocity, you absolutely must do this.

@malteprinzler
Copy link

I have a question about your definition of W_{sg}. According to the xivo paper, the spatial frame is defined such that the gravity goes along the z-axis of the spatial frame:
"The spatial frame s is attached to Earth and oriented so gravity T = [0 0 1]T x k is known."
Shouldn't in this case W_{sg} always be Identity?
What xivo::Estimator::InitializeGravity() seams to calculate is W_{bs}. Are my thoughts correct?

@malteprinzler
Copy link

Another possible explanation: the spatial frame coincides with the body frame during gravity initialization. Then everything is clear. Could someone please verify? Thanks

@stephanietsuei
Copy link
Collaborator

The body frame is always aligned with the spatial frame during initialization; the spatial frame is defined to be wherever the body frame is at the very beginning.

The body frame, however, is not necessarily aligned with gravity at initialization. Then, W_{sg] is nonzero. Does that make sense?

@malteprinzler
Copy link

Yes that makes perfectly sense. Thank you very much for this clear explanation. I have one more question and even though it might not be directly connected to the EurocMav dataset it might help me to find a working configuration:

What exactly are the values in P used for?

I tried to do some digging in the source code but Im still not sure what P is used for.

@stephanietsuei
Copy link
Collaborator

P contains the initial value of the state covariance. See

@goldbattle
Copy link
Author

Hi, was a config every uploaded that worked? I don't see one here.
https://github.com/ucla-vision/xivo/tree/devel/cfg

@stephanietsuei
Copy link
Collaborator

Oh whoops. It's been a while and I thought the problem had been solved.

@stephanietsuei stephanietsuei reopened this Jan 3, 2022
@stephanietsuei stephanietsuei self-assigned this Jan 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants