Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    expploitt
    @expploitt
    Hello all, I'm using the zenoh dissector for wireshark and I do not understand some things. When I launch a pub/sub in peer mode, I can only see the multicast frame without zenoh header
    imagen.png
    Angelo Corsaro
    @kydos
    @expploitt that normal as the peer do not use the 7447 port to communicate, they only use that for scouting otherwise multiple peers on the same machine would have a conflict. If you are trying to debug, then just enable info logging and you’ll get the locator at which each peer is reachable. There you’ll see the port. Once you know that filter the traffic by that port and use the wire-shark “parse as” option to parse the packets as zenoh. HTH.
    6 replies
    Geoff
    @geoff_or:matrix.org
    [m]

    JEnoch (Julien Enoch):

    The ROS2 daemon is only queried by the ROS2 cli tools. Regular ROS2 applications directly use their own ROS2 graph cache managed by rcl+rmw

    This is not necessarily true. The daemon was mainly made for the CLI tools to keep them responsive and accurate, but other applications can use it if they want to. I think that rviz uses the daemon, actually.

    What we are now considering is to allow the user to configure a zenoh bridge with a set of topics for which he wants the discovered entities to be propagated to a remote bridge. Receiving those discovery information, the remote bridge will create the corresponding DDS entities, allowing DDS advertisement and completion of the ROS2 graph by all ROS2 nodes.
    Of course a user will be able to set "*" for this set of "propagated" topics, meaning that all DDS entities will be proactively created, but with consequences on discovery time and scalability.

    I think this gives the best of both worlds. It allows us to fence of different sections of a widely-distributed application, while also allowing the dynamic nature of ROS to be maintained where it is needed. And for unknown system introspection, * can be used.

    Gergely Kis
    @kisg

    Hi! We have been testing rmw_zenoh in the past week, and we were able to run a basic distributed application in the following setup:
    ROS1 node -> ros1_bridge (with the ROS2 side running rmw_zenoh) -> Zenoh Router -> Android emulator -> ROS2 node (running with rmw_zenoh)

    We are also looking at adding support for shared memory transport in rmw_zenoh (we got delayed this week by other projects). From what I have seen so far, I think that rmw_zenoh for ROS2 apps could provide a superior solution compared to using DDS on the ROS2 side and then bridging it over Zenoh. It just brings in unnecessary complexity, if the whole system could just run Zenoh as the ROS2 backend. Obviously, rmw_zenoh is not yet production ready, and as we discussed it here before, it might make sense to reimplement it in Rust instead of using the Zenoh-C binding, but in the long run this might become a better solution.

    Angelo Corsaro
    @kydos
    Hello @kisg, thanks for the update as I said earlier we would be more than happy to collaborate on a Rust based RMW. We would even like to go a bit furhter, in the sense that there are some aspects where the way in which zenoh works would further simplify some aspects of the operation of ROS2 robots. In short, we would like to (1) allow to leverage zenoh widlcards on ROS2 namespaces and ROS2 topic names and (2) expose zenoh queries to ROS2. Perhaps we could create a repo for zenoh-rust-rmw on the eclipse project and use to share design discussion and also collaborate on the implementaiton. Let me know.
    6 replies
    Angelo Corsaro
    @kydos
    Hello everyone, I just wanted to let you know that I’ve commited the changes necessary to leverage the new zenoh synchronous API on zenoh-c. These are few small changes but with a big impact in terms of performances for zenoh-c. If you want to give it a try the branch to use is https://github.com/eclipse-zenoh/zenoh-c/tree/sync
    In any case we should be merging the sync branches before the end of the month.
    Joe Speed
    @joespeed
    Clemson University Deep Orange 12 team teleop drove via Zenoh an Indy Autonomous Challenge racecar running ROS 2 Foxy Autoware.Auto CycloneDDS around the racetrack in Indy. Sorry I'm not yet allowed to share the video😁 https://cuicardeeporange.com/project/deep-orange-12/
    Frédéric Desbiens
    @fdesbiens
    Looking forward to watching it, @joespeed!
    Angelo Corsaro
    @kydos
    I hope I’ll actualy get to drive myself one of those beutiful Dallara ;-)
    @joespeed thanks for sharing with the community, we are super happy to be able to help the Indy Autonomous Challenge team!
    Julien Enoch
    @JEnoch

    Hi zenohers and especially the ROS2 users!

    I just merged a bunch of updates in the master branch of zenoh-plugin-dds. It now includes:

    Note that the REST API could also be used for pub/sub with ROS2 in Javascript via a simple web page! A blog on this will come soon… :wink:

    expploitt
    @expploitt
    Hello all! I've been modifying the zenoh-dissector in order to achieve a better performance. For that I decided to use a heuristic dissector. If someone wants to test it, I opened a pull request in the @cguimaraes work in cguimaraes/zenoh-dissector#15
    Angelo Corsaro
    @kydos
    Hello @expploitt, happy to give it a try! Will let you know.
    Shan Desai
    @shantanoo-desai
    Hello all. Was amazed by the talk that Angelo gave yesterday at Eclipse Virtual IoT and Edge Days for Zenoh and definitely giving Zenoh a try in my research projects. Happy to be on board!
    Julien Enoch
    @JEnoch
    Hi @shantanoo-desai, welcome on board! Feel free to post here any questions or suggestions of improvements you may have using Eclipse zenoh. We would also be happy to know more about your use cases and results of experiments with zenoh :smiley:
    Angelo Corsaro
    @kydos
    Hello @shantanoo-desai, I am glad that you enjoyed the talk. Welcome to your community, let us know if there is anything we can help with!
    Frédéric Desbiens
    @fdesbiens
    Thanks for attending and for the feedback, @shantanoo-desai!
    Gergely Kis
    @kisg
    Hi, I just finished watching Angelo's great presentation. I was originally only interested in Zenoh as a potentially better ROS2 backend. But now I am wondering if Zenoh could be used as an alternative to Apache Kafka with the system configured in a way that can match Kafka's "persistent message queue" semantics (e.g. using Storages). I could even imagine it as a drop-in replacement if a "Kafka to Zenoh" protocol bridge would be implemented similar to the current DDS bridge. The Eval primitives could provide a great way to implement stream processing components, similar to Kafka Streams. What do you think?
    Angelo Corsaro
    @kydos
    @kisg we think along the same lines. To this end, you may be interested in taking a close look to zenoh-flow
    There isn’t code yet, but we have been doing R&D and have an initial design. We will share it openly with the community for comments probably next week.
    You’ll see commits flowing in the weeks to come. In essence, we want to leverae zenoh to build cloud-to-device data-flows processing pipelines.
    Gergely Kis
    @kisg
    @kydos Great to hear, I will follow the progress!
    gardenest
    @gardenest
    Hi, I am just trying to use Zenoh and it's really awesome, I have a question that is it possible to add custom message in the Hello message discovered by scout function? thus I can identify each process by the custom message.
    Angelo Corsaro
    @kydos
    Hello @gardenest, the protocol supports custom attachment for essentually any zenoh message. That said, at this point in time we do not expose this feature in the user API.
    gardenest
    @gardenest
    @kydos Thanks for your reply. This feature is important for device discovery and identification. I'm looking forward for this feature release.
    Shan Desai
    @shantanoo-desai
    thanks @fdesbiens @kydos @JEnoch for the welcome. The first question I actually have is in the description of Zenoh. It mentions geo-distributed storages does this imply geographically distant storage or can be something that is intra-geographical too e.g. within the same building, floor, or factory? I do remember the example Angelo gave of the Museum scenario but just wanted to be sure about it.
    Julien Enoch
    @JEnoch
    Hi @shantanoo-desai ,
    the storages can be deployed at any geographic scale you want.
    Concretely, the zenoh storages are instanciated within a zenoh router process (a.k.a. zenohd binary). And you can deploy those routers wherever you want, as soon as they are interconnected.
    For instance, in Angelo’s example: each router (each square with zenoh logo) can be deployed in different places (floors, buildings, city, cloud…), and the 2 storages could therefore be deployed in the same floor, or on different continents.
    Shan Desai
    @shantanoo-desai
    Okay this is fantastic I actually happen to have a Raspberry Pi Cluster Lab sitting in my premises. I would actually want to give the example a try with an assumption that each Pi is an edge device dedicated to do some tasks.
    Julien Enoch
    @JEnoch
    That would make lot of sense and probably a nice demo :smile:
    Just notice that we don’t provide (yet) pre-built binaries for ARM. You’ll need to build (or cross-build) zenoh by yourself following those instructions.
    Shan Desai
    @shantanoo-desai
    Ah! okay let me see what I can actually leverage. Is there a particular reason why arm64 isn't available at the moment? or are there deps which docker's buildx toolkit doesn't support
    26 replies
    Angelo Corsaro
    @kydos

    @gardenest

    @kydos Thanks for your reply. This feature is important for device discovery and identification. I'm looking forward for this feature release.

    Absolutely, this is one of the reasons why we wanted all messages in our protocol to support user attachments. We are about to finalise the features list for June and July — we’ll try to squeeze this in June. BTW, once the API will expose this feature you’ll be able to attach properties to scout/hello, open as well as to data messages. We keep the working-feature-list on the [github wiki] (https://github.com/eclipse-zenoh/zenoh/wiki/2021). I’ll let you know once that is updated.

    gardenest
    @gardenest
    I'm trying to implement my computation scenarios via the Eval feature and it works well to fit almost my scenarios with query and reply. My question is that I have a scenario need to do multiple reply within one query trigger. Since there are many continuous big data(maybe 2MByte/second last 15 minutes and lost data is not accepted) so I need multiple reply to reply to client application or the memory will be consumed and out of memory.
    Is it possible to do multiple reply within one query? Or do you have any suggestion about how to fit this special scenario?
    Julien Enoch
    @JEnoch
    Hi @gardenest ,
    Yes, in your Eval function, you can call GetRequest::reply() as many time as you want.
    Just notice that if you send several replies with a same Path, the consolidation mode configured by default in the zenoh API will make that your requester will only receive 1 value per Path (the one with the mre recent timestamp). But I guess you probably want to send replies with different Paths, right ?
    gardenest
    @gardenest

    Hi @gardenest ,
    Yes, in your Eval function, you can call GetRequest::reply() as many time as you want.
    Just notice that if you send several replies with a same Path, the consolidation mode configured by default in the zenoh API will make that your requester will only receive 1 value per Path (the one with the mre recent timestamp). But I guess you probably want to send replies with different Paths, right ?

    @JEnoch Actually I need one Path with multiple replies and client need to receive all replies, is that possible?

    Julien Enoch
    @JEnoch

    Yes, it is possible: currently the way for the requester to specify that he wants several replies for a same Path is to set the starttime and/or the stoptime as properties in the Selector.
    That’s for instance used to query the InfluxDB backend. See example of use here:
    https://github.com/eclipse-zenoh/zenoh-backend-influxdb#behaviour-on-get

    Just know that the values of starttime and stoptime properties are not interpreted by the zenoh infrastructure itself, but by the receiver of the GetRequest. I.e. the InfluxDB backend, or your Eval function in your case.
    The InfluxDB backend, for instance, uses the values of starttime and stoptime in the DB query it does to retrieve the time-serie to reply.
    Your Eval function could interpret those starttime and stoptime values in the way you want (or just ignore them). The only missing part we currently have is that in zenoh API, there is no way yet to specify a timestamp with the Value you replies. The timestamp is automatically generated by zenoh when replying, and it could therefore not match the time interval specified in the Selector.
    But that might not be an issue for your use case if you don’t care about timestamps.

    5 replies
    Angelo Corsaro
    @kydos
    Hello everyone, I wanted to let you know that, the sync branch has been merged in master, as a result zenoh (1) has almost doubled throughput for small samples, and (2) provides APIs sync and async programming. These changes have also heavily benefitted zenoh’s C and Python APIs.
    @gardenest as part of our June/July features planning we discussed the protocol attachments. We think we’ll be able to provide something relatively quickly for Hello messages but the generalised mechanism of attachments will remain on next. I hope that suits your needs, please let me know if that is not the case.
    7 replies
    Luca Della Vedova
    @luca-della-vedova
    Hi folks! Luca from Open Robotics here, experimenting with Zenoh. I am trying to get a secure demo to work using TLS in a configuration with one router, one publisher and one subscriber over three different network interfaces configured with mininet and zenoh-python (the repo is https://github.com/luca-della-vedova/robocom-benchmarks, with the relevant functions being testZenoh and the zenoh subfolder). I keep getting errors in connection when TLS is enabled and wireshark shows no packets going through, I wonder if you had any input? I'm using the deb version of zenoh and I built zenoh-python from source, specifically the error is:
    [2021-06-07T08:17:06Z ERROR zenoh::net::runtime::orchestrator] Unable to connect to any of [Tls(SocketAddr(10.0.0.1:7447))]!.
    What I did is follow the instructions in the TLS tutorial, creating the certificates and adding them to the server config / zenoh python configuration
    Julien Enoch
    @JEnoch
    Hi @luca-della-vedova ,
    I had a look to your repo and saw that you use IP address (10.0.0.1) as domain name for the certificate. The TLS implementation used by zenoh (rustls) only supports connections to named hosts (i.e. referenced by a DNS, or at minimum declared in /etc/hosts for local DNS resolution).
    They have plans to support no-DNS configuration (ctz/rustls#331), but it might not be available any time soon.
    For the time being, with zenoh you need to:
    1. choose a hostname for the host running zenohd
    2. generate the certificate with this hostname as domain
    3. configure mininet or your virtual hosts to make sure that the hostname resolution works
    4. change the conf in your zenoh-process.py to use tcp/<your_hostname>:7447 as peer
    Luca Della Vedova
    @luca-della-vedova
    I see, then I will add an host name, thanks for the quick reply!
    Shan Desai
    @shantanoo-desai
    Hi all I was trying to build zenoh on a Raspberry Pi 4 with Ubuntu Server Image on it using cargo build --release --all-targets and it shot an error
    error: linker `cc` not found
    error: could not compile `syn`
    Is this something related to musl or gcc?
    Shan Desai
    @shantanoo-desai
    Never mind it was a problem of the compiler. solved it using apt install build-essential since libc crate needs it
    Shan Desai
    @shantanoo-desai
    Also, maybe I might be wrong here but I am fairly confident that your CI/CD Pipeline for Docker Images might be simplified using Docker's buildx kit and GH Actions. The artifacts are created for all arm64/x86 platforms without having to maintain distinct Dockerfiles for each platforms.
    Any DevOps guy care to weigh in here? I build images for x86 and arm64 (albeit python3x) and GH Actions does the heavy lifting for in terms of QEMU and CI infrastructure.
    Julien Enoch
    @JEnoch
    Hi @shantanoo-desai ,
    Thanks you for your feedback. Unfortunatelly we don’t have a DevOps guy in our team. But we’re grateful for any advices, guidance or contribution!
    BTW I have few questions you might have the answers:
    • for the zenohd and *.so you built this way, which maximal GLIBC version they require (check with ldd -v zenohd *.so | grep GLIBC) ? I manage to cross-build binaries for armv7l using a specific Dockerfile, but unfortunately the resulting libzplugin_storages.so requires GLIBC 2.29 which is greater than the default one on Raspberry Pi OS (2.28)
    • How do you make publicly available the artifacts produced by GH actions ? Eventually, (at least for final releases) we need to make those available on https://download.eclipse.org/zenoh/ , which is writeable only from the Eclipse CI infra
    17 replies
    gardenest
    @gardenest
    I have a situation that when I used a Zenoh peer A connect to a Zenoh router then everything works fine with other peers, but when I use zn_scout example to scout them I only saw peer A. If I use zn_info example, I could see all these peers and router. Is that normal or do I miss something? I assumed I could saw all the connected peers and routers via zn_scout.
    OlivierHecart
    @OlivierHecart

    Hello @gardenest, this is indeed strange. You should see all reachable routers and peers with zn_scout.
    There is a difference between zn_info and zn_scout that could explain this behavior :

    • zn_scout only reports routers and peers that are reachable through multicast.
    • zn_info and other peers by default connect to all routers and peers they discover through multicast AND gossip discovery (then zn_info reports its status).

    So maybe part of your peers are not reachable through multicast but are discovered by zn_info and other peers by gossip discovery (through the router probably).

    gardenest
    @gardenest
    @OlivierHecart Thanks for your reply. Since the zn_scout discovery instance through multicast, does it mean that I can't get all the routers and peers scout information cross network segmentation? If yes, is it possible to get all the instance information? For example, one router and peers located at Asia connected by another router and peers located at USA and I would like to discovery all the device.