=== rosinstall ===

The following steps requires two separate installation steps and will compile ROS-related code into two separate places/layers:

 1. Download and ''install'' the underlying core ROS libraries and tools into ``/opt/ros/fuerte``.
 2. Download and ''build'' some higher-level ROS libraries using [[rosmake]] in ``~/ros``.

The compiled code from (1) is ''installed'' into `/opt/ros/fuerte`.  While it is possible to install elsewhere (e.g. `/usr`), this is not well tested and you will encounter various problems along the way (e.g. having to change rosinstall files, having to manually install system dependencies, etc...).  Please see [[http://ros.org/reps/rep-0122.html|REP 122: Filesystem Hiearchy Layout]] for more detailed documentation on how the installed files are placed.

The compiled code from (2) is simply built using [[rosmake]], which is familiar to users of previous versions of ROS.  The higher-level ROS stacks are download and build in subdirectories inside the `~/ros` directory. 

First install [[rosinstall]], [[rospkg]] and [[rosdep]] as described in their instructions:
 * [[rosinstall/Installation]]
 * [[rospkg/Installation]]
 * [[rosdep/Installation]]
If you have trouble using rosws/rosinstall, you can manually download the projects by investigating the respective rosinstall file.

==== Layer 1: Install core libraries ====

The following instructions will create a ''system install'' of the core ROS libraries and tools.  The installation is done using standard CMake/make tools, so experts can adjust to their liking.

 '''ROS-Full:''' ROS package, build, communication, '''tutorials''' and graphical tools.

   {{{
rosinstall --catkin ~/ros-underlay http://ros.org/rosinstalls/fuerte-ros-full.rosinstall
    }}}

 '''ROS-Base: (Bare Bones)''' ROS package, build, and communication libraries.
   {{{
rosinstall --catkin ~/ros-underlay http://ros.org/rosinstalls/fuerte-ros-base.rosinstall
    }}}

{{{#!wiki blue/solid
For people having trouble with rosinstall or catkin on their particular OS: 
If you have downloaded the source files in a different way, you need to run catkin_init_workspace ``~/ros-underlay``. This script is part of catkin, which should by now also at least be in your workspace, you can use the script without installing catkin. It should create a suitable global CMakeLists.txt to use in the next step.

If you do not want to use catkin, follow standard cmake procedure for building cmake packages, and install the packages in the dependency order by manually checking the package.xml declarations.
}}}

Build and install the underlay into `/opt/ros/fuerte`:

 {{{
cd ~/ros-underlay
mkdir build
cd build
}}}


Now, run cmake.  The invocation depends on the platform you are on:

 Debian-based platforms (e.g. Ubuntu, Mint) use:

 {{{
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/ros/fuerte
}}}

 Other platforms use:

 {{{
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/ros/fuerte -DSETUPTOOLS_DEB_LAYOUT=OFF
}}}


Finally, build + install the code:

 {{{
make -j8
sudo make install
}}}

'''Useful TIP:'''
If you encounter problems with the make command due to "Unable to find 'swig.swg'" and "Unable to find 'python.swg'" errors then it probably due to the installation script having placed /swig at the toplevel/root directory. 

To get around this problem do the following (and then restart make process as above)
{{{
cd /
sudo cp -r /swig /usr/local/share
cd ~/ros-underlay/build
}}}

'''Useful TIP:'''
If you are having trouble with the make install command due to lib64 and lib problems, a work around is
{{{
cd /opt/ros/fuerte/
sudo mv lib/* lib64/
sudo rmdir lib
sudo ln -s lib64 lib
}}}
This makes the lib and the lib64 directory linked together and the make install command should work now.


Verify the installed environment:

 {{{
. /opt/ros/fuerte/setup.sh
which roscore
}}}

You should see:

 {{{
/opt/ros/fuerte/bin/roscore
}}}

You can delete `~/ros-underlay` now, if you wish.  The ROS core libraries are now installed onto your system.

==== Layer 2: Higher-level robotics libraries and tools ====

Now it's time to create the second layer, which contains your main robotics libraries (e.g. navigation) as well as visualization tools like [[rviz]].  You will ''build'' this layer using [[rosmake]], but it is ''not'' installed.


There are many different libraries and tools in ROS.  We provided four default configurations to get you started.  

''NOTE: The rosinstall installation files below assume that you've installed into `/opt/ros/fuerte`, so you will need to change them manually if you have a different install path.''

 '''Desktop-Full Install: (Recommended)''': ROS Full, [[rviz]], robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception 
   {{{
rosinstall ~/ros "http://packages.ros.org/cgi-bin/gen_rosinstall.py?rosdistro=fuerte&variant=desktop-full&overlay=no"
   }}}

 '''Desktop Install: ''': ROS Full, [[rviz]], and robot-generic libraries
   {{{
rosinstall ~/ros "http://packages.ros.org/cgi-bin/gen_rosinstall.py?rosdistro=fuerte&variant=desktop&overlay=no"
   }}}


'''NOTE''': the instructions above download all stacks inside the `~/ros` folder. If you prefer a different location, simply change the `~/ros` in the commands above.

Please reference [[http://www.ros.org/reps/rep-0113.html| REP 113 for description of other available configurations]].

<<Include(fuerte/Installation/rosinstallEnvironment)>>

=== Build Higher-level/tools (Layer 2) ===

First, initialize your [[rosdep]].  ROS Fuerte comes with [[http://ros.org/reps/rep-0125.html|rosdep 2]].  ''If you get a message that your default sources list exists, then don't worry as it means you've done this before''.

 {{{
sudo rosdep init
rosdep update
}}}

Now, use rosdep 2 to install system dependencies.  ''Many of the system dependencies will install into `/opt/ros/fuerte` and will not be usable if you have changed the installation prefix.''

 {{{
rosdep install -a
}}}

'''Useful TIP:''' to get rid of constant prompts of being sure with proceeding, you can use -y switch to tell the package manager to default 'Yes' while installing.

 {{{
rosdep install -ay
}}}

Finally, build the ROS stacks using [[rosmake]].

 {{{
rosmake -a
}}}