SSH to the VM from your laptop over Husarnet VPN.
# increase socket buffers
sudo sysctl -w net.core.wmem_max=12582912
sudo sysctl -w net.core.rmem_max=12582912
sudo sysctl -w net.core.wmem_default=16384000
sudo sysctl -w net.core.rmem_default=16384000
# avoid IP fragmentation issues
sudo sysctl -w net.ipv4.ipfrag_high_thresh=134217728 # 128 MB
sudo sysctl -w net.ipv4.ipfrag_time=3
sudo sysctl -w net.ipv6.ip6frag_high_thresh=134217728 # 128 MB
sudo sysctl -w net.ipv6.ip6frag_time=3
# adapt Husarnet interface
sudo ip link set dev hnet0 txqueuelen 500
sudo ip link set dev hnet0 mtu 1350
Launch the router:
cd vm/
docker compose up -d
The container will start with the default vm/filter_example.yaml
configuration that was generated by Husarion team with the following command:
ros2 topic list | xargs vm/create_filter.sh > filter.yaml
# we also modified the "topics" section to tune the QoS settings for the ffmpeg image topics
You need to modify it if you want to include different ROS 2 topics. You can find more information about available options for the filter.yaml
file in the 3.3. Topics Configuration guide for the ROS 2 Router.
docker compose exec ros2router cat /var/tmp/superclient.xml > ~/superclient.xml
You will copy this file to your laptop in the next phase.
Repeat the Tune the kernel commands from step 1.1:
# increase socket buffers
sudo sysctl -w net.core.wmem_max=12582912
sudo sysctl -w net.core.rmem_max=12582912
sudo sysctl -w net.core.wmem_default=16384000
sudo sysctl -w net.core.rmem_default=16384000
# avoid IP fragmentation issues
sudo sysctl -w net.ipv4.ipfrag_high_thresh=134217728 # 128 MB
sudo sysctl -w net.ipv4.ipfrag_time=3
sudo sysctl -w net.ipv6.ip6frag_high_thresh=134217728 # 128 MB
sudo sysctl -w net.ipv6.ip6frag_time=3
# adapt Husarnet interface
sudo ip link set dev hnet0 txqueuelen 500
sudo ip link set dev hnet0 mtu 1350
Copy superclient.xml from the VM to ~/superclient.xml
on your laptop, then run:
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTRTPS_DEFAULT_PROFILES_FILE=$HOME/superclient.xml
ros2 daemon stop
After a few seconds you should discover every topic that the router exposes, giving you transparent access to Panther and the on‑site VM ROS 2 interface.
Inside the user_laptop/
directory you can find a Docker based example showing how to decode the FFMPEG stream from the cameras and display them in RViZ (remember to replace the user_laptop/superclient.xml
with your own file generated in step 1.3)
cd user_laptop
xhost +
docker compose up
That’s it! You can now launch your local ROS 2 nodes and interact with the on‑site robot over the internet just as if everything were on the same LAN.