Ask Your Question
0

Best way to organise ROS-based platform?

asked 2019-05-24 21:50:28 -0500

TimeEscaper gravatar image

Hello!

Recently we developed some software for robotics competition using ROS. To efficiently reuse our existing code base in different future competitions, we decided to split our software on two parts: common platform that will provide interaction with hardware, API and tools, and the second parts are competition-specific repositories that will contain missions logic and will use described platform.

The problem is how to share common parts of the platform like message/services/actions definitions and API classes between platform itself and competition-specific projects. For now, I found three possible solutions:

1) Include the platform implementation as a git submodule in every competition-specific project. So hacky way, especially because we already use some git submodules of third-party projects.

2) Split the platform on two repositories: one for common part (messages, API classes) and the second is platform implementation itself

3) And maybe the cleanest way - build and install platform packages locally and make it be visible system-wide like they were installed via apt-get. But we haven't manage to do it yet.

Has anyone faced similar problem? Or anyone can share best practices? And are there any ways to realise the third described method?

edit retag flag offensive close merge delete

Comments

The problem is how to share common parts of the platform like message/services/actions definitions and API classes between platform itself and competition-specific projects

This may be me (as it's clear you see one), but could you please clarify what the problem is? If you're using several packages already and they're setup somewhat sensibly, splitting common parts from application-specific parts should not be that much of an issue.

Are you particularly worried about deployment, setting up development environments or something else?

gvdhoorn gravatar imagegvdhoorn ( 2019-05-25 02:58:37 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2019-06-06 09:27:32 -0500

ChuiV gravatar image

Assuming you're asking about best deployment strategies.

For us, we have a CI server that builds all our ros packages and zips the contents of the install directory into a build artifact. In projects that depend on that package, you can use something like vcstool to specify what packages to download, where to extract them to etc. This way you can provide a url to where your build artifact is and they can download it and extract it to the install directory

For item #3, when you run catkin_make install it will (assuming your CMakeList.txt is configured properly) put build files into a install folder. You can copy the contents of that install folder and distribute that as needed. To use else where, you can merge the install folder from your common package with the install dir in your competition install dir. Be sure to source the install directory instead of the devel directory.

edit flag offensive delete link more

Your Answer

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

Add Answer

Question Tools

2 followers

Stats

Asked: 2019-05-24 21:49:54 -0500

Seen: 95 times

Last updated: Jun 06