Panther: Cant access topic messages from remote laptop

Hello!

We have a Husarion Panther, and I am trying to access and visualize the topics on my laptop that is connected to the same network as the Panther.

While I can see the list of topics on the terminal, I cannot visualize them on rviz2, and when I do ros2 topic echo, I get: A message was lost!!!

When I connect to the Panther with SSH, I can echo and visualize the topics and see and read them if I connect my laptop to the robot directly with a LAN cable.

The only issue I am facing is when I try to do so by connecting to the same network via Wi-Fi.

Thank you in advance for the help!

Hello @AlexTh98,

The problem is most likely related to the configuration of a different version of the ROS distribution or a different DDS configuration. Currently, Panther is based on ROS 2 Humble and uses the rmw_cyclonedds_cpp implementation.

ROS Distribution

If you use another distribution, you need to reinstall ROS or use VM/Docker with appropriate distro.

DDS Configuration

If the distribution is the same and the problem still occurs.

  1. Install the dds implementation package:
sudo apt install ros-humble-rmw-cyclonedds-cpp
  1. Specify in the terminal what version you are using by:
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

Let me know if the problem has been resolved.

If I have a secondary computer hard-lined to the same subnet as the RPi, is all I have to do on the secondary computer the steps you said?

I was wondering if you needed a cyclonedds.xml like in the tutorial.

User computer guide
In this thread I described more information about User Computer.

I will try to generalize the article about User Computer Setup Guide | Husarion in the coming days to make the instructions as general as possible for any computer.

cyclone.xml
Cyclone by default create and use cyclonedds.xml, so it is not necessary to create new one if default configuration satisfied you. However for specific platforms, may be necessary to specific communication interface (wifi / ethernet only).

We followed the steps listed here and seems to be correct except we still can’t access ROS topics from the RPi. The User Computer has the IP 10.15.20.3, internet is enabled, and am able to ping the RPi.

At the Accessing ROS from the User Computer step, we just have to export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp and that’s it?

1 Like

In the panther_ros docker, I saw the cyclonedds config you’re using is ./var/tmp/husarnet-dds/husarnet-cyclonedds.xml shown below.

<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
  <Domain id="any">
    <General>
      <NetworkInterfaceAddress>hnet0</NetworkInterfaceAddress>
      <AllowMulticast>false</AllowMulticast>
      <FragmentSize>1194B</FragmentSize>
      <!-- default: 1344 B minus Husarnet metadata (~150 B) -->
      <Transport>udp6</Transport>
    </General>
    <Discovery>
      <Peers>
        <Peer address='fc94:788f:880e:e925:0ac5:d617:c9ca:714e'/>
      </Peers>
      <ParticipantIndex>auto</ParticipantIndex>
      <MaxAutoParticipantIndex>40</MaxAutoParticipantIndex>
    </Discovery>
    <Internal>
      <Watermarks>
        <WhcHigh>500kB</WhcHigh>
      </Watermarks>
    </Internal>
    <Tracing>
      <Verbosity>severe</Verbosity>
      <OutputFile>stdout</OutputFile>
    </Tracing>
  </Domain>
</CycloneDDS>

Do we need a cyclonedds config on the RPi outside the Docker AND on the User Computer to be able to cast the ROS topics from the RPi panther_ros docker to the User Computer?

RMW implementation
Specifying the same DDS implementation export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp is necessary to communicate between two nodes.

Cyclone configuration
If you use docker in Jetson, please clear the docker interfaces using the command docker network prune.

Please also check the available interfaces for Jetson ip addr show.

I assume that on Jetson you should create a similar file cyclonedds.xml and instead of hnet0 you should provide the correct interface related to the Ethernet port.
Then specify the DDS configuration using:

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

Docker configuration is independent with your system configuration, so you should specify this configuration in both environments.