Distributed Middleware

Autonomy systems need to be able to handle a lot of data asynchronously and perform complex operations in real-time. Often a single machine becomes a bottleneck, so it's important to be able to distribute tasks to a variety of computing hardware across a network. In order to achieve this, PolySync utilizes a middleware layer called Data Distribution Service (DDS). Middleware is a software layer that helps distributed applications communicate seamlessly amongst themselves. The system is configured as a series of computers called Electronic Control Units (or ECUs), all interconnected via Ethernet. The physical Ethernet network is the PolySync bus. The applications that run on each ECU─which communicate over the middleware─are called nodes. All ECUs and nodes are referred to as a [PolySync runtime](https://help.polysync.io/releases/2.0.8//articles/polysync-bus-and-runtime/). ![ECUs](https://help.polysync.io/releases/2.0.8//wp-content/uploads/2016/06/ECUs-basics-DistributedMiddleware.png) PolySync ships with some important pre-made nodes: * Dynamic Driver nodes * Responsible for interfacing with supported hardware, and often includes support for diagnostics, parameters, record/replay, and special data types * For each supported sensor a Dynamic Driver interface exists * PolySync manager node * Handles interfacing with ECUs at the system level, time synchronization between ECUs, and management of all other nodes on the ECU (only one per host) * PolySync Studio * Subscribes to all data from the bus for visualization Once the middleware is running, you can build your own application nodes and have them perform several actions, such as: * Sensor fusion * Obstacle detection * Path planning * Safety rated control systems * Custom sensor interface * Process raw sensor data