One question we frequently get asked is “How real time is your tracking experience?” When we respond saying it’s near real time (~4 second latency) the follow up is “You must be collecting GPS locations very frequently, what’s the impact on battery life?” The fact is we only consume ~5% of battery per hour of tracking. So your fully charged phone can last full day of tracking without breaking a sweat. This blog is a deep dive on how we achieved close to real time tracking with minimal battery usage – two things that are perpetually in tension with each other in the smartphone tracking world. Continue reading
In the field of location tracking there needs to be lot of back-and-forth communication between devices and the backend. Device transmits location stream and health information (battery level, network strength, etc.). Backend processes this information, applies business logic on top and sends configuration commands back to devices in order to orchestrate tracking. These configuration commands determine when to start/stop tracking, frequency at which to collect GPS data (time and distance), frequency at which to transmit GPS data and so on.
In a world with patchy mobile networks making all this communication robust is quite a task. It is important to choose the right network protocol and design the communication semantics to get maximum benefit of the protocol’s capabilities. We recently switched a large part of our device-backend communication from HTTP to MQTT. This blog is about how we achieved it and our learning from it so far.
One of the biggest challenges with continuous location tracking is dealing with volatile quality of smartphone’s GPS readings. Numerous factors affect GPS accuracy such as:
- Quality of GPS receiver
- Source of signal (GPS, WiFi, cell tower triangulation)
- Environment (weather, skyline visibility, enclosed spaces, multipath reception)
- Device state (low power mode, flight mode, initial fix)
Due to the error introduced by all these factors it becomes essential to carefully process the location stream in order to accurately predict the path taken by a driver.