Yes, it’s several years since I last posted anything. But I think this might conceivably be useful for somebody, in a very specific set of circumstances.
Install ROS and baxter emulator on WSL
This is a fairly detailed set of steps to install ROS Noetic and the Baxter SDK and its 3d graphical emulator on a Ubuntu system running in Windows, to allow development of ROS applications for Baxter without a real robot. It’s mostly written down to help me remember the steps I had to go through to get everything working with WSL and Noetic even though the Baxter SDK has been prtty much abandoned and doesn’t support newer versions of ROS. It’s actually not that hard, but there area a lot of steps. I hope you find it useful.
Some of this comes from Setting up ROS in Windows through WSL2, and some from Baxter workstation setup, and more from Github. Other bits I’ve worked out through trial and error and a number of web searches.
I’m assuming you already have the Windows Subsystem for Linux version 2 (WSL2) installed on your windows PC. If not, then this won’t be much use. I’m also assuming you have a Ubuntu distro installed (I’m using 20.04) and the Windows Terminal as an interface to it.
Install X VxXsrv server to allow gui apps
VxXsrv is an XWindows server program which runs in windows, so the WSL Ubuntu instance can use it as a front end for graphical applications. It works really well.
NB: This bit is done in Windows.
From sourceforge download the installer and run it. When the install is complete, run VxXsrv and on its first run make sure ‘Native OpenGL’ is not selected, and ‘Disable access control’ is selected. Save the config for future runs.
ifconfigto find the ip v4 address of the the windows machine, because you’ll need it for the next step (in WSL)
From here on, work in your Ubuntu instance through the Windows Terminal
Configure display in WSL to use X server
Add the display config to your bash script
echo 'export DISPLAY=999.999.999.999:0.0' >> ~/.bashrc
Replace 999.999.999.999 with the ipv4 address you found in the previous step. Note that this may change if you are on a wifi network, and it will need to be reconfigured every time it does.
Make the config active
Optional: test the x server
sudo apt update sudo apt install x11-apps xcalc
If all is well, you’ll see the xcalc running in an X window on your windows desktop
Make sure everything is up to date
sudo apt update sudo apt upgrade
Add ROS package information to sources list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
Add the keys to allow these extra sources to be used. Install curl if it’s not already present, then use it to download keys
sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update
Install ROS Noetic:
sudo apt install ros-melodic-desktop-full
Prepare for ROS use by configuring bash script
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
Install development packages
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
When it’s done
sudo rosdep init rosdep update
roscore & rosrun rviz rviz
Create ROS workspace
mkdir -p ~/ros_ws/src
Source ROS and build
Build and Install
cd ~/ros_ws catkin_make catkin_make install
Install Baxter SDK
cd ~/ros_ws/src wstool init . wstool merge https://raw.githubusercontent.com/RethinkRobotics/baxter/master/baxter_sdk.rosinstall wstool update
Source ROS setup
Build and install
Be prepared for this to fail with errors!
cd ~/ros_ws catkin_make
Don’t worry. Because we are now using Python 3, some of the scripts need a bit of tweaking because they are using Python 2 syntax.
~/ros_ws/src/baxter_interface/src/baxter_interface/robot_enable.py, find a line which says
except OSError, e:
and change it to
except OSError as e:
Then try again:
cd ~/ros_ws catkin_make catkin_make install
Set up ROS workspace
Download the baxter.sh script. This will set the right parameters for ROS to communicatwe with the (emulated) robot.
$ wget https://github.com/RethinkRobotics/baxter/raw/master/baxter.sh $ chmod u+x baxter.sh
Customize the baxter.sh script
Edit the baxter.sh shell script making the necessary modifications to describe your development environment. In WSL, th linux system will probably have a different IP address to the windows PC hosting it. This is absolutely fine for the baxter simulator, but you need to know what it is. The
hostname comand will tell you:
Using your favorite editor (you’ve got an X server now, so you could use xedit) edit ~/ros_ws/baxter.sh and make the following changes:
Edit the ‘baxter_hostname’ field
Edit the ‘your_ip’ field. Modify where ‘your_ip’ is the IP address of your PC.
Modify ‘ros_version’ to noetic:
Save the file.
Initialize your SDK environment
From this point forward, your ROS environment setup should be as simple as sourcing the baxter.sh script from the root of your Catkin workspace:
cd ~/ros_ws . baxter.sh
"Should". What a great word.
Getting it all to work
Install the baxter simulator
cd ~/ros_ws/src git clone https://github.com/RethinkRobotics/baxter_simulator.git wstool merge baxter_simulator/baxter_simulator.rosinstall wstool update
Install other dependent packages:
cd ~/ros_ws/src git clone https://github.com/ros/xacro.git -b noetic-devel git clone https://github.com/ros/roslint.git
Expect this to fail!
source /opt/ros/noetic/setup.bash cd ~/ros_ws catkin_make
The emulator uses the Qt4 user interface library, but this has been superseded by Qt5 and is not installed by default. So it needs to be manually added (unless you fancy editing all the files which use it and converting them to Qt5). We need to use a third party PPA to do this:
sudo add-apt-repository ppa:rock-core/qt4 sudo apt update sudo apt install qt4-default
And once again, it will fail. There appear to be loads of errors, but in fact there are only two files which need to be edited:
Edit the lines which says
boost::shared_ptr<const urdf::Link> link = robot_model.getLink(tip_name); boost::shared_ptr<const urdf::Joint> joint;
to read as follows (i.e. replace the reference to the
boost libraries with the
std::shared_ptr<const urdf::Link> link = robot_model.getLink(tip_name); std::shared_ptr<const urdf::Joint> joint;
Edit the lines which says
cv_ptr->image = cv::imread(img_path, CV_LOAD_IMAGE_UNCHANGED);
to read as follows (updateing to match changes in the OpenCV library).
cv_ptr->image = cv::imread(img_path, cv::IMREAD_UNCHANGED);
catkin_make again, and assuming it works (you might get some warnings, but you can ignore them) do
catkin_make catkin_make install
Time to try it out
Use the baxter.sh script with the ‘sim’ parameter to set up parameters for simulation rather than a real robot.
cd ~/ros_ws .\baxter.sh sim roslaunch baxter_gazebo baxter_world.launch
And it fails again. This time it’s a ROS launch file which needs modifying to use
xacro instead of the old
xacro.py. Edit the file
~/ros_ws/src/baxter_simulator/baxter_gazebo/launch/baxter_world.launch and change the section below
<param if="$(arg load_robot_description)" name="robot_description" command="$(find xacro)/xacro.py --inorder $(find baxter_description)/urdf/baxter.urdf.xacro gazebo:=true"/>
removing the ".py" from the xacro command:
<param if="$(arg load_robot_description)" name="robot_description" command="$(find xacro)/xacro --inorder $(find baxter_description)/urdf/baxter.urdf.xacro gazebo:=true"/>
That’s it. You sould be good to go, now. Run the following command
roslaunch baxter_gazebo baxter_world.launch
And you should see Gazebo fire up, with a model of Baxter in it, and also a window showing emulations of the arm and body control dials and buttons. Note that these are running alongside any other Windows apps! It’s a bit like magic.
You can now open otehr Windows terminal sessions to the same Ubuntu instance and run other ROS nodes to control the simulated robot. As with a real robot, you need to enable it using the
enable_robot script fromt eh
baxter_tools package before it will do anything. You can also run the standard sample demos, e.g. the arm wobbler:
./baxter.sh sim rosrun baxter_examples joint_velocity_wobbler.py
Though you might need to edit the first lines of python files to ue Python3 instead of python or python2. And in enable_robot.py you’ll need to correct the syntax of an exception handler and a print statement. But they are left as simple exercises for the reader 🙂