ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

How does ros execute my nodes on a remote machine?

asked 2014-03-10 05:29:53 -0500

rilke gravatar image

updated 2014-03-10 05:30:55 -0500

When specifying the machine-tag for a ros-node in a launch-file one is principally able to run a ros-node on any reachable machine in the network that is configured for ros. Do I get this right? If yes, I am wondering about the following questions:

  1. How does this work when I developped the code for my node on machine A and I execute it on machine B. Somehow, the binary must be transmitted, doesn't it?
  2. What happens, if machine B contains a conflicting older version of the same node, which version will be executed?
  3. Given the case that a team of programmers develops ros-nodes on different machines and all nodes are finally executed using a launch-file on another machine - let's name it master-machine - that runs the roscore: Although they merge their changes using a VCS and this could theoretically be checkout and built on the master-machine in advance of every execution of the launch-file, is there a possibility to simply update the code on the master-machine (e.g. using roscp)?

(the wiki told me to include this: )

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2014-03-10 08:52:20 -0500

ahendrix gravatar image

1) ROS assumes that you have your workspace set up on machine B. The remote launch syntax allows you to specify an environment-loader script on the remote machine, which is responsible for sourcing the appropriate setup files to set up your ROS environment on the remote machine. ROS does not transfer any code or binaries to the remote machine.

2) If there is an older version of the node on machine B, it will run the older version.

3) I'm not quite sure I understand what you're proposing.

In short: roslaunch does not copy anything to the remote machine when doing remote launches. It assumes you're keeping your code in sync outside of roslaunch.

I've seen teams and projects do this in two ways:

  • Assuming all of your machines have the same architecture (i386, x86_64, ARM, etc), you can put the shared code onto a shared file server, and run it directly from the file server.
  • Keep code in sync manually, and build on each machine

It sounds like you have a more complex use case than most other users. It may be worth writing some of your own tools and releasing them for the rest of the community once you have something that works well.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2014-03-10 05:29:53 -0500

Seen: 2,701 times

Last updated: Mar 10 '14