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

To be or not to be Catkin?

asked 2015-05-21 08:00:54 -0500

kleinash gravatar image


I really need help sorting a rather large question.

As ROS continues are you going to be sticking with Catkin or moving to something else? And what would that something else be? I happen to like Catkin so I would prefer the former. But someone said to someone at some conference that you will be moving away from Catkin, which is why I can't upgrade all of our packages, in our project, to be Catkin (which is what I was really hoping to do).

Much appreciated.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2015-05-21 11:11:08 -0500

Dirk Thomas gravatar image

If your current packages are using rosbuild you should really consider updating to catkin.

While the goal is to keep rosbuild working there are e.g. issues on Ubuntu 15.04 and newer with the way it works. Changes in upstream code broke it and there will only be a partial workaround to keep it working in most use cases. rosbuild is not actively maintained anymore and if for some reason it will break again in the future it might be beyond repair.

Another reason might be that you won't ever be able to release your packages when they are based on rosbuild.

Now to your main question: ROS 1 is using catkin since Groovy and there is no plan to change that again.

What you might have heard are information about the ROS 2 development. That indeed uses something which is called differently: ament. But ament is basically an updated version of catkin - you could call it catkin 2.

A different name was chosen for multiple reasons:

  • The so called devel space in catkin was almost impossible to use when scaling a workspace up to hundreds of packages. Therefore that feature has been removed from ament. But the advantage of having a devel space (by not copying resources when running your code) has been preserved using a different approach (namely symlinked installs).
  • Python packages containing a require to be wrapped in CMake in catkin. In ament they do not anymore and are being processed with the "native" Python tools directly.
  • Some API changed slightly, e.g. some functions in catkin specify implicit target names (which could be considered magic) and ament is more clear about that by specifying them explicitly. Some of the catkin API was developed with rosbuild in mind and some of these design choices should have better been revised.
  • The order of some function calls needed to be changed to support currently not possible use cases. One example if the package catkin_simple which was an attempt to ease writing CMake code for ROS packages. It was never announce since it had fundamental flaws which couldn't easily be address with the way catkin works.

But ultimately catkin and ament are very similar. catkin will be used for ROS 1 and ament for ROS 2. There is no plan to "backport" ament to ROS 1 and also no plan to support catkin for ROS 2.

Therefore I would highly recommend to update your code base from rosbuild to catkin. A potential step towards ROS 2 in the future will require you to update more of your code. The changes to the CMake files should be very simple at that point.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2015-05-21 08:00:54 -0500

Seen: 424 times

Last updated: May 21 '15