All Projects → eclipse-zenoh → zenoh-flow

eclipse-zenoh / zenoh-flow

Licence: other
zenoh-flow aims at providing a zenoh-based data-flow programming framework for computations that span from the cloud to the device.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to zenoh-flow

SCUTTLE
SCUTTLE™: Sensing, Connected, Utility Transport Taxi for Level Environments [An open-source Mobile Robot]
Stars: ✭ 58 (+114.81%)
Mutual labels:  autonomous-vehicles
wasr network
WaSR Segmentation Network for Unmanned Surface Vehicles v0.5
Stars: ✭ 32 (+18.52%)
Mutual labels:  autonomous-vehicles
Monocular-Vehicle-Localization
Estimating the orientation and the relative dimensions of vehicles by producing a 3d bounding frame
Stars: ✭ 28 (+3.7%)
Mutual labels:  autonomous-vehicles
drift drl
High-speed Autonomous Drifting with Deep Reinforcement Learning
Stars: ✭ 82 (+203.7%)
Mutual labels:  autonomous-vehicles
AdverseDrive
Attacking Vision based Perception in End-to-end Autonomous Driving Models
Stars: ✭ 24 (-11.11%)
Mutual labels:  autonomous-vehicles
dflow
is a minimal Dataflow programming engine
Stars: ✭ 70 (+159.26%)
Mutual labels:  dataflow-programming
community-projects
Webots projects (PROTO files, controllers, simulation worlds, etc.) contributed by the community.
Stars: ✭ 20 (-25.93%)
Mutual labels:  autonomous-vehicles
AdvancedLaneLines
Lane identification system for camera based systems.
Stars: ✭ 61 (+125.93%)
Mutual labels:  autonomous-vehicles
Tonic
An autonomous vehicle written in python
Stars: ✭ 85 (+214.81%)
Mutual labels:  autonomous-vehicles
PyLidar3
PyLidar3 is python 3 package to get data from Lidar devices from various manufacturers.
Stars: ✭ 35 (+29.63%)
Mutual labels:  autonomous-vehicles
highway-path-planning
My path-planning pipeline to navigate a car safely around a virtual highway with other traffic.
Stars: ✭ 39 (+44.44%)
Mutual labels:  autonomous-vehicles
self-driving-car
Implementation of the paper "End to End Learning for Self-Driving Cars"
Stars: ✭ 54 (+100%)
Mutual labels:  autonomous-vehicles
Auto-Birds-Eye
Bird's eye/Top Down view generation and mapping with deep learning.
Stars: ✭ 129 (+377.78%)
Mutual labels:  autonomous-vehicles
pyMHT
Track oriented, multi target, multi hypothesis tracker
Stars: ✭ 66 (+144.44%)
Mutual labels:  autonomous-vehicles
SecondaryAwesomeCollection
收集深度学习相关的awesome 资源列表,欢迎补充
Stars: ✭ 75 (+177.78%)
Mutual labels:  autonomous-vehicles
Visualizing-lidar-data
Visualizing lidar data using Uber Autonomous Visualization System (AVS) and Jupyter Notebook Application
Stars: ✭ 75 (+177.78%)
Mutual labels:  autonomous-vehicles
Model-Predictive-Control
This project is to use Model Predictive Control (MPC) to drive a car in a game simulator. The server provides reference waypoints (yellow line in the demo video) via websocket, and we use MPC to compute steering and throttle commands to drive the car. The solution must be robust to 100ms latency, since it might encounter in real-world application.
Stars: ✭ 93 (+244.44%)
Mutual labels:  autonomous-vehicles
buzzmobile
An autonomous parade float/vehicle
Stars: ✭ 18 (-33.33%)
Mutual labels:  autonomous-vehicles
copilot
Lane and obstacle detection for active assistance during driving. Uses windowed sweep for lane detection. Combination of object tracking and YOLO for obstacles. Determines lane change, relative velocity and time to collision
Stars: ✭ 95 (+251.85%)
Mutual labels:  autonomous-vehicles
Voof
Visual odometry using optical flow and neural networks
Stars: ✭ 59 (+118.52%)
Mutual labels:  autonomous-vehicles

Eclipse CI CI Discussion Discord

Eclipse Zenoh-Flow

Zenoh-Flow is the union of Zenoh and data flow programming: a declarative framework for computations that span from the Cloud to the Thing.

