- IoT Final Project -
WiFi & BlueTooth Localization

Richie Young

Initial Goal

  • Get several vehicles to autonomously converge on a point
  • Very ambitious!!
    • Too many subproblems for one person in a few weeks
  • Decided to scale back to just the localization subproblem
  • In order to get good results, we would first need good localization

Modified Goal

  • Default project with a small twist
    • Use Bluetooth at similar range to Wifi
    • Get readings simultaneously
    • Compare results
    • Try to combine if beneficial
  • How will bluetooth perform at a range of several meters compared to WiFi?
  • Can we use both to get a better result?

Methods

  • Bluetooth beacons placed to form smaller square than WiFi beacons to avoid interference from tables
  • WiFi & BT RSSI measurements (100 samples each) taken at 32 points within the inner bounding box

Data

  • Bluetooth beacons placed to form smaller square than WiFi beacons to avoid interference from tables
  • WiFi & BT RSSI measurements (100 samples each) taken at 32 points within the inner bounding box

Data - Raw

Data

  • Clear variations in RSSI were visible
  • Lots of noise
  • Solution: Low Pass Filter
  • Chebyshev Type 1 Filter chosen for steep roll-off

Filtered Data

Localization

  • We have some pretty clean data to work with (in most cases)
  • First: Channel model
    • Used the common channel model
    • rssi = -10n * log(distance) + power
    • Constants chosen experimentally to minimize error
def rssiDistance(rssi, power, n):
    return (10.0 ** ((power - rssi) / (10.0 * n))) * 100.

def blueDistance(rssi, power=-62.0):
    return 0.5 * rssiDistance(rssi, power, 2.6)

def wifiDistance(rssi, power=-32.0):
    return math.sqrt(abs(((240 ** 2) - ((0.8 * rssiDistance(rssi, power, 3.0)) ** 2))))

Localization

  • Localization Algorithms (TarrĂ­o, Bernardos, Casar):
    • Unweighted Hyperbolic
    • Unweighted Circular
    • Weighted Circular
  • Methods:
    • Used numpy & scipy for computation and optimization
  • Results:
    • Weighting was absolutely necessary
    • Best error function:
e = lambda i: ((distance(guess, anchorPositions[i]) - anchorDistances[i][-1]) ** 2) / weight[i]

Discussion

  • Best Results (Weighted Circular):
    • Mean Error (WiFi): 1.4M
    • Mean Error (BT): 0.7M
  • Unweighted Algorithms were not viable at all
    • In a space this small, not much variation in RSSI
    • Noise is a better indicator of distances of this order

Future Work

  • WiFi worked best in the middle of the room (larger range)
  • Bluetooth worked best closest to the beacons
  • Try combining WiFi & Bluetooth
    • Weight Bluetooth very high if readings indicate close to a beacon
    • Weight WiFi very high if readings indicate middle of room
    • Should be easy to implement (change weight term)
  • Try to implement the consensus algorithm!
    • Better filtering will be needed for moving nodes
    • Need to improve sampling rate
      • Write custom sampling code in C

Challenges

  • Initial goal was too ambitious
  • Took a lot of tweaking to get decent results
    • Was very discouraging for a while
  • Working alone: horrible idea
    • I don't know much about signal processing
  • Taking data was extremely tedious
  • Was worth it in the end though

Questions?

IoT Final Project

By Ada Young

IoT Final Project

  • 237