Use MATLAB Robotics System Toolbox to receive ROS message
Show older comments
I was trying to use Robotics System Toolbox(MATLAB 2015a on windows 7) to communicate with the ROS running on Ubuntu 14.04. The "rosinit" was successful and MATLAB can see the rosnode list, rostopic list, etc. I can also create the rossubscriber from MATLAB to any topic successfully. But when I run "receive" command, it just wait forever until timeout. It seems no new message is coming which should not be the case (as I am sure the ROS on Ubuntu is constantly publishing the new kinect images).
I have tried several different settings for rosinit, such as using ROS_MASTER_URI, ROS_IP, etc. Also the two PCs can ping each other's IP successfully. So I think the network connection between the two machines should be good. But MATLAB still couldn't receive the message although it can see and subscribe the topic.
Could anyone suggest any possible cause for this issue? Your help would be really appreciated!
Accepted Answer
More Answers (6)
I ran into the same problem with 2 computers:
- Windows7 + Matlab R2017a with Robotics System Toolbox
- Ubuntu 14.04 + ROS
The solution was to do explicitly indicate variable ROS_IP on the Ubuntu PC (as shown by wjchen84 at step5).
For interested readers, I'd like to indicate some other links that I found useful on the same topic:
https://nl.mathworks.com/matlabcentral/answers/119559-why-is-the-ros-subscriber-callback-in-matlab-not-triggered-when-messages-are-published-from-an-exter
google: "defining the ROS_IP solved my problem. I had different network interfaces (wlan0, eth0, etc) and I had to explicitly tell ROS which one to use. This is clearly explained in http://www.ros.org/wiki/ROS/EnvironmentVariables : "This setting is only needed in situations where you have multiple addresses for a computer and need to force ROS to a particular one."
Aaditya Saraiya
on 14 Sep 2017
0 votes
Thank you so much. This works. Interfaced Ubuntu 16.04 (ROS Kinetic Kame) and MATLAB 2016a on Windows 10.
Ilya Boyur
on 3 Nov 2017
Hello everybody, I ran into the same problem with Windows 10 (MATLAB 2017a) and Ubuntu 16.04 amd64 ROS Kinetic. I did as wjchen84 suggested, except I edited file C:\Windows\system32\drivers\etc\hosts and on Ubuntu /etc/hosts:
192.168.111.100 UBUNTU_PC_IP
192.168.111.5 WINDOWS_PC_IP
Rebooted machines, turned off firewalls as suggested. Now, when I run in MATLAB (Windows):
[name, address] =resolvehost('UBUNTU_PC_IP')
name =
'ubuntu_pc_ip'
address =
'192.168.111.100'
Seems to work fine, yeah? But:
setenv('ROS_MASTER_URI','http://UBUNTU_PC_IP:11311');
setenv('ROS_IP','WINDOWS_PC_IP');
rosinit
*The value of the ROS_MASTER_URI environment variable, http://UBUNTU_PC_IP:11311, is an invalid URI.
Check the URI for correctness.*
As the same, direct IP configuration for setenv() in MATLAB doesn't work.
How to check that my host names resolved right if not with resolvehost? Hope anyone faced the same issue.
2 Comments
Pavel Roslovets
on 8 Nov 2017
Try to remove underscores from host names:
setenv('ROS_MASTER_URI','http://UBUNTUPCIP:11311');
setenv('ROS_IP','WINDOWSPCIP');
rosinit
Don't forget to do it in host file
Ilya Boyur
on 6 Dec 2017
Thanks, Pavel, removing underscores in hosts file resolved the issue.
sarra elghali
on 13 Mar 2018
0 votes
Hi everyone,I ahd the same problem with Windows 10 (MATLAB 2017a) and Ubuntu 16.04 amd64 ROS Kinetic. I did fellow all the steps. (for my windows IP adress, I'm not sure if i should take IPv4 Address or default Gateway)
setenv('ROS_MASTER_URI','http://192.168.65.82:11311') >> setenv('ROS_MASTER_URI','http://192.168.65.82:11311') >> setenv('ROS_IP','192.168.65.80') >> rosinit *The value of the ROS_MASTER_URI environment variable, http://192.168.65.82:11311, will be used to connect to the ROS master. The value of the ROS_IP environment variable, 192.168.65.80, will be used to set the advertised address for the ROS node. Initializing global node /matlab_global_node_67130 with NodeURI http://192.168.65.80:50121/*
Now, when I try to get message using this commande msgg=receive(hw,10) // hw is the name of my subscriber i got this error : Error using robotics.ros.Subscriber/receive (line 325) The function did not receive any data and timed out.
Can anyone help me please ?
2 Comments
Ilya Boyur
on 14 Mar 2018
Hi, Sarra Elghali, check first connection between computers/systems running ros:
- simple command line ping, MATLAB !ping
- rosnode ping - from MATLAB and from actually ros-running linux
If there are any problems - check your network - all nodes should be also in same network submask (f.e. 255.255.255.0, than node with ROS_IP 192.168.1.2 will publish to 192.168.1.5 and will not publish to 192.168.5.5). Then, let's see what you have.
sarra elghali
on 14 Mar 2018
Hi, thanks for your replay, My ROS_IP is 192.168.65.80 and ROS_MASTER_URI is 192.168.65.82, they alreday have the same Mask. when I use !ping 192.168.65.82 in matlab command window, It's ping to that adress successfully. you can see here , I even got a no error when I connect to ROS master
[name, address] =resolvehost('WindowsPCIP')
name =
'windowspcip'
address =
'192.168.65.80'
>> [name, address] =resolvehost('UbuntuPCIP')
name =
'ubuntupcip'
address =
'192.168.65.82'
>> setenv('ROS_MASTER_URI','http://ubuntupcip:11311') >> setenv('ROS_IP','windowspcip') >> rosinit
The value of the ROS_MASTER_URI environment variable, http://ubuntupcip:11311, will be used to connect to the ROS master. The value of the ROS_IP environment variable, windowspcip, will be used to set the advertised address for the ROS node. Initializing global node /matlab_global_node_09027 with NodeURI http://windowspcip:49943/
But I still got an empty msg from my subscriber
hw_status =
Subscriber with properties:
TopicName: '/Niryo_one/hardware_status'
MessageType: 'niryo_one_msgs/HardwareStatus'
LatestMessage: [0×1 HardwareStatus]
BufferSize: 1
NewMessageFcn: []
>> hwmesg=rosmessage(hw_status)
hwmesg =
ROS HardwareStatus message with properties:
MessageType: 'niryo_one_msgs/HardwareStatus'
Header: [1×1 Header]
RpiTemperature: 0
ConnectionUp: 0
ErrorMessage: ''
CalibrationNeeded: 0
CalibrationInProgress: 0
MotorNames: {0×1 cell}
MotorTypes: {0×1 cell}
Temperatures: [0×1 int32]
Voltages: [0×1 double]
HardwareErrors: [0×1 int32]
In Ubuntu, I already run those command
export ROS_MASTER_URI=http://UbuntuPCIP:11311
export ROS_IP=UbuntuPCIP and I added in /etc/hosts file 192.168.65.82 UbuntuPCIP 192.168.65.80 WindowsPCIP
My ros nodes in Ubuntu_Pc run at start_up,automatically but I don't this is may cause problems.
alisha
on 11 Jul 2023
0 votes
Appreciate everyone's help. Flappy Bird
Categories
Find more on Network Connection and Exploration in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!