-
Notifications
You must be signed in to change notification settings - Fork 1
Architecture
This project is split into separate applications that communicate with each other. The exact configuration of applications is different for each submarine/robot. However, the generic layout is as follows.
+--------------------------+
|Web Browser |
| |
+----------+ Web App (JavaScript) |
| | |
| +--------+ |
| | +--------------+-----------+
+------+ +------+ | | |
|Camera| |Camera| | | |
+-----++ +---+--+ | | |
| | | | +----------------------------------+
++---------+-----+ | | |Raspberry PI | |
|Raspberry PI +--+ | | | |
| | | | +--------------+-------------+ |
| Vision (C++) | | | | | |
| +-------+ | | Agent (Javascript) | |
+----------------+ | | | | | |
| | | +--------------+-------------+ |
+----------------+ | | | | |
|Raspberry PI +----+ | | +--------------+-------------+ |
| | +-----+ | |
| Vision (C++) | | | System (C++) | |
| +-------------+ | | +------+
++---------+-----+ | +----+------------------+----+ | +---+Sensor|
| | | | | | | +------+
+-----++ +---+--+ +----------------------------------+ |
|Camera| |Camera| | | | +-----+
+------+ +------+ +------------+-------+ +------+-----------+-+ |Motor|
|Arduino | |Arduino +--------+
| | | |
+----------+ | Controller (C++) | | Controller (C++) | +-----+
|Hydrophone+--+ | | +--+Motor|
+----------+ ++-------+---------+-+ +----+-------+------++ +-----+
| | | | | |
+----------+ +----+-----+ ++-----+ +-+-+ +--+--+ ++----+
|Hydrophone| |Hydrophone| |Sensor| |IMU| |Motor| |Motor|
+----------+ +----------+ +------+ +---+ +-----+ +-----+
Each application is very minimal, and are built from the components found in the util libraries.
The system application provides a group of subsystems that describe the parts of a robot. Each subsystem (e.g. arm, wheels, camera) is represented as an object with methods that represent all the actions that can be performed by the subsystem. Some subsystems allow low-level control of hardware. Others allow only high-level control. However, most subsystems are a mix of both.
The agent application uses the interface provided by the system application to accomplish tasks. The app acts like a video game AI. Using high-level information (e.g. positions of objects in 3D space), the agent app can plan actions for movement subsystems to perform (e.g. move to position in 3D space).
The vision application uses camera inputs to recognize objects and position. Vision processing is computationally expensive, therefore a separate device is usually used to host the application. The app provides the system application with information concerning objects being tracked and position information. Video frames are rarely sent from the vision app to the system app.
The controller application implements low-level hardware control. Capable of connecting to almost any electronic device for sensing or movement, the controller app provides the system app information and control over the physical world. The app can also provide signal processing for devices that require it.
In development and testing, the web app acts like an agent app. It has access to the system app, and provides controlling and monitoring to the operator. However, the web app is not used when in autonomous mode.