As noted in a previous post, Mike Hamer from ETH Zurich has been implementing an Extended Kalman Filter (EKF) for the Crazyflie. The beginning of this week I am visiting Michael at ETH and we have now pushed the EKF to the Crazyflie master branch!
Visiting ETH is really nice, and it is very impressive to see the Flying Machine Arena in real life. Though, owing to the Crazyflie’s size, we do not need such a big space and can work in a more regular-sized room.
The EKF has now been added to the master branch but is not enabled by default. It is currently intended to be used with the Loco positioning system (although it should be easy enough to integrate with onboard GPS, or potentially offboard motion capture measurements). While it does fly better than the currently used, offboard particle filter for autonomous flight, it requires some care to work properly. I am going to update the wiki description for the loco positioning to document how to get started with the EKF during the week. Our hope is that through community engagement and feedback, we can continue to improve and tune the filter, now that Mike has put the basic functionality in place.
The greatest enhancement is that the Crazyflie is now able to estimate its own position, without the help of an external computer. Coupled with the onboard controller, the Crazyflie can now fly fully autonomously. I have also pushed a new example in the Crazyflie python lib that shows how to send an X/Y/Z set-point to fly the Crazyflie, allowing it to fly through waypoints.
In the near future we (Bitcraze, and hopefully, the community!) need to work on a couple of more things to make it fly even better
- Revamp of the controller: the current controller is a position controller, splitting it in two controllers, one for position and one for velocity, would allow for a more stable flight and to finally use TheSeanKelly new PID settings!
- Implementing TDOA positioning on the LPS would allow more than one Crazyflie to fly at the same time
- Implementing the new commander packet in the Crazyflie, python lib and ROS driver. This will allow us to stop hacking the current commander each time we need a new functionality (such as onboard position control) — and since I have push rights, only my hacks get pushed, which is unfair ;-).
Mike will describe the Kalman filter in greater details in a future post. In the mean time we will update on the progress in the Loco Positioning mailing list.
Nice :)
Did you meet Brescianini&D’Andrea’s Omni-directional UAV? http://flyingmachinearena.org/wp-content/publications/2016/breIEEE16.pdf
Or other exiting projects there?
BR
Yes I saw it lying around in the Flying Machine Arena, but not flying unfortunately. Also saw a lot of the ETH projects previously seen in there youtube videos. I had the chance to get a demo of the Flying Machine Arena systems, this is really impressive stuff.
Great work. I intended to do the same. Will try my best to improve further
Thanks! Feel free to report the results of your tests on Github, the performance have already been improved since this post, but there is still some margin for improvement :-).
I am trying to implement kalman filtering for height estimation by fusing ACC and Baro sensor. (Ultra sonic and GPS height additionally)
Do you have any plan to do this? or already in the code? Thanks,