Ask Your Question

managing projects using catkin and wstool

asked 2014-09-24 06:20:54 -0500

jespestana gravatar image

Hello everyone,

I would like to have advice on how to manage a family of packages in various robotics projects. I have already gathered information about alternatives, including: catkin + wstool, git-submodules, git-subtrees, and other software management options. I think that these links summarize the options:

In my research group, we have worked on various ROS and non-ROS Robotics projects in the last few years, and naturally we have modules which are used in many of these projects at the same time. Until now, our code management approach was to have everything in a single git repository (there are 40+ ROS and non-ROS packages, as we try keep granularity/modularity in our libraries and executables). As we are updating our source structure to be catkin compliant, we are also thinking on separating our git repository into chunks (no necesarily at the package level). We hope that by managing our projects diferently we won't need to download our whole software repository in every platform.

I believe that catkin + vcstools/wstool are a very good solution since:

  • They are both independent of the ROS ecosystem: check section 2.2 here , and this
  • Catkin can manage build/compilation dependencies
  • wstool allows to set the git repository for modules/packages inside the workspace, including specifying a branch or a specific commit
  • also: wstool update, wstool diff, [...] are very useful

So, my questions are relating to the usage of catkin and wstool outside of the ROS ecosystem:

  1. How can I create a catkin workspace outside of the ROS ecosystem? From what I understand, creating a workspace requires to load the setup.bash of a ROS dristro.
  2. Any advice of a different set of tools which is suitable for working in ROS-like projects, where many modules are reused between projects?
  3. As a side question regarding the use of catkin + wstool + rosdep : Is it possible to overlay rosdep's package lists with private repositories?

Thanks for your advice!

edit retag flag offensive close merge delete



Just to add to @Dirk Thomas's answer, there is also a new effort to replace rosdep with a more ros agnostic tool called xylem: recently did a GSoC working on the project and it is in pretty good shape but needs some more work.

William gravatar image William  ( 2014-09-24 11:46:44 -0500 )edit

The ultimate goal would be to have a complete set of ros agnostic tools like wstool, catkin, and xylem. The tools that are still ROS specific in some way are python-rosdistro (python api for interaction with ros/rosdistro), bloom, and rosinstall_generator.

William gravatar image William  ( 2014-09-24 11:47:50 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2014-09-24 11:07:12 -0500

Dirk Thomas gravatar image

updated 2014-09-24 11:14:06 -0500

To answer your direct questions first:

  1. Any folder which contains one or many package.xml files somewhere below can be compiled with catkin_make / catkin_make_isolated. Sourcing the setup.bash from the ROS distro is only necessary for you to get catkin on the PATH and PYTHONPATH. As an alternative you could place a checkout of catkin into your workspace and invoke the commands from there directly.

  2. Your summarized options are all fine and the choice is mostly depending on your personal preference. I for myself use vcstool to manage my repositories. It is very similar to wstool. The two major differences are:

    • it does not require a configuration file, it simply operates on your filesystem
    • you can export a set of repositories into a file (similar to a .rosinstall file), you can import a file which clones all the specified repos (this accepts the file format generated by export as well as .rosinstall files)
    • it is completely independent from ROS (wstool is not really since it has catkin-specific options)
    • it provides some advanced features making it more efficient to use for me when working with many repos (e.g. vcs diff shows the diff for multiple repos, vcs log --limit-untagged all commits in multiple repos since they have been tagged the last time)
  3. You would need a fork of the repository specifying the rosdep mappings ( ) and use that by setting the ROSDISTRO_INDEX_URL to a custom location. You would then need to keep it in sync with upstream (if you care) which might result in conflicts from time to time when you have changes on-top of it.

edit flag offensive delete link more



Comment on point 2., the OP pointed out that he liked the update and diff tools in wstools which has not equivalent that I know of in vcstool.

William gravatar image William  ( 2014-09-24 11:40:05 -0500 )edit

Comment on point 3., the idea of _extending_ the rosdistro rather than forking it is not a new idea, but nothing has been done about it yet:

William gravatar image William  ( 2014-09-24 11:42:58 -0500 )edit

Wow, thanks a lot for this answer! Then: catkin + vstools is a good option, I'll try it out soon! As a side note, it would be really worth it that there was a tutorial on how to use catkin outside of the ROS ecosystem (I tried to find it).

jespestana gravatar image jespestana  ( 2014-09-25 02:55:34 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2014-09-24 06:20:54 -0500

Seen: 3,233 times

Last updated: Sep 24 '14