Communicate with ROS in WSL2
112 views (last 30 days)
I am using MATLAB 2020a on Windows 10, v2004 with WSL2 Ubuntu 20.04.
I am having trouble communicating between Ubuntu using WSL and Matlab on Windows. I build ROS nodes on both Ubuntu and Matlab.
TRYING TO GO FROM WSL2 UBUNTU TO WINDOWS:
I ran the basic publisher (talker.py) in Ubuntu. Within WSL2 Ubuntu, I have no issues seeing /talker.
In Matlab, I run
rosinit % run once only
python_talker = rossubscriber('/chatter','std_msgs/String');
but the /chatter message is empty.
TRYING TO GO FROM WINDOWS TO WSL2 UBUNTU:
Similarly, if I start in Matlab with
matlab_talker = rospublisher('/matlab_chatter','std_msgs/Float64MultiArray');
matlab_message = rosmessage( matlab_talker );
while toc < 10
matlab_message.Data = [toc , 1 , 2 , 3 , 4 ] ;
send( matlab_talker , matlab_message )
I can see that the /matlab_chatter node exists in Ubuntu, but it's also empty:
$ rostopic list
$ rostopic echo /matlab_chatter
% no output
This all works if I'm running pure Ubuntu. Any ideas on troubleshooting WSL2 inter-connectivity?
MathWorks Robotics and Autonomous Systems Team on 3 Dec 2021
Edited: MathWorks Robotics and Autonomous Systems Team on 3 Dec 2021
To communicate between WSL2 ROS and MATLAB/Simulink, you would need to make sure the environment variable "ROS_IP" being set correctly on both MATLAB and WSL2 sides. Otherwise, it might ended up getting only part of working functionalities. Below are steps to get this work. Feel free to skip directly to Step 3 if you already have WSL2 enabled and ROS Noetic installed on WSL2.
Step 1: Enable WSL2 on Windows
You may follow this offical link to install WSL2 on windows, I would recommand using Ubuntu20.04 and ROS Noetic if you would like to use Gazebo in your project later on.
Step 2: Install ROS/ROS 2 on WSL2
You may follow this ROS tutorial to install ROS Noetic on WSL2. You may install ROS 2 following this tutorial instead.
Step 3: Configure Environment Variables
To make sure specific URI is known for both side of ROS (ROS NetworkSetup wiki), you can either use the automatic configuration function or set it up by yourself.
(Note that you need to enable ssh on WSL2 for running this script. Refer to this article on enabling ssh on WSL2.)
1. Type in "$ifconfig" on WSL2 Terminal, look for "inet" under "eth0". This will be your WSL2 IP Address.
2. Download configureWSL2.m for attachment and launch MATLAB.
3. Call "configureWSL2" with IP Address, Username, Password of your WSL2 as input. This function will setup all required environment variables for you. Note that it assumes you have installed ROS Noetic on Ubuntu20.04. If you installed different version of ROS or installed it in another directory other than the default directory, you may need to modify the "ROSPath" variable in the function.
Manually set it up:
1. Type in "$ifconfig" on WSL2 Terminal, look for "inet" under "eth0". This will be your WSL2 IP Address. Set this on WSL2 side (e.g. $ export ROS_IP=xxx.xxx.xxx.xxx)
2. Type in ">ipconfig" on Windows Command Prompt and find IPv4 Address under "Ethernet adapter vEthernet (WSL)". Set this on MATLAB side (e.g. >> setenv('ROS_IP','xxx.xxx.xxx.xxx'))
Step 4: Visualization with Gazebo and Rviz
To run GUI applications such as Gazebo and Rviz and bring them to your windows desktop, you need to install X server on Windows, such as VcXsrc.
If you already run "configureWSL2.m" in Step 3, all you need to do is launch "Xlaunch" (VcXsrv) and type in "$gazebo" on WSL2 terminal.
As an alternative, you may also set environment variables manually referring to this video.
Hope this helps,
MathWorks Robotics and Autonomous Systems Team