The software portion of our project is responsible for user interaction via voice and gesture commands, gathering and formatting information about different locations, and also providing feedback to the user through a graphical user interface and voice. The following diagram illustrates at a high level how all the software components are connected in order to achieve our goal of providing a good user experience.
These APIs are used to gather location specific information based on the users request. The Teleport API provides our application with a variety of different information about a location such as it's population, latitude and longitude, climate, etc. They reference a large amount of cities (over 140,000) and pull their information from other databases that hold geographical information such as GeoNames. Since the information that is requested from this API is tailored to fit queries, we parsed their entire database ahead of time to store country and admin 1 division locations (similar to state information in the United States) in our own MySQL database, hosted on the Raspberry Pi 3. In doing so, we can refine the information served to the GUI to better fit a user's request. Furthermore, the Google Photos API is used to retrieve images of a location based on latitude and longitude coordinates. These images are presented to the user after a successful location request has been made. Mapbox is used by our application to navigate to different areas, providing the user with a visual representation of where the requested location is on the map. The Alexa Voice Service allows us to create our own custom voice interface, giving users several voice commands to interact with Trotter.
The above diagram illustrates how user location requests are handled after interacting with the voice interface. This is the backend software flow and is primarily coded in Python. When a user makes a location request, the location string is parsed from the user input and sent to several python functions. The functions will first query the MySQL database for countries and states that match the input string, then make a request to the Teleport API for city matches. After information is found for the location, a JSON file is generated to provide the GUI and Alexa Voice Service to present it to the user. While the queries and requests for the location string is being processed, calls are also being made in parallel to the Flickr API to find images of the location which is also displayed to the user through the GUI.
Trotter has the ability to rotate to a specific location that the user requests on the globe. The rotation script rotates an azimuthal equidistant image of the globe in software using Python. This image is projected through a fisheye lens which wraps it around a transparent sphere. This allows the user to see an actual globe on the sphere that rotates to the location requested and is one of the key differences between the virtual globe and the physical globe. The physical globe uses hardware to rotate the globe as opposed to being fully implemented in software. An example of the rotation script and projected globe are shown below.