Giter Club home page Giter Club logo

polypoint's Introduction

PolyPoint

PolyPoint

PolyPoint is a system for using ultra-wideband RF time-of-flight ranging to perform indoor localization. It incorporates the DecaWave DW1000 for UWB packet transmission and timestamping into a solder-on module that provides node-to-node ranges over an I2C interface.

Name

The name PolyPoint comes from the use of many polygons and shapes in the prototype design and the desire to pinpoint where users are with the system.

Git Clone

When cloning this repository, be absolutely sure to do

git clone --recursive https://github.com/lab11/polypoint.git

so that you get the submodules as well. All of the supporting libraries and build tools are in submodules for the various hardware platforms used in this project.

Hardware

The PolyPoint system is composed of several hardware pieces. At the core is the TriPoint module which is a 1.25" on a side triangle that encompasses all of the core ranging hardware and software. TriPoint has castellated edges and can be soldered on to a carrier board, effectively as a ranging IC. TriTag is one such carrier board designed to be the tag in the ranging system. It includes the UWB antennas and a Bluetooth Low Energy radio plus a battery charging circuit. TriTag is able to provide ranges to a mobile phone application.

TriPoint

TriPoint includes the following components:

  • DecaWave DW1000 UWB radio
  • STM32F031G6U6 MCU
  • RF switch

The MCU contains all the necessary code to run the DW1000 and the ranging protocol.

TriTag

TriTag

TriTag includes:

  • The TriPoint module
  • 3 UWB antennas
  • nRF51822 BLE radio
  • 3.3 V LDO
  • Li-ion battery charger

TriTag is designed to be the tag to be localized in the system and connected to a smartphone.

TriDev

TriDev is a breakout and testing board for the TriPoint module. It contains the same BLE hardware as TriTag, but also adds an FTDI chip for issuing I2C commands over USB.

Software

PolyPoint contains many software layers that run at various levels of the system.

TriPoint

The core firmware that makes the drop-in TriPoint module work includes all of the logic to implement two way ToF ranging on top of the DecaWave DW1000 UWB radio. The firmware architecture supports multiple "applications", or ranging algorithms, that can be selected at runtime.

TriTag

The TriTag code implements a BLE application that uses the TriPoint module as an I2C device and prov a BLE service. It puts the TriTag hardware into TAG mode and provides ranges over a BLE characteristic.

Phone and BLE

The tools in the /phone directory interact with TriTag and read data across the BLE interface.


Academic Publications

The PolyPoint project has led to two academic publications, and an invited talk at HotWireless'16. If you are interested in the theory behind the ranging protocol, please check out our publications:

If you use PolyPoint or its derivatives, please use the following citation:

@inproceedings{kempke16surepoint,
	title = {{SurePoint}: Exploiting Ultra Wideband Flooding and Diversity to Provide Robust, Scalable, High-Fidelity Indoor Localization},
	booktitle = {Proceedings of the 14th ACM Conference on Embedded Networked Sensor Systems},
	series = {SenSys'16},
	year = {2016},
	month = {11},
	location = {Stanford, CA, USA},
	conference-url = {http://sensys.acm.org/2016/},
	author = {Kempke, Benjamin and Pannuto, Pat and Campbell, Bradford and Dutta, Prabal},
}

polypoint's People

Contributors

adkinsjd avatar bpkempke avatar bradjc avatar brghena avatar ppannuto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

polypoint's Issues

Making it work / getting started

Hello,

I've made a few prototypes to test out TriPoint circuits on TriBase and TriTag boards. The PCB's arrived mounted well and I'm able to program nRF51 and STM but afterwards it seems that there's an issue with getting the whole device to work... The only thing I can do is connect via BLE (so nRF51 works ok) but STM + DW1000 seem to not be doing anything...

Do you maybe have any tips on what to check? I'm attaching the activity on I2C and SPI lines from the device startup - as you see the I2C commands don't seem right but the FW tested is

screen shot 2017-11-02 at 16 36 23

Tried with tridev and check_version.py scripts but it also fails even though the device enumerates correctly in dmesg.

Traceback (most recent call last):
  File "check_version.py", line 8, in <module>
    tp = tripoint.TriPoint()
  File "/../lab11-polypoint/tripoint/tripoint.py", line 28, in __init__
    self.tripoint = mpsse.MPSSE(mpsse.I2C, mpsse.FOUR_HUNDRED_KHZ)
  File "/usr/local/lib/python2.7/dist-packages/mpsse.py", line 70, in __init__
    raise Exception, self.ErrorString()
Exception: device not found

Fix STM sleep mode

  1. call PWR_EnterSTOPMode() instead
  2. Fix main loop so interrupts can't occur before WFI
  3. Look at stm-sleep branch for how to get the I2C to wake the STM
  4. Figure out why just changing the sleep function doesn't work.

TriPoint Freezes After Short Power Cycle

If power is removed and re-applied within a period of 60 seconds, the TriPoint module will become unresponsive due to the Decawave chip not responding to any commands. This may be un-fixable with the current Decawave silicon.

TriTag revB Issues

  • Patch wire from USB+ to BAT+ skips over LTC4065. Should either replace LTC with something else to serve the original purpose, or determine it really wasn't needed and remove it.

[Feature] Localization of any number of tags at high frequency

Did you consider implementing a GPS like protocol for the DWM1000?

This requires:

  • Synchronizing the timestamps of all devices;
  • Each anchor send its position and current timestamp;
  • From the positions and timestamps received, the devices compute their position.

Pros:

  • Works with any number of tags are they are in "listening only" mode;
  • Adding an anchor do not require to change the configuration of each tag;
  • The tags are "stupid" and thus do not need more configuration than the band, power, ... and can join any network seamlessly.

Cons:

  • The timestamp synchronization must be precise;
  • The anchors must send their messages in a synchronous way.

Hosting location for summon app?

This used to live on nuclear, but nuclear is no more:

$ cat publish.sh
#!/usr/bin/env bash

scp -r cordova.js cordova_plugins.js css img index.html js plugins nuclear.eecs.umich.edu:/opt/public/ble/tritag/

@bradjc @brghena @tzachari this may be a more general problem for summon apps, or is this solved already and I just need to push this app somewhere else?

Incorrect Clock Offset Calculation

Now that the final round uses the 'best' antenna at each anchor, the clock offset calculation needs to be updated to select the ToA which corresponds to the correct tag antenna/anchor antenna pairing.

Ranges follow a bimodal error distribution

Analysis in MATLAB recreating the algorithms used on the TriPoint tags indicates range error should follow an approximate gaussian distribution with little variance. Resulting range estimates from TriPoint follow a bimodal distribution with +/- 0.5 meters between peaks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.