Why does the ROS MATLAB connection via topic receive command (ROS-Toolbox) not work in R2020a but in R2020b
29 views (last 30 days)
Since we were using the trial version of MATLAB R2020b we could connect MATLAB with a ROS topic and receive newly published data with the receive command of the ROS toolbox.
However the same code does not work with MATLAB R2020a (we use a licensed version now). We do see the topic with rostopic list. We can also see incoming data with rostopic echo /topic within MATLAB. Initially we used a custom message format but we also checked it with a simple String. Furthermore we tried the receive command with and without timeout, makes no difference.
We are using ROS Kinetic (LINUX UBUNTU) and as mentioned before MATLAB R2020a (LINUX UBUNTU). We ran the software on two different PCs and also tried it on one single PC.
While debugging the program pointer is not jumping over the receive command.
We use the following simple test script:
sub = rossubscriber('/test_state', 'std_msgs/String');
a = receive(sub);
b = assembly_state.Data;
Cam Salzberger on 30 Nov 2020
Edited: Cam Salzberger on 30 Nov 2020
The most common reason for being able to see rostopic, but not being able to receive messages from one or other other side of the communication is not having the ROS_IP environment variable set correctly on the non-MATLAB machine. See this post for more details.
Also as an FYI, if you call rosinit with an IP address, that overrides the ROS_MASTER_URI environment variable. It's not a problem, just wanted you to know the behavior.
I'm not sure why it would work in R2020b but not in R2020a. There was a big change to the back-end of ROS in R2020b (using roscpp instead of rosjava as the core, and updating to Melodic while R2020a uses Indigo). If you were using messages that changed definition between versions, that could cause this issue too, but std_msgs/String isn't one of those. It could be that the way ROS sets up the communication on the back-end has been updated in Melodic, and is therefore able to work around the lack of a ROS_IP setting.