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

Sensor configuration and Noise levels #90

Closed
flaviofontana opened this issue Dec 12, 2014 · 7 comments
Closed

Sensor configuration and Noise levels #90

flaviofontana opened this issue Dec 12, 2014 · 7 comments

Comments

@flaviofontana
Copy link
Contributor

Reading through the issue list I see a lot of questions 1, 2, 3, regarding how to set the sensor configuration correctly.

core/core_noise_acc
core/core_noise_gyr
pose_sensor/pose_noise_meas_p
pose_sensor/pose_noise_meas_q

There seems to be a lot of confusion in what units these values are. I will write down some terms and units that we talk about the same.

Position Acc
Standard deviation std dev m m/s^2
Variance var m^2 m^2/s^4
Noise spectral density NSD m/sqrt(Hz) m/s^2/sqrt(Hz)
Power spectral density PSD m^2/Hz m^2/s^4/Hz

I think that the configuration throughout the framework is not consistent yet and that me need to adapt some comments.

in the Core cfg the comment is std/dev however I suspect what you enter here is treated as a NSD. I can trace it until the calcQCore.h but then I can not understand what happens with it any more. But according to multiple comments by the authors this is a continuous noise spectral density.

Then for the pose sensor cfg the comment is again std dev. And I think here it is ok. Looking at the code.
If we provide a pose with covariance the provided covariance is used directly. If fixed_covariance_ is set we take the std dev from the config and square it to get the covariances.

To sum it up can we please write down the units for the config file. My suggestion is the following

core/core_noise_acc   # NSD [m/s^2 / sqrt(Hz)] can be taken directly from the datasheet
core/core_noise_gyr    # NSD [rad/s / sqrt(Hz)] can be taken directly from the datasheet
pose_sensor/pose_noise_meas_p             # std dev [m] 
pose_sensor/pose_noise_meas_q              # std dev ??? what is the std dev for quaternions ???

Once the problem is discussed we are happy to help fixing the comments in the cfg file.

Gruss Flavio and Antonio

@simonlynen
Copy link
Contributor

@flaviofontana sorry for the delay on this. I agree with your suggestion and I would be happy see these fixed in the framework. The unit of the measurement noise on the orientation is expressed in radians.

@fboris
Copy link

fboris commented Jan 6, 2015

I'm glad to see your improvement. I was struggling with this "unit problem".

@flaviofontana
Copy link
Contributor Author

@simonlynen Thanks for your reply I started working on integrating the comments, I also took the liberty to modify the pose_sensor config file and add comments. Let me know if this approach is ok for you
https://github.com/flaviofontana/ethzasl_msf/commit/d8afeffa65ebaac63560ce0fd059dde147fc9e6f

I still have two open questions

  • in your config you estimate for example the scale, however you set the process noise to zero, is this correct or should we set it to something small (what is small)?
    pose_sensor/pose_fixed_scale: false pose_sensor/pose_noise_scale: 0.0
  • for pose_noise_meas_q do you use the convention of the ros pose msg?
    meaning I can compute this value from experimental data as follows
    • record N+1 orientation measurements with sensor at rest -> q0, .... , qN
    • transform the N quaternion to the three euler angles -> phi0, ... phiN; theta0,... thetaN; psi0,...,psiN
    • compute the std dev for each angle phi, theta, psi -> take the mean of the three

cheers,
flavio

@simonlynen
Copy link
Contributor

@flaviofontana yes, the changelist looks great!

qs:

  1. We usually have seen no large scale drifts and thus prefered to keep the covariance for the scale a bit tighter by leaving it at zero.
  2. yes that would be ok to do. Of course it is better if you get these values from your pose-computation algorithm and not use a fixed measurement noise covariance.

@flaviofontana
Copy link
Contributor Author

@simonlynen Thanks again for your answers.

  1. but even with 0 covariance the scale will be estimated?
    For the examle config, should be set it to e-10 just to make a point that when somevalue it not fixed processnoise needs to be defined?

I will finish it tmrw and send then a pull request.

flavio

@simonlynen
Copy link
Contributor

@flaviofontana yes, the additional inflation of the covariance for the scale estimate can be used to model larger drifts in the scale of the SLAM system. The scale is estimated independently from that.

I would prefer if you left it at zero like the covariance inflation on the extrinsic calibration.

@simonlynen
Copy link
Contributor

@flaviofontana Please take a look at this definitions here and try to either point to these or adopt as much of the notation as possible: https://github.com/ethz-asl/kalibr/wiki/IMU-Noise-Model-and-Intrinsics

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