According to the Anafi whitepaper, “An extended Kalman filter collects all sensors data to monitor 18 physical states: … x, y, z position on a NED plane”. Is there any way to retrieve these X,Y,Z values in Olympe or anywhere in the ground SDK? I searched the Olympe online documentation, and the only message that mentions the NED plane is Ardrone3.PilotingState.SpeedChanged, where speedX,speedY,speedZ are expressed in that way. However, I want the actual X,Y,Z values not a speed estimate. I’m using a physical drone, not the simulator.
The problem with using @olympe.listen_event(PositionChanged()) is that it provides latitude and longitude, which are always (500,500) when the drone doesn’t have GPS. The EKF estimated X,Y,Z values should still be meaningful even without GPS as long as they are referenced to the pose from when the drone booted or did a takeoff. I can estimate the drone’s position from the camera images alone, but I really need the EKF to give me more information to use with visual odometry.
I tried using @olympe.listen_event(SpeedChanged()) and then numerically integrating the speedX,speedY,speedZ values, and that works decently well with when the drone has GPS, but as soon as I cover the GPS chip with aluminum foil, the estimates very quickly diverge. I would expect no worse than quadratic divergence from integrating the IMU’s accelerometer outputs. The EKF also outputs a wind velocity on x and y, which I think might account for this divergence, but I can’t really tell without seeing more of the EKF implementation. Is the Anafi EKF algorithm documented in any more detail in a published paper or available if I signed an NDA?