How do I use a ros2 discovery server in matlab

10 次查看(过去 30 天)
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

回答(1 个)

Josh Chen
Josh Chen 2022-9-6
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:
  • 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.
Hope this helps,
Josh
  1 个评论
Samuel Kemp
Samuel Kemp 2022-9-29
Hello, thanks for the reply.
It is still not working. I upgraded to matlab 2022b. I ensured the ip address and ports were correct. I have verified I can receive the message on another machine running linux and using the ros2 topic echo command. Are there any debugging steps I can take?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 ROS Network Access in MATLAB 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by