Multiple base stations with Lighthouse

There has been some background work going on related to the Lighthouse system, as mentioned in a previous blogpost. The solution has been improved since that blog post and we believe the functionality is now on a level where it works pretty well and can add value to most Lighthouse users.

How to use it?

We have added a brief documentation to get you started. Though the solution has been stabilized, it is still a bit experimental and it has not been fully integrated into the client yet. The base station geometry estimator still has to be run as a python script from the command line, and a reconfigured version of the Crazyflie firmware has to be built and flashed.

We have added some improvements to the client thought to enable it to display base station status for 2+ base stations. This was the final part of the client UI that did not support 2+ base stations, and now remains only the possibility to run the new geometry estimation from the client.


What kind of improvements does it bring?

First of all, the functionality to use more than 2 base stations and the possibility to cover a larger flight space. It also makes it possible to set up multi-room systems to support flight from one room to another.

Secondly an improved estimation of the base station geometry (also when using 2 base stations) that generally reduces the errors and improves the position estimation of the Crazyflie when flying. “Jumping” of the estimated position when one base station is occluded should be reduced. When following a trajectory that is straight line through space, the Crazyflie should now actually fly on a fairly straight line, previously the flown path might be a bit curved.

The new solution has a better match to the physical world and hopefully the estimated Z will be closer to zero when the Crazyflie is on the floor, with the “old” method, the solution sometimes is slightly tilted with a Z != 0 in some areas.


Most of the Lighthouse system works just like before, the new functionality is related to base station geometry estimation. The “standard” geometry estimation is still available in the client and if you continue to use this nothing is changed, the following list is for the new estimation method.

  • The new geometry estimation is a bit clunky to use and the user still has to rebuild the firmware and run a python script.
  • Lighthouse 1 is not fully supported
  • The new geometry estimation does not work with one base station.

We hope to address the above problems in future releases.


Talking about releases, we are working on a new official release. If no unforeseen obstacles are found, we plan to make a new release within a week or two.

The functionality discussed in this blog post is still only in source code, on master or possibly in some pull requests. If you wait for the release all repositories should be syncronized and make it a bit easier to try out.


As the environment of the system has an impact on this type of functionality, we would love to get feedback from you if you try it out. We’d love to hear how it works for you!

4 comments on “Multiple base stations with Lighthouse

  • Not a very important feature, but I wanted clarification-has the limitation on base station channels been removed with these changes? Can we now use any of the 16 channels for the base stations?

    Thanks for all the hard work!

  • Hi! In the current implementation channels 1 and upwards are used, so if you build the firmware for 4 base stations, channels 1-4 will be available. It is not possible to pick any channels out of the 16 though, would that be a useful feature?

    • It may be a useful feature for some users, but likely low priority. Certain channels and combinations of channels are louder than others and it varies by base station (mechanical and ear differences). My V2 pair make no audible noise at channels 10&11 but a very noticeable whine at 1&2.

      It is relatively easy to shift channels in steamVR though, hence low priority.

      • Aha! I was not aware of that property, but it makes sense as the drums in the base stations are spinning at slightly different rates based on the channel. It is not impossible to fix but it would spread through most of the code (CF FW, python lib and client). Thanks for sharing!

Leave a Reply

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