- Which version of MATLAB are you currently use? I did the above experiment with MATLAB R2022a, which supports ROS 2 Foxy.
- Make sure you set the correct IP address for the environment variable "ROS_DISCOVERY_SERVER". This can only be the ipaddress of the remote machine. If you set it to something else, it may work for local network inside the remote machine (e.g. publisher and subscirber all start in the same remote machine), but it will not work elsewhere.
- It is always good practice to provide subscriber type while creating subscriber, and use "sub.LatestMessage" to check during prototype to avoid network issues.
How do I use a ros2 discovery server in matlab
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have setup a ROS2 Fast DDS discovery server as seen at the following: https://docs.ros.org/en/foxy/Tutorials/Advanced/Discovery-Server/Discovery-Server.html
This works great using the ros2-foxy CLI when I do export ROS_DISCOVERY_SERVER=<server_location>, and then run a listener node.
However, in MATLAB, using setenv("ROS_DISCOVERY_SERVER",<server_location>) does not allow me to use that discovery server. It seems to have no effect at all. I have also made sure to set the RMW implementation to rmw_fastrtps_cpp.
Is this feature just not supported? Is it a bug? Or am I simply doing something wrong?
Thanks!
close all
clear
clc
% Set environment variables (should be same functionality as 'export FOO=bar')
ROS_DOMAIN_ID = 0;
setenv("ROS_DOMAIN_ID",num2str(ROS_DOMAIN_ID))
setenv("RMW_IMPLEMENTATION","rmw_fastrtps_dynamic_cpp")
setenv("ROS_DISCOVERY_SERVER","192.168.1.128:11811")
% create node
subNode = ros2node("/matlab_sub",ROS_DOMAIN_ID);
while true
pause(.2)
try
% scan for topic
laserSub = ros2subscriber(subNode,"/chatter");
break
catch ME
disp(ME.message)
end
end
while true
% read data from topic
[scanData,status,statustext] = receive(laserSub,10);
scanData.data
pause(.2)
end
0 commentaires
Réponses (1)
Josh Chen
le 6 Sep 2022
Hi Samuel,
I just tried this on my end and it works fine as shown below:
sub3 was created with a node when "ROS_DISCOVERY_SERVER" was set to empty, while sub2 was with a node when "ROS_DISCOVERY_SERVER" was set to the same address as the virtual machine IP. As shown on the screenshot, sub3 did not receive anything, while sub2 was able to continuously receive messages from the publisher on remote device.
Couple things to check are:
Hope this helps,
Josh
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!