MCPcopy Index your code
hub / github.com/erdos-project/erdos

github.com/erdos-project/erdos @v0.4.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.0 ↗ · + Follow
836 symbols 1,779 edges 91 files 301 documented · 36%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ERDOS

ERDOS is a platform for developing self-driving cars and robotics applications.

Crates.io Build Status Documentation Status Documentation

Getting started

Local installation

System requirements

ERDOS is known to work on Ubuntu 18.04 and 20.04.

Rust installation

To develop an ERDOS application in Rust, simply include ERDOS in Cargo.toml. The latest ERDOS release is published on Crates.io and documentation is available on Docs.rs.

If you'd like to contribute to ERDOS, first install Rust. Then run the following to clone the repository and build ERDOS:

git clone https://github.com/erdos-project/erdos.git && cd erdos
cargo build

Python Installation

To develop an ERDOS application in Python, simply run pip install erdos. Documentation is available on Read the Docs.

If you'd like to contribute to ERDOS, first install Rust. Within a virtual environment, run the following to clone the repository and build ERDOS:

git clone https://github.com/erdos-project/erdos.git && cd erdos/python
pip3 install maturin
maturin develop

The Python-Rust bridge interface is developed in the python crate, which also contains user-facing python files under the python/erdos directory.

If you'd like to build ERDOS for release (better performance, but longer build times), run maturin develop --release.

Running an example

python3 python/examples/simple_pipeline.py

Writing Applications

ERDOS provides Python and Rust interfaces for developing applications.

The Python interface provides easy integration with popular libraries such as tensorflow, but comes at the cost of performance (e.g. slower serialization and the lack of parallelism within a process).

The Rust interface provides more safety guarantees (e.g. compile-time type checking) and faster performance (e.g. multithreading and zero-copy message passing). High performance, safety critical applications such as self-driving car pipelines deployed in production should use the Rust API to take full advantage of ERDOS.

ERDOS Design

ERDOS is a streaming dataflow system designed for self-driving car pipelines and robotics applications.

Components of the pipelines are implemented as operators which are connected by data streams. The set of operators and streams forms the dataflow graph, the representation of the pipline that ERDOS processes.

Applications define the dataflow graph by connecting operators to streams in the driver section of the program. Operators are typically implemented elsewhere.

ERDOS is designed for low latency. Self-driving car pipelines require end-to-end deadlines on the order of hundreds of milliseconds for safe driving. Similarly, self-driving cars typically process gigabytes per second of data on small clusters. Therefore, ERDOS is optimized to send small amounts of data (gigabytes as opposed to terabytes) as quickly as possible.

ERDOS provides determinism through watermarks. Low watermarks are a bound on the age of messages received and operators will ignore any messages older than the most recent watermark received. By processing on watermarks, applications can avoid non-determinism from processing messages out of order.

To read more about the ideas behind ERDOS, refer to our paper, D3: A Dynamic Deadline-Driven Approach for Building Autonomous Vehicles. If you find ERDOS useful to your work, please cite our paper as follows:

@inproceedings{10.1145/3492321.3519576,
    author = {Gog, Ionel and Kalra, Sukrit and Schafhalter, Peter and Gonzalez, Joseph E. and Stoica, Ion},
    title = {D3: A Dynamic Deadline-Driven Approach for Building Autonomous Vehicles},
    year = {2022},
    isbn = {9781450391627},
    publisher = {Association for Computing Machinery},
    address = {New York, NY, USA},
    url = {https://doi.org/10.1145/3492321.3519576},
    doi = {10.1145/3492321.3519576},
    booktitle = {Proceedings of the Seventeenth European Conference on Computer Systems},
    pages = {453–471},
    numpages = {19},
    location = {Rennes, France},
    series = {EuroSys '22}
}

Pylot

We are actively developing an AV platform atop ERDOS! For more information, see the Pylot repository.

Getting involved

If you would like to contact us, you can: * Community on Slack: Join our community on Slack for discussions about development, questions about usage, and feature requests. * Github Issues: For reporting bugs.

We always welcome contributions to ERDOS. One way to get started is to pick one of the issues tagged with good first issue -- these are usually good issues that help you familiarize yourself with the ERDOS code base. Please submit contributions using pull requests.

Extension points exported contracts — how you extend this code

OneInMessageProcessorT (Interface)
Trait that needs to be defined by the executors for an operator that processes a single message stream. This trait is us [6 …
erdos/src/node/operator_executors/mod.rs
OperatorExecutorT (Interface)
Trait that needs to be defined by the executors for each operator. This trait helps the workers to execute the different [3 …
erdos/src/node/operator_executors/mod.rs
Source (Interface)
(no doc) [4 implementers]
erdos/src/dataflow/operator.rs
Sink (Interface)
(no doc) [4 implementers]
erdos/src/dataflow/operator.rs
OneInOneOut (Interface)
(no doc) [4 implementers]
erdos/src/dataflow/operator.rs

Core symbols most depended-on inside this repo

clone
called by 305
erdos/src/dataflow/graph/abstract_graph.rs
clone
called by 110
erdos/src/dataflow/graph/default_graph.rs
send
called by 54
erdos/src/communication/pusher.rs
id
called by 38
erdos/src/dataflow/stream/read_stream.rs
timestamp
called by 32
erdos/src/dataflow/context.rs
map
called by 23
erdos/src/dataflow/operators/map.rs
write_stream
called by 20
erdos/src/dataflow/context.rs
get_constrained_read_stream_ids
called by 16
erdos/src/dataflow/deadlines.rs

Shape

Method 578
Class 128
Function 77
Interface 33
Enum 20

Languages

Rust77%
Python23%

Modules by API surface

python/erdos/operator.py44 symbols
erdos/src/dataflow/operator.rs42 symbols
python/erdos/streams.py34 symbols
erdos/src/dataflow/deadlines.rs28 symbols
erdos/src/dataflow/context.rs25 symbols
erdos/src/communication/control_message_handler.rs21 symbols
python/examples/watermarks.py18 symbols
python/erdos/__init__.py18 symbols
erdos/src/dataflow/stream/write_stream.rs18 symbols
erdos/src/node/operator_executors/mod.rs17 symbols
erdos/src/node/node.rs16 symbols
python/erdos/timestamp.py15 symbols

For agents

$ claude mcp add erdos \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page