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

seperate build and install target machines

asked 2014-09-09 16:48:26 -0500

Jarvis gravatar image

updated 2014-09-09 19:16:11 -0500

ahendrix gravatar image


I am new to ROS community. I have dedicated build server for all ROS packages. Once a package is successfully build I want to transfer only package binaries to target machine. The target machine has ROS installed. Currently I am following approach.

  • catkin_make -install -DCMAKE_INSTALL_PREFIX package_name
  • compress the install directory
  • transfer and decompress the ROS package
  • Update ROS_PACKAGE_PATH on target and
  • rosrun pacakge_name executable

However ROS is failing to locate the package. I am guessing I need to update the scripts setup scripts generated in build process. However, these scripts have hardcoded values of build project path so cannot directly copy paste. I even tried to replace catkin workspace directory path with installed path on target machine. Still rosrun cannot find the package.

Can anyone please guide me in this regard? I am using ROS 1.11.8 on Ubuntu 14.04

edit retag flag offensive close merge delete


Were you able to figure something out?

pachuc gravatar image pachuc  ( 2014-09-16 14:56:08 -0500 )edit

Yes. I have wrote a script to provide this functionality. One requirement for my script to work is to provide install rule for each package and run catkin_make install to build packages. If you need I can upload it in separate GitHub repo and provide link here.

Jarvis gravatar image Jarvis  ( 2014-10-28 12:44:51 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2014-09-19 21:35:14 -0500

Jarvis gravatar image

I have come up with vary ugly way of doing this. On build server I have a script which creates compressed version of package installable. e.g catkin_make install --pkg pkg_name -DCMAKE_INSTALL_PREFIX pkg_install zip -r pkg_install

Now I can copy this compressed package install directory on my target machine. Target machine has the ROS installed but no package source code.

On target machine I have another script which performs following tasks: 1) create a workspace directory 2) create ".catkin" and ".rosinstall" files inside the workspace. (This marks the workspace as catkin_workspace) 3) copy ros setup files from ros_install_directory to worksapce directory This is initialization parts done once per target For per package The package is unzipped in tmp dir The package contents are something like tmp/ros_package/lib tmp/ros_package/share ... Now I copy content of copy tmp/ros_package/lib/* to workspace/lib/<package_name>/ copy tmp/ros_package/share/* to workspace/lib/<package_name>/ ....

This process actually worked. I am able to run newly installed nodes on target without having its source code.

However, the scripts are very complicated and not very easy to maintain.

Can someone suggest a better way?

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2014-09-09 16:48:26 -0500

Seen: 352 times

Last updated: Sep 19 '14