#dataflow #driving #autonomos

nightly erdos

ERDOS 是一个用于开发自动驾驶汽车和机器人应用的平台

4 个版本 (2 个破坏性更新)

0.4.0 2022年4月6日
0.3.1 2020年9月25日
0.3.0 2020年7月22日
0.2.0 2020年1月17日

#38机器人技术

Apache-2.0

430KB
8K SLoC

ERDOS

ERDOS 是一个用于开发自动驾驶汽车和机器人应用的平台。

Crates.io Build Status Documentation Status Documentation

入门指南

本地安装

系统要求

已知 ERDOS 在 Ubuntu 18.04 和 20.04 上运行。

Rust 安装

要在 Rust 中开发 ERDOS 应用,只需在 Cargo.toml 中包含 ERDOS。最新的 ERDOS 版本在 Crates.io 上发布,文档在 Docs.rs 上可用。

如果您想为 ERDOS 贡献,首先 安装 Rust。然后运行以下命令来克隆仓库并构建 ERDOS

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

Python 安装

要在 Python 中开发 ERDOS 应用,只需运行 pip install erdos。文档在 Read the Docs 上可用。

如果您想为 ERDOS 贡献,首先 安装 Rust。在 虚拟环境 中,运行以下命令来克隆仓库并构建 ERDOS

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

Python-Rust 桥接接口在 python 包中开发,该包还包含在 python/erdos 目录下的用户界面 Python 文件。

如果您想为发布版构建 ERDOS(更好的性能,但更长的构建时间),请运行 maturin develop --release

运行示例

python3 python/examples/simple_pipeline.py

编写应用程序

ERDOS 为开发应用程序提供 Python 和 Rust 接口。

Python 接口提供了与 tensorflow 等流行库的简单集成,但代价是性能(例如,更慢的序列化和进程内的并行性不足 缺乏并行性)。

Rust 接口提供了更多的安全性保证(例如编译时类型检查)和更快的性能(例如多线程和无拷贝消息传递)。高性能、安全性关键的应用,如生产中部署的自动驾驶汽车管线,应使用 Rust API 来充分利用 ERDOS。

ERDOS 设计

ERDOS 是一个为自动驾驶汽车管线和机器人应用设计的流式数据处理系统。

管线组件被实现为 算子,它们通过 数据流 连接。算子和流的集合形成 数据流图,这是 ERDOS 处理的管线表示。

应用程序通过在程序的 驱动 部分中将算子连接到流来定义数据流图。算子通常在其他地方实现。

ERDOS 为低延迟而设计。自动驾驶汽车管线需要数百毫秒的端到端截止时间以确保安全驾驶。同样,自动驾驶汽车通常在小型集群上处理每秒数GB的数据。因此,ERDOS 优化了尽可能快地发送少量数据(与TB相比为GB)。

ERDOS 通过 水印 提供确定性。低水印是接收到的消息年龄的上限,算子将忽略任何比最近接收到的水印更老的消息。通过基于水印处理,应用程序可以避免由于处理消息顺序不当而导致的非确定性。

了解更多关于 ERDOS 背后理念的信息,请参阅我们的论文,D3: A Dynamic Deadline-Driven Approach for Building Autonomous Vehicles。如果您发现 ERDOS 对您的工作有所帮助,请按照以下方式引用我们的论文

@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 = {453471},
    numpages = {19},
    location = {Rennes, France},
    series = {EuroSys '22}
}

Pylot

我们正在积极开发一个基于 ERDOS 的自动驾驶平台!有关更多信息,请参阅 Pylot 仓库

参与其中

如果您想联系我们,您可以

  • Slack 社区:加入我们的 Slack 社区进行关于开发、使用问题和功能请求的讨论。
  • Github 问题:用于报告错误。

我们始终欢迎对 ERDOS 的贡献。一种入门方式是选择一个带有 良好首次问题 标签的问题——这些通常是帮助您熟悉 ERDOS 代码库的好问题。请使用拉取请求提交贡献。

依赖项

~11–25MB
~376K SLoC