Our inspiration happened as we were waiting in the registration line at HackTech. One of our team members was walking off and I joking barked at her to lead her back. From this little moment came our idea for a fun app-- "shepherding" UberPool riders to their pickup destination.

While we created UberShep to be an entertaining way to get to your UberPool ride, there are in fact real-world and immediate implications to the concept of using audio signals as a means to communicate path information. More than 11,000 people are injured each year due to texting and walking, and while the trend of traffic deaths has been decreasing overall in the last several years, the trend of pedestrian deaths has actually increased. Coupling this risk of injury or death with the fact that distracted pedestrians are also more prone to be victims of crime, it makes sense to explore other, non-visual, methods of route delivery.

Since UberPool destinations are often near the user's current location, most users will know generally where they are going, but may get mixed up on direction at intersections. With UberShep, if they start going down the wrong way on a particular street, they will quickly be notified and can turn around.

What it does

After a user requests an UberPool ride on their app, UberShep sends a request to the Uber API to get the rider's pickup spot, according to longitude and latitude. UberShep then uses HTML5 geolocation and calculates whether the rider is walking closer or further to their location, using the audio signal of a bark to tell the user they are going the wrong way. Optionally, the user can also choose to have "success" tone play if they are on track to the correct pickup destination.

When the user is at the pickup destination, a "goal reached" tone lets the user know.

How we built it

On the front end, we mainly used HTML5's geolocation ability to continuous update the user's location. This information, in the form of latitude and longitude, is calculated with javascript to determine if the user is getting closer or further to the endpoint.

The back end uses node.js to interface with the Uber API. It passes the user's info to receive back the pickup location. This location is then passed to the front end so that distance calculations could be made.

Challenges we ran into

One challenge we came up with was knowing how to calibrate the sensitivity of the decision regarding the whether the user was going into the right direction. At first, we tried to continually update and pass the true/false information to the display, but this was too sensitive and made for a rough sample. Through many different iterations, we finally settled on using an array that stores individual distances to goal, taken at 2 second intervals, then compares to where the array was 20 seconds ago. Because there was a longer sampling rate, with a longer comparison distance, we were able to make increase accuracy of the distance decision.

Accomplishments that we're proud of

We're very proud of the way we overcame the oversampling/undersampling problem concerning the geolocation. Coming up with a usable algorithm took a lot of trial and error. We are also proud to have learn a lot of Uber's extensive API, and knowing how the sandbox API worked. Finally, we're proud of putting our node.js knowledge to practical use.

What we learned

First, we learned how to continuously get the user's location through HTML5. We also learned about rate sampling to make accurate predictions. Finally, we learned a lot about using node.js as a backend, and also how to work with the Uber API.

What's next for UberShep

We would like to improve the decision/direction data, possibly incorporating a kalman filter to neutralize noisy data within a short amount of time.

Share this project: