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

Redistribute ROS-based library

asked 2012-10-07 10:18:06 -0500

TiagoRibeiro gravatar image

updated 2014-01-28 17:13:52 -0500

ngrennan gravatar image

Breaking up several questions I asked here:

Issue #4: Last but not least, and this is really important on our final decision of using ROS or not: Me and my colleague are building and linking together a bunch of independent modules that provide behavior and expressivity control to characters independently of their mind or body, so our packages will be used to link different minds to different robots, and even to virtual characters in Unity3D.

The purpose of this is that anyone in our research lab that needs a character can use our stuff.

So even if we get this working, will we be able to redistribute our libraries running over ROS easily to someone who isn't familiarized with ROS, but just wants to use whatever we build over it?

I think this is an important question regarding my vision on the whole purpose of ROS: everything looks and works great, but it's a pain to install and setup. It definitely looks like something I don't want to depend on if I'm developing stuff for other people to use. And it is definitely something that would make me think twice before using something that depended on it - especially if I just develop cultural agents that just smile and run around inside a Unity3D scene and someone just says "hey I have this stuff here that will look great on your character, you just have to spend a couple of days going through this whole process of getting ROS to run on your machine/OS"

Is there any guide or workflow for redistributing a ROS-based library/application?

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted

answered 2012-10-09 14:18:35 -0500

SL Remy gravatar image

It seems that you would be better served if you first develop an API that is subsequently used with a light ROS wrapper to manage messaging and other housekeeping.

I do not know your code but when I hear "link different minds to different robots", it sounds like you would have to define and effective abstraction for the mind software that you are developing. This has nothing to do with ROS, and if you wanted to share your code, you would face the same issue if developing this application for Unity, Second Life, or any other tool/environment.

The language, and the framework you use to structure your project also will impact how easy it will be to use in other languages/distros/etc.

Things to consider as well: Do you plan to develop something that plays nicely with SWIG? Can you develop a C library that could be imported with ctypes (python), or LoadLibrary (Java)? What are the languages that are required by the tools you'd like to develop for? Do you know the places that useful methods like sleep() or say() are defined?

At the end of the day, it comes does to what are you willing to do, and how much you (plan to) understand about the potential users of your API.

Just my 2 cents. I really hope it helps.

edit flag offensive delete link more

answered 2012-10-09 00:59:47 -0500

KruseT gravatar image

If you create a ros-based c++ library or app, you can redistribute it the same ways you can redistribute any other c++ library/app. The same goes for ros-based PYTHON libraries or apps.

Many ROS packages are redistributed as Debian packages for Ubuntu, which seems the easiest way for the open-source robotics community.

If you think the dependency to ROS would be a disadvantage for your library because of installation troubles, your alternative is to use a messaging library with better support for automated installation on multiple operating systems.

edit flag offensive delete link more

answered 2012-11-02 10:29:18 -0500

TiagoRibeiro gravatar image

Sorry I guess the mechanism on this forum makes it difficult to vote on your thoughts, I can only accept one of you as answers, while there is actually no real answer - only discussion and ideas on this.

As to KruseT's answer, yes, I understand how people have been distributing, but my issue is that most users of our framework won't be people from robotics - we want this also for virtual agents, and that's where this issue comes from.

However, we also want to work with robotics people, so the problem is on finding something that can easily be placed between both the high-level agent developers, and the robot programmers.

That actually leads me to trininghost's answer. That is what I am trying to do now. As most of our work is based on C# running in OSX and Windows, I am trying to build a dotnet library in windows that uses roscpp to connect to ROS - that way I can build my framework to communicate through this dotnet dll, and other people can also build their modules in python or c++ and have everything connected anyway.

Currently I'm just having some troubles compiling the c++ code into a class, but I believe I'll eventually get through it, so then I just have to check if I can get this compiling in OSX (or plan B - make an OSX version).

I guess that although the installation stuff might be an issue, it would be really positive for us to use ROS as that makes it possible to collaborate with other people who are using it. So I'm keeping that as long as I can get the communication mechanisms running clean out of C#, we'll stick with it.

Then if I plan on distributing it to someone, I just have to figure out what do I actually need to include in my distribution, and pack everything up, even if it takes up several houndreds of MB.

Thanks to both for your considerations on this! Cheers.

edit flag offensive delete link more

Question Tools


Asked: 2012-10-07 10:18:06 -0500

Seen: 475 times

Last updated: Nov 02 '12