Introduction: Localino: Open Source Indoor Positioning System (Arduino + Decawave)

Update, we are in Level 2 (June 16th, 2017)
We moved to the next level and are happy to announce Localino v2.0. This is an STM32F1 series based indoor location anchor or tag. It has a massive amount of flash and memory, additional I/O pins to stack up additional sensors and is code compatible to the v1.0 / v1.3 hardware. There are some other minor adaptions like a more robust USB connector, sideways switch... and for sure, the Anchor also has Wifi.

If you are used to Arduino IDE you can use it as this STM32F1 is compatible. For sure also CoIDE or Keil will work if you like IDEs with debugging environemt. It is also compatible to decawaves API which also uses an STMF1 series MCU. As a programmer we use St-Link v2 which are super cheap and available online.

Because the STM32 is much faster compared to the arduino, multi-tag localization with high speed is now possible. In the arduino multi tag is also possible, but with less update rate. We have implemented some code that now allows to locate and track many tags with minumum 3 anchors (see video) very fast. The number of tags, that can be located from 3 anchors depends on the desired position update rate and selected data rate. The cool thing is, the system is very easy scalable, because there is no master node required nor syncronization distribution.

Update: new tag v1.3 (Jan, 10th, 2017)

We just hand soldered and finished a new and
smaller tag, which is compatible with the old ones. Nice! Worked straight away. Even nicer! You can see the PCB in the picture. Although the "t" got wiped away in the URL I like it very much...


This instructable explains how to build an indoor location system with centimeter accuracy for <$ 200 using ultra wideband. do it yourself.

Most indoor location systems make use of wifi, bluetooth, wifi fingerprinting etc and show accuracies within several meters. Ultra wideband systems offer high accuracy (cm range), due to wide signal bandwidth. However, these UWB systems are very expensive, so for a setup where you want to localize something in your project (for example maneuver your lawnmower) you can easily spend > $1000 or more.

We decided to make a universal PCB that can be used as tag or anchor with or without wifi interface and an UWB ranging transceiver. With these diy-kits you can setup an indoor location system consisting for 3 anchors + 1 tag for around $200! And its even less, if you just want to measure the proximity to something... (1 anchor + 1 tag).

In this RTLS system, several anchors were build that dump the ranging data over the local network to a server. This way, long range communication and integration into already existing environments is possible, without having a certain master anchor that calculates the positions and requires alot of processing power. This is also possible, but requires messaging between the anchors and a processor connected to a single anchor (master). However, its more convenient to do this over wifi. A local PC connected to the network receives the data from the LAN in nearly realtime, runs the positioning calculation and draws the position of the tag.

See one of our videos how the results look like. In this instructable we will explain how we build and setup the system.

Please note: this instructable is still in progress... you can also visit us

Step 1: Design Your PCB or Get the PCB

We designed an universal PCB, which can take the UWB ranging chip and a Wifi Interface + some SMD compoenents. For this purposes we make use of the decawave DWM1000 and the ESP8266-07. The latter is well known in the maker community. You can either design your own PCB or take one of ours, its already proven and works like charm. We also started initially with wiring the components, this was very annoying and error-prone. Next time I will do a PCB immediately.

As a design tool for your PCB you can for example use EAGLE or KiCAD. there are for sure dozens of PCB design tools, but if you want to start with a PCB we recommend to use one of these two. There are plenty of tutorials on youtube.

When you finished the design, don't take the effort to print these PCBs on your own. There are many tutorials how to make a PCB, but honestly, this is very exhausting and -hey- for this setup you will already need 4 PCBs, right? So go to some PCB manufacturer and let him do the job. He will charge you some bucks for a piece, but you will know the PCB is ok, tested and will work. There is no effort to find dead traces, take care of the etching and so on. I have manufactured hundreds of PCBs myself in the early days, its not worth anymore. Unless your design is not super super secret or complicated design you can also send them to the very very cheap manufacturers.

Step 2: Solder the Components on Your Board

Now its time to solder. Again, there exist plenty of tutorials which show and explain SMD soldering. Some of them make use of hotair or reflow stations when soldering SMD. These are useful, no question, but for your personal project you should have taken care that you can easily solder by hand with a standard soldering iron during the design phase already. Unless you wanted a very very small PCB ...

In this PCB we make use of 1206 SMD, because we decided we dont want to use a stereo microscope to solder the components onto the PCBs. And again, you will need at least 4 PCBs to be soldered, so it should not take days to finish it.

Solder a single tag (without Wifi component) and (for 2D positioning) 3 Anchors (incl. Wifi) or (for 3D positioning) 4 anchors.

Three anchors will push all ranging data of a single tag to the software (see later steps), which processes the position in space.

Step 3: Flash the Firmware to Your Devices and Configure Them

Nothing works without firmware and hardware. Arduino's are awesome devices, they are cheap, well acknowledged in the maker world and there is plenty of libraries available. This is the reason why we decided for them. Luckily, there is also already a library which supports the ESP and Decawave chip. You can also find the code on github or on our website You will need to connect an FTDI or an ATMEL ICE etc (DebugWire) to flash the firmware onto the microcontroller. DebugWire is nice, because it also offers debugging capabilities...

Adapt the atmel code and flash a unique ID onto every anchor and tag. You also need to flash the ESP and connect it to your network. This way, the anchors will send data to your localization program


Step 4: Start the Software

Now place the anchors in space and note down the positions in space inside the configuration file of the "Localino Processor" (thats the python code we uploaded to our website, which processes the data from the Anchors). Configure the IP of the receiver PC and power up everything.

Step 5: Enjoy.

That's it, enjoy.

We will keep updating this instructable and add more details... stay tuned!


werty37 made it! (author)2017-05-13


Can you please point me to the localino board PCB layout files?


JacobT87 made it! (author)2017-03-23

I question from someone who doesnt know much about IPS. Does the system detect the obstacles or do we need to "map" the environement ? I wont to devellop a rover that would move in an environement and react to the obstacle. Is this product adapted for my project ?

kuek made it! (author)kuek2017-03-31

hi, i dont think this is a good idea using an IPS. i would give the rover some sensors like ultrasonic, lidar, radar etc to make it detect obstacles. you can use the IPS though to monitor / control the robots position from remote.

RichardM350 made it! (author)2017-02-16

I'm interested in this for a 'hotel' type environment, multi-floor w/ common corridor and rooms on each side, to locate to the 'room' where a tag might be. What would expected tag placement be?

kuek made it! (author)kuek2017-03-12

you mean the anchor placements to locate the tag? This cannot be answered without knowing more about your environment, walls, concrete, wood, etc.

RichardM350 made it! (author)RichardM3502017-03-13

Typical hotel walls are fire drywall over metal studs, sometimes double thickness drywall. There are occasions where they might be block in older buildings. Another example might be a hospital - very similar to a hotel.

kuek made it! (author)2016-12-13

accuracy? no, its "in cm" accuracy. my measurements say its
in the range of <10cm. with less than 3 beacons (anchors) you cannot
do 2D position estimation. it gives ambiguous results. more anchors
would improve accuracy, or INS sensors, tracking, etc.

see some histograms here:

anchor source code: or thotro on github. the tag source is the same, just differnet init procedure and missing UDP part.

edward.chamberlain made it! (author)2016-12-13

You say < 1cm accuracy!! (awesome). How did you measure this? If I were to fix the beacons in a 2m by 3m arrangement would this improve the accuracy somewhat? Would using only 2 beacons reduce accuracy?

NuriE1 made it! (author)2016-12-13

Can not find the open source code. Can you provide a link or github repo

kuek made it! (author)2016-12-10

Hi, the max distance is specified as 300m in the datasheet. however, it depends on the power level, antenna, etc. see my hackaday post here ( where i measured the max distance outside. 50m is reliable. In your case I would place anchors in a grid of 20-30m. This will get you reliable positioning for the tags. Because, the tags will automatically talk to those anchors which are in range.

jimcrowsby made it! (author)2016-12-10

What is the largest distance between anchor and tags?
I want make this positioning system but I need them works very stable in large auditorium 100m*50m..
Do you have some ideas? Maybe I need more tags? If more, how much?

About This Instructable



More by kuek:Localino: Open Source Indoor Positioning System (Arduino + Decawave)
Add instructable to: