IMU Covariance


I´m relative new to ROS and Robotics, so bare with me if this question is answerded somewhere else. I´m building a drone and want to localize my System with and extended kalman Filter. The covariance Matrix from the IMU Topic only contains zeroes. Is there a good way to add real world covariances? Do i need to do it manually or is there a way to configure them inside the Firmware?


Best Answer

  • 1 Comment sorted by Votes Date Added
  • edited January 16 Answer ✓ Vote Up1Vote Down

    Hi @maxkirsche! welcome to ROSflight.

    I actually use ROSflight for kalman filters a lot, I typically use it for the high-update IMU from the flight controller.

    The reason we haven't added covariance to the IMU message is that it's hard to tell what that covariance should be. If you're on a multirotor, the noise is significantly more than if you were hand-carrying the device or if on a fixed-wing aircraft, and even that would be heavily dependent on the sort of vibration damping you've put on the aircraft. Therefore, in my experience the covariance is a different value for each aircraft.

    What I've typically done is fly my aircraft around and record the IMU data. I may even try to hover it, or keep it in some sort of quasi-static situation where I can get a good idea of what the noise is on the sensor and post-process the data to find the covariance. This lets me get a good idea of what the noise from motors looks like, which isn't visible when the aircraft is sitting on the ground. I'll then hard-code it into my Kalman filter as a constant covariance.

    It's probably not ideal, but it's pretty good, and I've gotten really good results with that approach. More sophisticated approaches might try to calculate the covariance in real time onboard and push that over the serial link, but so far there haven't been any attempts at making that happen.

Sign In or Register to comment.