Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Installing with Unison
Description: This tutorial covers a simple method to filter (create binary images) and deploy ros stacks to an embedded board or a fakeroot.Keywords: install uninstall deploy
Tutorial Level: BEGINNER
When to do this?
Do this when you want to:
- Create a binary image of an ros tree.
- Compiling on the embedded board is too slow/impossible.
Unison
Unison is a 3rd party application (with gui frontend, usually named unison-gtk) that uses rsync under the hood to intelligently manage synchronisation between two roots. Its terribly useful and can be found in most linux distro repositories. Features:
- Two-way synchronisation.
- Only transfers updated files/directories.
- Works locally or over an ssh connection (also rsh,...).
- Can set global filtering rules to ignore various paths/dirs.
Root Locations
Ros binaries use rpaths to find libraries, so your build host and embedded board should install the ros tree to the same location locally and remotely. To this end, we usually maintain a separate ros installation for each of our robots in a different directory. e.g. Yujin's korus robot is built under /opt/korus and also installed in /opt/korus.
Usage
- Create a profile (see example below).
Run unison _my_profile_.
- Check that there's no strange conflicts (those indicated with a ?).
- Anything marked with a ? will manually need the update direction set.
- Update
It's pretty smart, conflicts wont happen that often unless you're updating from multiple sources (e.g. your team).
First time will take a while to copy, but once done, you can do minor development changes, hit unison's refresh and update with just a single click. And if you filter intelligently, you'll save bandwidth and transfer time.
Example Unison Profile
The following profile is for Yujin Robot's korus robot and saved in ~/.unison/korus.prf. It synchronises files across an ssh connection between the ubuntu build host and an intel atom embedded board.
###################################################### # Roots ###################################################### # Build root root = /opt/korus # Ssh root - exchange ssh keys to avoid passwords root = ssh://yujin@192.168.3.80//opt/korus # A fakeroot. Useful alternative to above if you want # to filter and tarball a binary image of your stacks. # root = /tmp/opt/korus ###################################################### # Paths ###################################################### #path = setup.sh path = ros path = stacks path = ycs path = ecl ###################################################### # Ignores ###################################################### # Filters for a binary like installation of your trees. # Currently the ignore for build directories may # break with some ros packages that export stuff in # the build directories (usually 3rd party packages). # That sort of practice is getting discouraged, but # just beware if something doesn't copy correctly. ignore = Name *.pyc ignore = Name .svn ignore = Name *.o ignore = Name *.cmake ignore = Name *.cpp ignore = Name *.hpp ignore = Name *.h ignore = Name *.c ignore = Name *.make ignore = Name *.log ignore = Name build ignore = Name CMakeFiles ignore = Name .cproject ignore = Name .project