I have heading measurements of two Sensors (BNO055 and HMC6343) and also accurate measurements from better sensors for comparison from a rotating platform. Most of the measurements are with some kind of potentional error source like passing train, large ferromagnetic materials.

The measurements of the BNO055 can't be used at all since he mostly doesn't even react to changes in angle. The measurements of the HMC have some other problems.

  • Large Offset at the Start that only converges towards the true value after some movement of the sensor (elevation change) i guess sensors needs to calibrate at the start every time
  • Sometimes small global offsets towards the true value
  • Larger periodic deviations and noise (esp. near rails)

If you don't want to read the paragrpahs of my endeavors below. My question is basically is it possible to get major improvements with only positional data from one sensor and the reference data and nothing else?

I'm kind of at a loss how i could improve the measurements. I started to learn about Kalman filter and tried a simple kalman filter with a linear model: x+vt+at^2/2 (x being angle etc.). But neither sensors fusion is an option because of useless BNO measurements and also a filter with just HMC measurements with state vectors (x,v) and (x,v,a) don't really improve my measurements. (x,v,a) vector is actually even worse.

I'm kind of at a loss here. I'm trying to understand unscented/extended kalman filter but atm i don't really see the point since its for nonlienar models and i don't know how i could't describe the angular movement differently than with the simple movement equation above.

I also read something about calibrating with neural networks but are not quite sure if it's worth to invest more time into it since my time is limited.

Edit: I added some pictures of the measurements so people who might want to chip in have a better idea. The blue and red lines are not interesting. Green are the accurate measurements. Orange are the measurements of my sensor. A big problem is also that the sensor doesn't measure the right heading at the start if the antenna hasn't changed elevation yet. He seems to need to calibrate for a bit to reach his estimated value.

enter image description here

enter image description here

enter image description here

enter image description here


While 'major' improvements is subjective, you can certainly improve your system more than it is (at least as you have described). Based on your problem description, it sounds as if your measurements may be non linear (you will have to confirm this). If this is the case, then a linear filter, such as the Kalman Filter, won't work well at all.

From here, you need to determine if these 'large periodic deviations and noise' are normally distributed or not. If they are, then you can try a non-linear filter such as the Unscented Kalman Filter (If the deviations are truly 'large', the unscented filter is preferable to the extended as it is more robust to higher levels of non-linearity). If your noise and 'periodic deviations' are not normally distributed, then you will have to consider non-parametric approaches such as the Particle Filter.

As far as sensor calibration, you could try more advanced techniques, but typically the sensor manufacturer will supply some form of calibration procedure. This procedure is typically recommended unless you are absolutely sure about a different strategy.

  • $\begingroup$ How do i see if my measurements are non linear? I mean i know they are derived with nonlinear calculation from magnetometer and accelerometer measurments from different axes. But thats a black box for me i only get the angle data. I thought linearity and nonlineary is decided with the system matrix A. And since it's jsut a simple rotation i don't know how i could model it differently then stated above. $\endgroup$ – Vash Jul 17 '18 at 6:03
  • $\begingroup$ Also the devations are gaussian when they happen but they happen totally random and the other errors i have are certainly not gaussian. I also read about fuzzy kalman filtering. $\endgroup$ – Vash Jul 17 '18 at 6:07
  • $\begingroup$ You can tell if your measurements are linear or not based on how they change with time. If the magnitude of change over each time step is (approximately) the same, then you have a linear (or pseudo linear) system. If they change in heading is very different over different time steps, then you have a non-linear system. $\endgroup$ – koverman47 Jul 17 '18 at 14:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.