ROS2 multi-machine with WSL2 + Linux (NVIDIA Jetson Orin Nano)

Hi everyone,

I am trying setting up a ROS2 multi-machine communication between WSL2 (Ubuntu 22.04) running on a local Windows11 machine and a NVIDIA Jetson Orin Nano (Jetpack 6.2). My objective is generating data on my WSL2 machine, and process them using the Jetson.

However, I am experiencing issues related to the fact that the two machines cannot see the respective ROS2 topics / nodes. They are both connected to the same network, and I have activated the mirroring mode networking in WSL2 using the flag networkingMode=mirrored. I have also tried using Cyclone and FastDDS using custom configuration files, but nothing worked so far.

As I have read that there are solutions to make IsaacSim run on Windows11 side and expose topics in WSL2, I was wondering if you could provide any guidance to set up the communication between in a β€œsimilar” multi-machine setup, featuring WSL2 and a Jetson machine. If you need any further information, please do not hesitate to ask.

Thank you in advance!

Hello @simone.andolfo!

Based on the title and content of your topic, it looks like it may receive better visibility and feedback in a different category. We took the liberty of moving it for you.

If this was an incorrect assessment, please send me a direct message.

Disclaimer: this moderation suggestion and message were generated with AI assistance.

β€” πŸ€– This is an automated AI response. I’m here to help, but please verify important details! β€”

To set up a ROS2 multi-machine communication between WSL2 (Ubuntu 22.04) running on a local Windows11 machine and a NVIDIA Jetson Orin Nano (Jetpack 6.2), you need to ensure that both machines are properly configured to communicate with each other.

First, verify that both machines are connected to the same network. Then, check the ROS2 configuration on both machines to ensure they are set up to communicate with each other.

The provided context does not specifically cover the setup of ROS2 multi-machine communication between WSL2 and Jetson Orin Nano. However, it mentions the ros2_nanollm package, which integrates the NanoLLM model into the ROS2 ecosystem, enabling natural language processing capabilities.

For setting up the communication, you may need to configure the ROS2 topics and nodes on both machines to communicate with each other. This may involve setting up a ROS2 master node on one machine and configuring the other machine to connect to it.

The context also mentions the use of custom configuration files for Cyclone and FastDDS, but it does not provide specific guidance on how to set up the communication between WSL2 and Jetson Orin Nano.

I could not find clear support for the specific setup of ROS2 multi-machine communication between WSL2 and Jetson Orin Nano in the provided Jetson Orin Nano documentation. However, you may want to explore the ros2_nanollm package and its documentation for more information on setting up ROS2 communication on the Jetson Orin Nano.

Additionally, you can try to follow the general guidelines for setting up ROS2 multi-machine communication, such as configuring the ROS2 master node, setting up the ROS2 topics and nodes, and ensuring that both machines are properly connected to the same network.

Please note that the provided context is limited, and you may need to consult additional resources or documentation for more detailed guidance on setting up the communication between WSL2 and Jetson Orin Nano.

β€” We support team will also look into your issue to have further suggestions soon. please stay tuned. β€”

Hello @simone.andolfo,

Welcome to the Isaac ROS forum and thanks for the post!

This looks like a ROS 2 DDS discovery/networking issue rather than an Isaac ROS-specific issue. Please first make sure both WSL2 and Jetson are using the same ROS 2 domain and the same RMW implementation:
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
ros2 daemon stop

Also, a similar ROS 2 discovery issue was discussed here.
For ROS 2 Humble, you can create a CycloneDDS config on both machines and replace IFACE with the actual network interface used to reach the other machine:

<CycloneDDS>
    <Domain id="any">
      <General>
        <NetworkInterfaceAddress>IFACE</NetworkInterfaceAddress>
        <AllowMulticast>true</AllowMulticast>
      </General>
    </Domain>
  </CycloneDDS>

Then export:
export CYCLONEDDS_URI=file:///path/to/cyclonedds.xml

Before testing your application, please verify basic ROS 2 discovery with:
ros2 multicast receive on one machine, and: ros2 multicast send on the other machine.

Since WSL2 mirrored networking is involved, also check that Windows/Hyper-V firewall is not blocking inbound UDP/multicast traffic from WSL2.

Hi @vchuang,

Thank you very much for the detailed reply.

I implemented your suggestions, but I could not cuccessfully run the ros2 multicast send and ros2 multicast receive test until I implemented the following two custom firewall rules via PowerShell, which enable inbound/outbound UDP traffic between WSL2 and Jetson:

  1. New-NetFirewallRule -DisplayName "ROS2 Jetson-WSL UDP In" -Direction Inbound -Action Allow -Protocol UDP -RemoteAddress MY_AWESOME_JETSON_IP -Profile Any
    
  2. New-NetFirewallRule -DisplayName "ROS2 Jetson-WSL UDP Out" -Direction Outbound -Action Allow -Protocol UDP -RemoteAddress MY_AWESOME_JETSON_IP -Profile Any
    

Thank you again!

Simone