Pretty much bang on a year ago was a pretty hectic time for me. I had lots
going on, travelling for work, planning a secret wedding and hacking together
something that could track 40 or so people around an indoor space.

Lubi and
Truna from QUT run a 48 hour game making challenge.
This challenge is held out on the QUT Kelvin Grove campus, with amateur and
professional game developers from the Brisbane area descending on the campus
to build an original computer game from scratch in only 48 hours.

In the past they had set up webcams for live streams of common areas like the
kitchen and main development halls. But last year they had also wanted to
track the movements of challenge participants as they moved around during the
competition. The catch? We only had a month to implement it.

Lubi and Truna had heard about the work Luke Atherton and I had been doing
with the Microsoft Kinect and thought that maybe we could adapt it to track
people moving around in the development halls… Unfortunately that approach
wasn’t going to work. The Kinect has an effective range of about 4x4 metres
while, the indoor spaces were about ten to twenty times larger than that. We
needed another approach, one that didn’t require everyone carrying custom
tracking equipment.

It was about this time, I started brain storming with Luke. And a whole bunch
of concepts started to clump together. It was going to be possible, it would
be an awfully tight schedule but with a bit of luck we might be able to pull
it off.

Everyone carries mobile phones these days, most of them are ‘smart’ and can
run apps, but we didn’t want to make people install stuff on their phones.
Nope. Smart or dumb, everyones phone has bluetooth, and we wouldn’t need to
install anything on the phones we were tracking if we used bluetooth.

Bluetooth only has an effective range of 5 to 10 metres. So we decided to
build an adhoc bluetooth cellular network and use that to track the bluetooth
signal of peoples phones as they moved around the place.

We used cheap android handsets as the ‘towers’ for the network and placed ten
of them around the venue. Our tower handsets ran a small android app to scan
the cell for people carrying their own bluetooth equipped phones. The problem
of course is that security on bluetooth is fairly tight these days, and very
rarely is a device discoverable. So each of the towers needed a list of mac
addresses for the bluetooth devices that are currently hiding around the
venue.

So Luke put together an awesome registration application that he wrote in
.net. When someone signed up, they simply put their phone on discoverable
briefly and Luke’s registration app scooped up the mac address and pushed it
up to a tracking server I had written in Ruby on Rails.

The central tracking server now had a list of all the device addresses we
wanted to track around the venue. The tower application pulled this list down
and would start dialling the addresses. “Yo 02264BBC4E3A are you here?” The
bluetooth device didn’t need to be discoverable, just switched on. If the
tower found the device it push a tracking message back to the central tracking
server “02264BBC4E3A just arrived at Tower A.” if a device that was in the
cell disappears, then the node would tell the central tracking server
“02264BBC4E3A just departed at Tower A.”

* One of the bluetooth towers, photo by Lubi Thomas.

The central tracking server would collect all these arrival and departure
breadcrumbs, timestamp and piece them together into a tracking history for
each of the people.

It was a hectic build that I really enjoyed. We ran into a couple of problems
with our tower application needing to be restarted every hour or so. But we
still built up a pretty impressive tracking history for 40 or so people and
hacked together the whole system in our spare time over a month. It would have
been great if we had a bit more time to spend on this one, we have heaps of
ideas on other performance improvements and visualisations for the front end.

Hi! Subconsciously you already know this, but let's make it obvious. Hopefully this article was helpful. You might also find yourself following a link to Amazon, Lego or eBay to learn more about parts or equipment. If you end up placing an order, I make a couple of dollarydoos. We aren't talking a rapper lifestyle of supercars and yachts, but it does help pay for the stuff you see here. So a massive shoutout to everyone that enables this place. Thanks!