You are on page 1of 24

Software Engineering in Robotics

Packaging and Deployment of Systems

Henrik I. Christensen


Distribution of systems
Packaging and transfer of systems


Many systems are not very portable to new

The challenges are multiple

What is a good way to distribute code?

What are good ways to package code for sharing?
What about all the extra dependencies?

What the tools and mechanisms available to

address this?

Code distribution


RCS Revision Control Systems

SVN Subversion


Sourceforge the open source repository

Codeplex The Microsoft site for Code Sharing
Basecamp is also starting to see traffic (Ruby on
rails type of site)


Tracking revision management of code

RCS the old way of doing revision management


Stores revision info in files (and repository)

Poor handling of revision conflicts (file locking)
Uses DB to store revision information
Without DB difficult to track revisions
Not as easy to tag files
Excellent conflict management for check-in
Has a better network based interface with web

Both have releases and revisions.

Internet repositories

Provides easy organization of projects

Homepage with overview information

Code page repositories
Discussion Forum
Issue Tracker
Major revision management is easy
Easy for use with distributed teams

Internet repositories

Internet repositories

Includes typically mechanisms for

SVN repository across a community

Discussion group for community engagement
Issue tracker

Explicit list with issues and status of addressing these


Some have automated mechanisms for document

Typically using a variation of doxygen


Automatic mechanism for embedding of

documentation in code.
Simple comments allow automated
generation of key documentation
This is not a replacement for design
documents but a nice what to provide detailed
documentation of the actual code
Quite effective for many languages

C++, C#, Java,

Doxygen Process


Direct embedding of comments

* ... text ...

Enable generation of documentation

Has tags that can be used for augment

/*! \class Test

\brief A test class.
A more detailed class description.

Easy to use across systems

Consider migration issues

Moving software between versions.

RDS enable easy migration between versions

DssProjectMigration enables upgrading and
downgrading between versions. Also has
functions for modifying files to match different
versions of Visual Studio Project files.

Relatively easy to migrate between versions

Does 90% of the job

Packaging of files for compatibility

Files are typically packed in archives using

your favorite archive manager.

Tar (Tape archive) -> tar files or compressed tar

Zip -> Zip archives incl winzip/zip/unzip
Jar -> Java Archives similar to tar but with a java

In RDS there is also a dedicated archive

program for DSS application DssDeploy. It
was designed to simplify portability across

Some of the issues

Applications are installed at different locations

C:\users\hic\MSRDS-R2\ or /usr/local/src

Libraries are also installed at different location

Dynamic link libraries will cause headaches

They are term DLLs in Windows and .so files on


The loadpath has to be organized to make sure

you link against the correct libraries.
Especially on multi-architecture systems such as
mixed 32/64 bit this can be a challenge
A careful directory hierarchy is a good start

Handling some of the issues

Different systems have different solutions

Use of environment variables is an old

tradition to organize systems

Java ANT and Loadpath

Linux / C++ typically configure scripts
Windows / Configure and DssDeploy



Through use of environment variables it is

easier to provide migration

Configure / Autoconf

Derived from the GNU toolchain

Configure and specifies required

features of a host system
Autoconf is used to derive make files for use with
make to compile an application
There are a variety of derived systems designed
for automatic generation of build files
The basic idea

Specify required features for the application

Use tools to automatically find and configure compile
Build the application using generated scripts.
Effective even for complex applications


Allow distribution of packages to other

Two models for distribution

Distributed of binaries for execution in a client

with RDS installed
Distribution of source and key DLL files for reuse
on another client

Several models for distribution

Name files on the command line

Generation of a text file with files names

Ex use Dir /b/o:n/s > dir.txt to generate a raw file

Edit the file to include those to be included.
Add /d: at start of all lines


Example from the PromRDS book (Chapter 2)

# Chapter 2 Deploy Options File

# All Chapter files should follow the same basic format
# Include the deploy options file for later repackaging
# Chapter Readme.htm and associated files
# Add the Batch files to run the applications in this chapter
# Add the Config files for the applications (if any)
# and the Manifests


Simple script to distribute files from PromRDS (BuildChapterPackage.cmd)

@echo off
echo Build a single chapter for ProMRDS
if %1 == goto usage
if not exist DeployChapter%1Options.txt goto noopts
..\..\bin\dssdeploy /p /e+ /cv+ /s- /n:ProMRDS Chapter %1 Package
/r:..\Chapter%1\Readme.htm @DeployChapter%1Options.txt ProMRDSChapter
copy ProMRDSChapter%1.exe c:\temp
copy /Y ProMRDSChapter%1.exe
goto end
echo Usage: BuildChapterPackage num
echo where num is the Chapter number
echo DeployChapternumOptions.txt file must already exist


The corresponding exe file can be run on a

new computer with RDS installed

Run file

Will unpack files into directory hierarchy

Will run DssProjectMigration
Display readme.htm in the web browser (good for
delivery of extra installation information)

For source files you have to check the

configuration options and the path for project files

Visual Studio Considerations

There is a need to edit a number of project

properties to make files compile
Open the solutions file

Right click on the application icon and select

In the properties box

What version of .NET are you using. Typically 3.5

Under built make sure you have the correct output path
Under build events make sure the post build path is
Under debug is the correct program path specified?
Under reference paths do you have the right base

On the next slide is a simple example of the

Properties Box

Moving projects

Best solution is to rebuild on each machine

Make sure you have dependencies covered
Use DssDeploy to do 90% of the job
Edit paths in the project properties file to
ensure compile
The editing of the files should be relative easy
to do
For now the preferred solution is still use of
Visual Studio 2008 for easy migration across
projects with RDS R3


This series of lectures has been developed

with generous support from the Microsoft
Corporation as part of the project Software
Engineering in Robotics Contract # 113873.
The support is gratefully acknowledged.