Pokemon Go Unplugged (2019)
A remote-controlled car to collect PokeStops around the campus.
(The following description was written in 2019.)
My main contribution was in the remote driving of the car. The car is controlled through a central AWS server, allowing the user to check its location and front camera view and manually control it when needed. The phone serves two purposes: 1) provide a hotspot connection for the Raspberry Pi, and 2) run Pokémon Go. A problem arose when I found out that the phone's cellular connection does not allow any inbound connection, as its public IP address would change without notice, and there was no obvious way of performing a port forward for the phone to serve as a server. To solve this issue, I used Socket.io to create a socket connection between the car and the AWS server, as that provided a way to access Raspberry Pi without knowing its IP address. Moreover, it eliminated the need to constantly poll data to and from the car, which reduced the load on the usage of the phone's connection.
The campus was mapped into nodes with straight paths in between. The car would then use the phone's magnetometer and GPS information to reach from one node to the other. Another problem here was that we needed some active feedback control to stabilize the car's trajectory when unexpected terrain moved it off course. I initially wanted to use the camera to detect obstacles and terrain features to achieve this, but we ran out of time at the end and did not have enough knowledge to implement it. So we ended up resorting to manual adjustment whenever it veered off course.
Credits
Victor Yun, Athena Liu, Laura Florea
Course
SE 101: Introduction to Methods of Software Engineering
What I’ve done
Implementing remote driving system: car electrical & mechanical design, camera streaming, web control UI, socket-based communication.