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 localino.net
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 www.localino.net. 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!