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

Why can't catkin depend on rosbuild?

asked 2013-06-24 22:25:55 -0500

liborw gravatar image

This is more a philosophical than technical question. I would assume that if someone wants to introduce a new tool and make people to use it, he would make the switch as easy as possible. I think that opposite is the case.

Assume I'm a developer of a ROS package. My package depends on some third party packages. Now, catkin comes and I want to keep up with the ROS development, so I decide to switch. However, Groovy where catkin is introduces is full of rosbuild packages (OK I know about one, but thats enough), so I'm going back to rosbuild.

The package which stop me from using catkin was SMACH, which is dry in groovy on Ubuntu 12.4.

Maybe I'm not getting something or have wrong catkin workflow, so please correct me if there is a way how to use catkin in groovy.

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2013-08-12 12:03:25 -0500

tfoote gravatar image

As @dornhege mentioned we provided backwards compatibility such that rosbuild packages can depend on catkin packages. To do this a lot of effort went into catkin to emulate what rosbuild expects.

catkin has been designed from the ground up with cleaner dependencies and have capabilities which were missing in rosbuild. As such catkin tracks a lot more information than rosbuild does and as such you cannot cleanly build catkin packages on top of rosbuild packages. Furthermore to enable catkin to build on top of rosbuild packages you would need to depend on rosbuild and it's entire infrastructure, which was part of the reason for the redesign. This leads to a circular dependency. With catkin at the bottom we can have the cleaner system at the core and it can work it's way up through the dependency tree. As we progress through the system rosbuild will be phased out and once you have transitioned across the boundary rosbuild will no longer effect your development.

The other approach would be to work from the leafs inward, but that's much worse as it would require the leaf nodes to work in lockstep instead of the core. Where leaf packages are potentially unreleased and unlisted.

edit flag offensive delete link more

answered 2013-06-24 23:21:00 -0500

dornhege gravatar image

I'm not sure about the technical side, but I'd assume if that would have been easy it would have been done. Now on the philosophical side: Given that rosbuild and catkin need to be somehow compatible (otherwise all packages would have to switch at once) and assuming there is only time to implement one direction, then as it is this is the better alternative.

rosbuild can depend on catkin. This means whenever a package is catkinized it will still work with catkin (obviously) and it will continue to work with rosbuild or in other words: Going ahead in catkinizing never destroys anything.

The issue that you are facing is thus somewhat safe: You see now that it doesn't work from your dependencies, but you can still build your package in rosbuild. If it were the other way around then catkinizing a package might destroy some dependent packages that you even don't know about.

As to why not both ways work, I think that's mainly technical reasons.

edit flag offensive delete link more


I understand why there is the rosbuild -> catkin compatibility. Maybe that there is no other way round shows that catkin was released too early. There should be at least warning "Do not move to catkin unless certain that no dependency uses rosbuild."

liborw gravatar image liborw  ( 2013-06-25 00:17:12 -0500 )edit

I'm not sure if it was released to early as I fear there never will be or was planned backwards compatibility to rosbuild. As to the warning: Yes, I agree, that should be somewhere, although I don't know where the best place would be. I guess many people including myself have stumbled upon that.

dornhege gravatar image dornhege  ( 2013-06-25 00:47:58 -0500 )edit

Question Tools


Asked: 2013-06-24 22:25:55 -0500

Seen: 585 times

Last updated: Aug 12 '13