roslaunch on slave
Hi!
I'm having difficulties running a node using roslaunch on a slave machine. I need it for the launch-prefix that allows me to run a node with superuser privileges (my node is written in C++ for doing that easier then with Python) in order to access a GPIO on my Rasperry Pi 2 using the wiringPi library. Here's the setups:
MASTER (Debian Jessie with Indigo):
Inside .bashrc:
export ROS_IP=192.168.1.101
export ROS_MASTER_URI=http://192.168.1.101:11311
source /opt/ros/indigo/setup.bash
source ~/catkin_ws/devel/setup.bash
SLAVE (Raspbian Wheezy with Indigo):
Inside .bashrc:
export ROS_IP=192.168.1.102
export ROS_MASTER_URI=http://192.168.1.101:11311
source /opt/ros/indigo/setup.bash
source ~/catkin_ws/devel/setup.bash
Using rosrun everything works fine. I tried launching a subscriber/publisher on my master and then started a publisher/subscriber on my slave. Roscore on the slave didn't start since the master's running roscore was detected (which is what is expected in this situation) and the node launched transmitting/receiving messages to/from the master.
roslaunch however doesn't understand what ROS_MASTER_URI is hence the need to use the <machine/>
tag inside the launch file of my slave's node. Here is what I have (after multiple tries):
<launch>
<!-- <machine name="raspberry" address="localhost" env-loader="/opt/ros/indigo/env.sh"/> -->
<machine name="raspberry" address="192.168.1.102" env-loader="/opt/ros/indigo/env.sh"/>
<node machine="raspberry" pkg="blinky" name="blinky" type="blinky" launch-prefix="sudo"/>
</launch>
And of course it doesn't work...Here is the error:
... logging to /home/pi/.ros/log/a01e59f0-4b65-11e5-8f91-5442496dee48/roslaunch-raspberrypi-5408.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://192.168.1.102:33999/
SUMMARY
PARAMETERS * /rosdistro: indigo * /rosversion: 1.11.13
NODES / blinky (blinky/blinky)
ROS_MASTER_URI=http://192.168.1.101:11311
core service [/rosout] found process[blinky-1]: started with pid [5423] [FATAL] [1440540133.302859881]: ROS_MASTER_URI is not defined in the environment. Either type the following or (preferrably) add this to your ~/.bashrc file in order set up your local machine as a ROS master:
export ROS_MASTER_URI=http://localhost:11311
then, type 'roscore' in another shell to actually launch the master program. [blinky-1] process has died [pid 5423, exit code 139, cmd sudo /home/pi/catkin_ws/devel/lib/blinky/blinky __name:=blinky __log:=/home/pi/.ros/log/a01e59f0-4b65-11e5-8f91-5442496dee48/blinky-1.log]. log file: /home/pi/.ros/log/a01e59f0-4b65-11e5-8f91-5442496dee48/blinky-1*.log all processes on machine have died, roslaunch will exit shutting down processing monitor... ... shutting down processing monitor complete done
Setting up ROS_MASTER_URI to localhost will not allow me to run nodes in "slave mode" (that is - remote master's roscore will be worth jack squat on my RPi2). I'm missing something but what exactly I cannot tell. I checked and double checked the network setup article, the documentation on ROS_IP, ROS_MASTER_URI, roslaunch etc.
Are you able to launch a node on master machine from a launch file? I am able to launch a node on the slave but not on the host, using ROS Indigo .
I have resolved my problem weeks ago. I found a neat way to surpass the superuser privilege restriction by tinkering with the wiringPi library, which is the much better solution. Thanks for posting an answer though. Will check it out whenever I get the time.