The boat is designed with two hulls connected with a bridge (as seen in the images).
- Battery
- Servo mechanism (for steering)
- Inline motor
- Electronic Speed Controller (ESC)
- Sampling mechanism system
- Flight controller
- GPS module
- RX radio receiver
- 2.4GHz link antenna
This design provides more stability and manoeuvrability due to its extended width, and also increases storage capacity as there are three compartments. More details about the design of the system can be found here.
The Asano application is the primary user interface for our system. It is an iOS application developed using the Swift programming language.
When using autonomous mode, the user can Launch Controls in the app and add sample collection points on the map by making use of the 'plus' button. The user can also remove points by making use of the 'minus' button provided. Asano will autonomously navigate and collect samples, and the list of samples can be viewed by the user by using the 'List' button on the app.
The user can also take manual control of the boat using the 'Speed' and 'Rotation' controls provided. The live location of the boat would be visible on the map which can be utilised by the user to navigate to sample collection points. The user can switch back to automatic mode using the 'A' button provided.
The JSON data for sample locations, boat location, manual control commands, etc. is sent and received via a local web server between the app and the boat. Details about the server can be found in the 'Communication Channel' section below.
The app also includes a database which makes use of Appleās CoreData API. The record of samples are taken from the received JSON files coming from the boat, and are updated as soon as a new sample is taken. The main features of a sample are used as attributes inside the database and then displayed to the user. The user can then view the list of samples for the chosen date from the calendar, given that the boat was active that day.
The communication between the boat and the user app is done through a Rasberry Pi (inside the boat) running as a local web server with 2.4GHz radio transmission. Along with this, WebSockets are used to communicate over the local connection and manually control the boat via the app. This approach was chosen for low latency in communication.
The web server is implemented using C++ and boost library, it is single threaded and asynchronous. The WebSockets are connected over a TCP and HTTP connection.
The server serves static files so that a basic homepage can be displayed within a browser. The server serves pages only from a strict set of paths so as to not allow any files to be leaked. When asked for a root server directory it returns a webpage that allows the user to connect to the WebSocket server. User can then send and receive messages from the boat to control it without using the app.
The server can also serve API requests: navi which stores the points that the user has put on the map, and path which stores the path that the boat has taken after it has finished its cruise.
The server strictly monitors which files can be retrieved and validates the contents of the files that can be given to the server. This prevents the server from leaking essential files and limits the effect of denial-of-service attacks.
The hardware simulation of our sytem has been developed in Webots. To make the lake simulation more realistic, it was combined with a group of different fluid entities with different stream velocities to try to simulate the dynamics of water. Thus, when the boat navigates in the lake, it would experience dynamic forces applied by the water.
Some accident handling functions have also been added, like low battery situations. The battery level decreases based on the velocity of the boat, or more specifically, the power of the motors. And when the battery level decreases under a threshold, the boat will terminate the task and return to the starting point. It also leaves future development for handling other accidents.
Our navigation system is quite simple, yet can achieve a lot. It is a greedy algorithm that tries to find a local optima of paths.
It is a rather simple deterministic algorithm that solves a complicated problem. It is highly efficient with constant time complexity. The algorithm is built to easily adapt needed changes and additional features.
The algorithm has extreme flexibility, for example, changing parameters, such us the mapping function itself. Changing one parameter will result in predictable, yet significant changes to the way the navigation system performs.
The sample collection system of our project has been designed with syringes and servos motors (as seen in the image below). These syringes will be placed in a separate compartment in the Asano boat. This aspect of the project has not been implemented due to time constraints, but has been designed in a well thought-out manner.
The design of the sample collection system provides simple installation and collection of syringes. It also ensures that all syringes are always maintained at a distance in order to avoid contamination.