Local Indoor Positioning System - from scratch!

Written by Grega Bernot on April 18, 2016

We developed a Local Indoor Positioning System including RTLS algorithms.

Booting up MULTILUX using LIPS

We started our company from an idea we had. And that was, of course, very very wrong.

Namely, our initial group of three young electrical engineers had experience in light jaying. We were mostly working on club music events and had experience in managing multiple PAR lights, moving heads, scanners and other light gear. It was actually really fun.

One day, one of the performers came to us with the idea that manually following performers was an unnecessary task and we should have automated it. Back then, we have not yet heard of customer discovery, working lean, drawing business canvases etc. So as good engineers, we developed an indoor positioning system from scratch.

First prototype

We managed to find an RTLS (Real-Time Location System) RF module compliant with IEEE 802.15.4a and IEC/ISO 24730-5 which are standards concerning RTLS at 2.45 GHz. Back then, UWB technology was quite expensive and RSSI-based systems were, of course, too inaccurate. That quite justified our choice of hardware.

We built a new PCB around that module, adding a custom microcontroller that would support our requirements of having custom RTLS algorithms. Namely, although the module's producer had provided some firmware, we found it too clumsy and instead rather wrote our own. And this was actually the right decision.


Writing own RTLS algorithms was a tedious task, but we managed to succeed anyway. We developed our own trilateration algorithms using Non-linear Least Squares and also used an accelerometer and Kalman filtering.

Besides, multi-path was a demanding issue that we managed to resolve using our own analog RF front-end. Anyway, some additional software measures have been taken to improve accuracy.

  • We introduced cells, which are groups of four anchors. We did that to ensure that a tag would always receive measurements from the best qualified anchors based on the tag location.
  • Cell hysteresis is something we had to implement since switching cells could make a tag's location oscillate between two cells if measurement error on the border was too big.
  • We implemented filters and profiles that were intended for different movement types such as walking or running.
  • Measurement constraints, such as maximum tag-to-anchor or tag-to-accesspoint or position speed were introduced in order to eliminate "bad" measurements.

All these features were implemented within the firmware, so that no software was required for LIPS to function and it could have been used as an entirely embedded system.


We performed many tests of our newly developed prototypes in both indoor and outdoor enviroments. We compared measurement results to expectations, and were constanly adjusting parameters to finetune the system.

Although our target was a solution for stages where we could automate lights such as moving heads or scanners, unfortunately we could have not achieved good enough accuracy for that application. We managed to make it up to ±1 meter, which is great achievement, yet for a scanner light to dance left and right that much would not be acceptable.

But since we developed a great Real-time Location System (RTLS), we decided to continue by taking it into production and develop it into an RTLS platform any developer could use for custom applications. Therefore, LIPS was born.

PCB design including 3D modeling

The developed prototype was upgraded into a production-ready PCB. We added dip switches for address and role configuration, making our LIPS a universal device that can act as either accesspoint, anchor or tag by simply changing its dip switches.

We prepared the PCB to fit into the chosen enclosure, added an integrated patch antenna and a battery as well.


We developed a 3D model of the chosen enclosure. Milling and printing was added based on our designer's suggestions, and after branding was applied we started to feel that a real product was being born.

Modular design

The device we developed from our prototype into the production-ready system was actually split to two PCBs. The core functionality was put on our custom RTLS module we developed, and periphery was put on the motherboard PCB. In that way, we could also provide our module standalone so that third-party developers could integrate it into their hardware. This module only measures 33 x 30 mm, and features all the hardware and firmware so that it can operate as either an accesspoint, an anchor or a tag.

Final product

Finally, we made it to our production ready RTLS system LIPS. Every device consists of a module on its motherboard and is packed into customized enclosure for industrial use. The system has also been tested in production with many international clients, and we're quite proud that it performs well. Unfortunately, not accurately enough for automatically moving light fixtures, but to be honest that was a high-flying target.

At MULTILUX, we are proud of our LIPS system since this was our debut project. We managed to develop a demanding hardware system and confirmed its functioning on many international clients. This proved that we can develop complex hardware and are indeed eager to continue doing so.

Does your project require a full-stack engineering team?

We're trusted by these popular companies:
  Back to Projects