⚠️ This software is still in alpha status and should not be used in production. Breaking changes are likely to happen and the API is not yet stable. ⚠️ The documentation is still scarce. Do not hesitate to contact us on Discord.

Description

Zenoh-Flow aims at simplifying and structuring (i) the declaration, (ii) the deployment and (iii) the writing of "complex" applications that can span from the Cloud to the Thing (or close to it).

To these ends, Zenoh-Flow leverages the data flow programming model --- where applications are viewed as a directed graph of computing units, and Zenoh --- an Edge-native, data-centric, location transparent, communication middleware.

This makes for a powerful combination as Zenoh offers flexibility and extensibility while data flow programming structures computations. The main benefit of this approach is that this allows us to decorrelate applications from the underlying infrastructure: data are published and subscribed to (automatically with Zenoh-Flow) without the need to know where they are actually located.

Core principles

Zenoh-Flow centers the definition of an application around a description file. This file acts as a contract that Zenoh-Flow will enforce.

In it, developers specify the different computation units --- the nodes, how they are connected --- the links, and how they should be deployed --- the mapping.

After validating these specifications, Zenoh-Flow will first create the necessary connections and then load each node. The types of connections created as well as the way nodes are loaded are discussed in more details here. The most notable aspect is that Zenoh-Flow optimizes the connections: data will go through the network only if nodes are located on different machines.

Documentation

To build the documentation:

$ cargo doc

The HTML documentation can then be found under ./target/doc/zenoh_flow/index.html.

How to use

A working Cargo and Rust installation is a pre-requisite.

Then download the repository:

git clone https://github.com/eclipse-zenoh/zenoh-flow && cd zenoh-flow

We assume in the following that ./ points to the root of this repository.

Start Zenoh

As its name indicates, Zenoh-Flow relies on Zenoh. So you first need to install and start a Zenoh router on your device.

The instructions to install Zenoh are located here.

Once installed, you need to start a zenohd with the configuration we provide:

zenohd -c ./zenoh-flow-daemon/etc/zenoh-zf-router.json

With this configuration, Zenoh will start storages for specific keys that are used internally by Zenoh-Flow. These keys are notably what allow Zenoh-Flow daemons to discover each other (as long as the routers, to which the daemons are attached, can communicate).

Start Zenoh-Flow

Build Zenoh-Flow in release:

cd zenoh-flow && cargo build --release

This will produce the following executables under the target/release directory: zenoh-flow-daemon, zfctl and cargo-zenoh-flow.

  • zenoh-flow-daemon is what will take care of starting and stopping nodes, as well as deploying a Zenoh-Flow application.
  • zfctl is what we use to interact (using Zenoh) with all the zenoh-flow-daemon discovered.
  • cargo-zenoh-flow is a help tool that produces boilerplate code for Zenoh-Flow nodes.

To launch an application we need to: 1) start a daemon and 2) interact with it through zfctl.

A Zenoh-Flow daemon relies on some configurations and variables. For this to work, we need to move few files:

sudo mkdir -p /etc/zenoh-flow/extensions.d
sudo cp ./zenoh-flow-daemon/etc/runtime.yaml /etc/zenoh-flow
sudo cp ./zenoh-flow-daemon/etc/zenoh-daemon.json /etc/zenoh-flow

We can then start the daemon:

./target/release/zenoh-flow-daemon

Next, zfctl. We also need to copy a configuration file:

mkdir -p ~/.config/zenoh-flow
cp ./zfctl/.config/zfctl-zenoh.json ~/.config/zenoh-flow

To check that the Zenoh-Flow daemon is correctly running and zfctl is set up, you can do:

./target/release/zfctl list runtimes

This should return a list just like this one:

+--------------------------------------+---------------------------+--------+
| UUID                                 | Name                      | Status |
+--------------------------------------+---------------------------+--------+
| 49936f69-2c87-55f0-9df4-d1fba2fadd38 | Juliens-MacBook-Pro.local | Ready  |
+--------------------------------------+---------------------------+--------+

If you see this, you can now launch applications! Assuming your application is described in app.yaml, you would launch it via:

./target/release/zfctl launch app.yaml > app.uuid

📖 The redirection of the standard output is to "capture" the unique identifier associated to this instance of your application.

And you can stop everything via:

./target/release/zfctl destroy "$(cat app.uuid)"

We encourage you to look at the examples available in our examples repository for more!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].