(!) 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

Wiki: eros/Tutorials/Installing with Unison (last edited 2010-12-21 00:31:10 by DanielStonier)