Discussion - Intro to rmw_zenoh

This is the discussion topic for the video and/or blog post linked above. Please keep all replies relevant to the content, otherwise create a new topic.

2 Likes

Hello @JoshNewans

Thank you for the wonderful tutorial. I have a question regarding setup of zenoh router on AWS EC2.

I am working on remote control (over internet) of a AGV running on Orin nano and ROS2 Humble. So, my plan is to control it using AWS EC2. My question is can I setup zeno router on EC2 instance? Do i need to change anything on the orin router setting or i just need to give public ip of the EC2 in zenoh config and thats it. As the repo that you work on is not working for ROS2 humble so i am planning to use this one GitHub - eclipse-zenoh/zenoh-plugin-ros2dds: A Zenoh plug-in for ROS2 with a DDS RMW..

Please let me know your opinion.

Hello @JoshNewans

I want to test the communication over internet, but I have never use any cloud server and I am facing a problem. I created a cloud server on DigitalOcean but now that I am compiling ‘rmw_zenoh’ but it fails:

Compiling tokio v1.36.0
error: could not compile `tokio` (lib)

Caused by:
  process didn't exit successfully: `rustc --crate-name tokio --edition=2021 /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.36.0/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C panic=abort -C linker-plugin-lto -C codegen-units=1 --cfg 'feature="bytes"' --cfg 'feature="default"' --cfg 'feature="fs"' --cfg 'feature="io-std"' --cfg 'feature="io-util"' --cfg 'feature="libc"' --cfg 'feature="macros"' --cfg 'feature="mio"' --cfg 'feature="net"' --cfg 'feature="num_cpus"' --cfg 'feature="rt"' --cfg 'feature="rt-multi-thread"' --cfg 'feature="socket2"' --cfg 'feature="sync"' --cfg 'feature="time"' --cfg 'feature="tokio-macros"' -C metadata=de817d27a0a7e294 -C extra-filename=-de817d27a0a7e294 --out-dir /root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps -L dependency=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps --extern bytes=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libbytes-4ec28e8fdb274244.rmeta --extern libc=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/liblibc-9efae82c4954513f.rmeta --extern mio=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libmio-24570d310e264b65.rmeta --extern num_cpus=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libnum_cpus-8bbc55303ae8844f.rmeta --extern pin_project_lite=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libpin_project_lite-7f82b6d6368837ea.rmeta --extern socket2=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libsocket2-410f1b30da623aa9.rmeta --extern tokio_macros=/root/build/zenoh_c_vendor/zenoh_c_vendor-prefix/src/zenoh_c_vendor-build/release/target/release/deps/libtokio_macros-a39f959ab7845814.so --cap-lints allow` (signal: 9, SIGKILL: kill)
gmake[5]: *** [CMakeFiles/cargo.dir/build.make:111: release/target/release/libzenohc.so] Error 101
gmake[4]: *** [CMakeFiles/Makefile2:180: CMakeFiles/cargo.dir/all] Error 2
gmake[3]: *** [Makefile:146: all] Error 2
gmake[2]: *** [CMakeFiles/zenoh_c_vendor.dir/build.make:86: zenoh_c_vendor-prefix/src/zenoh_c_vendor-stamp/zenoh_c_vendor-build] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:137: CMakeFiles/zenoh_c_vendor.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
---
Failed   <<< zenoh_c_vendor [10min 46s, exited with code 2]

Do you know what could be the problem , or can you explain how did you set up the cloud server?

Nvm the problem was that my server didn’t have enough RAM. It works perfectly fine now!!!

Hi there buddy, i am trying to use DigitalOcean as well but my zenoh router just can’t get connected to as the router is listening to the server’s internal IP while my robot is reaching out to it publically from a different network. May I know if your server runs on debian or ubuntu?

Hi there @JoshNewans ,

I could really use some help from you if you could make a tutorial on how to setup a cloud server like u did with digitalocean droplet to host a router and connect two other ros2 machines from differenet networks. I tried using google cloud machine to do the same but the zenoh router in the cloud machine just keeps using its internal ip for the zenoh router, which basically isolates it from public network. I tried editing the config file to use the external ip but the router refuses to launch that way.

Thanks!

Hmm I wish I could remember - I spun it up for that video and then deleted it, I’ve never used it for anything serious, I remember it didn’t take much to get going though.

I think it was Debian 12.

I just went back through the original screencap and it looks like zenohd prints out

Zenoh can be reached at: tcp/170.XXX.XXX.XXX:7447  <-- My public IP address
Zenoh can be reached at: tcp/[fe80:xxxx:xxxx:xxxx:xxxx]:7447 <-- Some link-local IPv6 address
Zenoh can be reached at: tcp/[fe80:xxxx:xxxx:xxxx:xxxx]:7447 <-- Another IPv6 address
Zenoh can be reached at: tcp/10.49.XXX.XXX:7447  <-- Some local address
Zenoh can be reached at: tcp/10.126.XXX.XXX:7447  <-- A different local address

Are you saying that yours doesn’t print the public address?

Edit: This is on the droplet which I assume is where you were having troubles

@JoshNewans Apreciate your reply!

My issue was the Zenoh on the cloud server isn’t picking up connections from the server’s public IP although I have setup all necessary firewall rules. My router configs on both my robot and PC are set to point to the server’s public IP.

While I was thinking of troubleshooting it further, I realised Isaac Sim is not compatible with Zenoh, where messages won’t go through the Isaac ros2 bridge, so I searched for alternatives and settled on Husarnet VPN where they have a Ros2 guide. I am using Isaac sim to create a digital twin of a robot on my pc and communicate with the physical robot.

If my main issue could be solved, which is the cloud server Zenoh not receiving connections, I can potentially create a Ros2 node in Isaac sim that writes data to a JSON file and another Ros2 node which reads from the JSON, which might solve the issue in the second paragraph.