{"id":18300541,"url":"https://github.com/eclipse-zenoh/zenoh-demos","last_synced_at":"2025-04-13T08:34:56.668Z","repository":{"id":44550765,"uuid":"368147698","full_name":"eclipse-zenoh/zenoh-demos","owner":"eclipse-zenoh","description":"Some demos using Eclipse zenoh","archived":false,"fork":false,"pushed_at":"2025-04-09T06:04:11.000Z","size":2471,"stargazers_count":51,"open_issues_count":5,"forks_count":22,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-09T07:22:06.717Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipse-zenoh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-17T10:37:30.000Z","updated_at":"2025-04-09T06:04:15.000Z","dependencies_parsed_at":"2023-02-17T20:30:33.308Z","dependency_job_id":"771f5962-4917-49fb-be34-cf3766f464d4","html_url":"https://github.com/eclipse-zenoh/zenoh-demos","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-zenoh%2Fzenoh-demos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-zenoh%2Fzenoh-demos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-zenoh%2Fzenoh-demos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-zenoh%2Fzenoh-demos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipse-zenoh","download_url":"https://codeload.github.com/eclipse-zenoh/zenoh-demos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248684740,"owners_count":21145128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T15:12:45.921Z","updated_at":"2025-04-13T08:34:56.636Z","avatar_url":"https://github.com/eclipse-zenoh.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png\" height=\"150\"\u003e\n\n[![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)\n[![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)\n\n# Eclipse Zenoh\n\nThe Eclipse Zenoh: Zero Overhead Pub/sub, Store/Query and Compute.\n\nZenoh (pronounce _/zeno/_) unifies data in motion, data at rest and computations. It carefully blends traditional pub/sub with geo-distributed storages, queries and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.\n\nCheck the website [zenoh.io](http://zenoh.io) and the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more detailed information.\n\n-------------------------------\n\n## Description\n\n\u003c!-- TODO: Add pictures --\u003e\n\n**zenoh-tetris**: a networked two-player\n[Tetris](https://en.wikipedia.org/wiki/Tetris) implementation written with Zenoh\nand Rust. The game follows the client-server model. A server manages the game\nstate, publishes it and subscribes to player input. While a client subscribes to\nthe game state, renders it and publishes player input. Thus, clients can play\nagainst each other from potentially different network hosts.\n\n**zenoh-shamir**: illustrates [Shamir's secret\nsharing](https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing) by splitting a\nsecret into 'shares' and storing them on distinct, interconnected Zenoh routers.\nAnother Zenoh node implements a\n[Queryable](https://zenoh.io/docs/manual/abstractions/#queryable) which collects\nall shares into the original secret.\n\n**zenoh-pico-dds/{helloworld,roundtrip}**: utilize\n[zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds) to connect\na [CycloneDDS](https://github.com/eclipse-cyclonedds/cyclonedds) node and a\nZenoh node, enabling either node to publish, or subscribe to, a given\nresource/topic. Data is exchanged using the\n[CDR](https://en.wikipedia.org/wiki/Common_Data_Representation) representation,\nas implemented in CycloneDDS. The `helloworld` demo consists of one publisher\nand one subscriber, while the `rountrip` demo implements a simple ping-pong\nscheme.\n\n**turtlebot/zturtle-{python,rust}**: a [TurtleBot\n3](https://en.wikipedia.org/wiki/TurtleBot) teleoperation application leveraging\nZenoh. It subscribes to\n[Twist](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html)\nmessages to control the velocity of the TurtleBot's wheels, publishes a camera\nfeed, and whenever its Wi-Fi network changes, it connects to a new peer/router\n(e.g. to maintain geo-proximity). The Rust and Python implementations are\nlargely equivalent.\n\n**turtlebot/zdrive-python**: a stripped down version of\n**turtlebot/zturtle-python** providing only teleoperation (i.e. no camera feed\nand no dynamic peer/router re-connections). This demo can be less demanding on\nlow-bandwidth networks.\n\n**plotting**: illustrates how Zenoh can be used to publish metrics to a\ndashboard. Three subscriber frontends are provided: a Python script using\n[Matplotlib](https://matplotlib.org/), a browser client and a\n[Freeboard](https://freeboard.github.io) configuation.\n\n**computer-vision/zcam/zcam-{python,rust,rest}**: consists of two Zenoh nodes: a\npublisher capturing a camera video stream and a subscriber displaying said video\nstream. Both of the Python and Rust implementations use\n[OpenCV](https://opencv.org/) to encode and decode data.\n\n**computer-vision/face-recog**: a system of four Zenoh nodes communicating with\neach other to (1) capture a camera video stream, detect (2) then recoginize (3)\nfaces within it and finally display (4) the results. The purpose being\nidentifying faces based given a database of pictures.\n\n**distributed-web**\n: illustrates how Zenoh can be used to host a geo-distributed\nweb page by splitting page content across multiple routers each running separate\nstorage backends. This demo also demonstrates the use of dynamic router\nconfiguration through Zenoh's [REST API](https://zenoh.io/docs/apis/rest/).\n\n**ROS2/zenoh-pico-teleop-gyro**: utilizes an\n[ESP32](https://en.wikipedia.org/wiki/ESP32) board and a\n[gyroscope](https://en.wikipedia.org/wiki/Gyroscope) sensor to publish\n[Twist](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html)\nteleoperation messages over Zenoh\n[Pico](https://github.com/eclipse-zenoh/zenoh-pico). This is done by mapping 3D\nrotations to velocity vectors and can for example be used to operate a\n[TurtleBot 3](https://en.wikipedia.org/wiki/TurtleBot) using hand gestures.\n\n**ROS2/zenoh-python-lidar-plot**: a Zenoh that subscribes to\n[LaserScan](http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/LaserScan.html)\nmessages published by a robot equiped with a\n[Lidar](https://en.wikipedia.org/wiki/Lidar) sensor. Then, using\n[Matplotlib](https://matplotlib.org/), it constructs a 2D map of nearby\nobstacles and environment boundaries (e.g. walls of a room).\n\n**ROS2/zenoh-{python,rust}-teleop**: Zenoh nodes that publish\n[Twist](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html)\nteleoperation messages by reading keyboard input (i.e. arrow keys). Both of the\nRust and Python implementations are terminal applications.\n\n**zenoh-home/{light,soil,temp-humi}-sensor**: Zenoh nodes running Zenoh\n[Pico](https://github.com/eclipse-zenoh/zenoh-pico) on an\n[ESP32](https://en.wikipedia.org/wiki/ESP32) board which publish sensor data\neither from an [ambient light\nsensor](https://learn.adafruit.com/adafruit-bh1750-ambient-light-sensor/overview),\na soil moisture sensor or a [temporature \u0026 humidity\nsensor](https://learn.adafruit.com/dht).\n\n**zenoh-android/ZenohApp**: an Android application written using Zenoh's Kotlin\nbindings. It can declare a subscriber, a publisher or a queryable, as well as\nperform a PUT, GET or DELETE operation.\n\n**zenoh-dds-interop/shapes_demo**: A program to test the interoperability of [zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds) against various DDS implementations.\n\n| ⚠️ The following demos are currently untested |\n|----------------------------------------------|\n\n**zenoh-fence**: a system of four Zenoh nodes made up of (1) a\nrobot subscribing to\n[Twist](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html)\nteleoperation messages, (2) an\n[Ultrasonic](https://en.wikipedia.org/wiki/Ultrasonic_transducer) sensor\n(representing a 'fence') that publishes the distance between itself and the\nrobot, (3) an [ESP32](https://en.wikipedia.org/wiki/ESP32) board (representing a\n'stoplight') which subscribes to the distance between the fence and the robot,\nand publishes on a 'red light' key a boolean value signaling whether the robot\nis _too close_ to the fence (likewise, a 'green light' key indicates if the robot\nisn't too close to the fence), and (4) a modified version of\n**ROS2/zenoh-pico-teleop-gyro** which stops the robot if the 'red light' signals\nthat the robot is too close to the fence, thus allowing 'safe' teleoperation of\nthe robot (i.e. the operator is protected from driving the robot into dangerous\nareas).\n\n**gamepad-dragonbot**: illustrates [Zenoh\nFlow](https://zenoh.io/blog/2023-02-10-zenoh-flow/) through the teleoperation of\na robot with\n[Twist](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html)\nthrough a gamepad. Three Zenoh Flow _nodes_ are at play here: (1) a _source_\nnode reads input raw data from a gamepad which is sent to (2) an _operator_ node\nthat transforms the raw data into its linear \u0026 angular velocity components which\nare finally sent to (3) a _sink_ node that serializes the velocities into a\nTwist message and puts it on the Zenoh key that the robot subscribes to.\n\n**ROS2/zenoh-rust-replay**: starts with two ROS2\n[TurtleBots](https://en.wikipedia.org/wiki/TurtleBot) only one of which, say\nrobot (1), receives teleoperation messages over\n[DDS](https://en.wikipedia.org/wiki/Data_Distribution_Service). In order to\n'replay' the teleoperation commands of the robot (1) to robot (2), a [Zenoh-DDS\nbridge](https://github.com/eclipse-zenoh/zenoh-plugin-dds) is deployed on the\nsame network as the DDS domain the robots, then a Zenoh node connected to the\nbridge (either directly or through a number of hops) will get the teleoperation\ncommands sent to robot (1) and re-publish them; the bridge will thus forward\nthem to robot (2).\n\n**ROS2/zenoh-pico-cyclonedds-cdr-message-log**: illustrates\nhow [Zenoh Pico](https://zenoh.io/blog/2021-10-04-zenoh-pico-guide/) can be used\nto publish messages to a\n[DDS](https://en.wikipedia.org/wiki/Data_Distribution_Service) domain (as well\nas subscribe to messages sent in a DDS domain) using the [Zenoh-DDS\nbridge](https://github.com/eclipse-zenoh/zenoh-plugin-dds). On the Zenoh Pico\nnode, serialization \u0026 deserialization of\n[CDR](https://en.wikipedia.org/wiki/Common_Data_Representation) messages is perfomed with\nthe [CycloneDDS](https://github.com/eclipse-cyclonedds/cyclonedds) CDR library.\n\n**ROS2/zenoh-rest-teleop**: Browser version of **ROS2/zenoh-{python,rust}-teleop** which utilizes Zenoh's [REST API](https://zenoh.io/docs/apis/rest/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-zenoh%2Fzenoh-demos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipse-zenoh%2Fzenoh-demos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-zenoh%2Fzenoh-demos/lists"}