Loco positioning system update: Kalman, controller and TDMA

Loco positioning system is still in Early access which means that things are moving fast. Since the release of the loco positioning system a Kalman filter has been contributed by Mike Hammer at ETH Zurich. The Kalman filter allows to calculate the position estimate in the Crazyflie and merges the Loco positioning system information with internal sensor to generate a much better estimate. We also worked on improving the anchor firmware, it is now ranging faster and we fixed a bug that was making the anchor hang sometime. Finally stephanbro on github pushed an improved position controller that improved the stability of flight a lot.

Because of all these changes we have decided to make a new video and to rewrite the documentation on the wiki a bit. Enjoy!

On the development side, we have extended the Loco Positioning system to position 2 concurrent Tags by using TDMA (Time Division Multiple Access) where each Tag is allocated a time slot to use to range to the anchors.


This works fine for a few Tags, but does not scale very well for a larger numbers of tags. If you want to experiment by yourself there is some instruction in the git commit. Be aware that this is still experimental enough for us to break it without warning so keep track of the git commits when you pull the latest version of the firmware. Currently we are working on a TDoA (Time Difference Of Arrival) mode that will scale to concurrently position virtually an infinite number of tags, hopefully you will soon be able to see commits on that on our Github projects.

3 comments on “Loco positioning system update: Kalman, controller and TDMA

  • Hi Arnaud,

    congratulations! This looks very good – I wanna try this my self soon!

    I’m just wondering what role(s) ROS is playing here? I read that ROS is used to update position setpoint, as well as to visualize crazyflie’s current position.

    Where does the actual position control happen? Is crazyflie controlling itself, and calculation the position itself based on TOF “measurements” obtained?

    I’m just wondering, as I have some “hack” in mind. I’m currently playing with some 3D visual odometry system – am I do wonder if I could inject (once normalized odo-estimation to meters) into the kalman filter, and have crazyflie control it’s position based on optical odometry.

    That would off course only be feasible if position-control happens on crazy-flie itself.


    • Hi Florian, thanks!

      The position estimate and control happens in the Crazyflie. In our setup ROS is only used for visualisation and for setting the position setpoint.

      If you have some kind of odometry you can send it to the Crazyflie and process it in the Kalman filter to calculate a position estimate. There is already a radio port setup to send xyz position to the kalman filter (it is mainly used for mocap systems). Currently with the LPS we inject distances to a point (the anchors) to the kalman filter. I had an idea of using camera and sending the coordinate of a line where the camera is seeing the Crazyflie. This way one could easily setup a couple of webcam to make the Crazyflie autonomous and all this work done on the LPS can be useful to way more people.

      What about dropping by the forum so that we can talk more about it?


Leave a Reply

Your email address will not be published. Required fields are marked *