Go to file
Lukas Bulwahn cc5989c0f7 extending README 2012-12-20 16:34:14 +01:00
classes moved all files from meta to root directory 2012-12-20 14:23:13 +01:00
conf towards an own layer 2012-12-20 14:23:13 +01:00
recipes-core/images moved all files from meta to root directory 2012-12-20 14:23:13 +01:00
recipes-devtools remove unused log4cxx 2012-12-20 15:36:15 +01:00
recipes-ros/ros adjusting ros recipe 2012-12-20 15:54:45 +01:00
COPYING.MIT adding license in preparation of going public 2012-12-20 14:23:02 +01:00
README extending README 2012-12-20 16:34:14 +01:00
install.sh telling more onabout he install.l script 2012-12-20 14:23:02 +01:00

README

This is a layer to provide ros in an openembedded linux system.
Currently, this layer is still under development and not fully functional.

PURPOSE of this document:
  This document describes
  - the installation, use and content of the git repository meta_ros 
  - milestones, the open issues and how some issues have been resolved. 
  - license information and origin of redistributed files


INSTALLATION:

  The repository only contains a layer for ros to be added to the existing yocto poky-danny-8.0 archive.

  To install, unpack http://downloads.yoctoproject.org/releases/yocto/yocto-1.3/poky-danny-8.0.tar.bz2 into a directory <dir>.
  In <dir>, clone this repository into the subdirectory meta-ros. 
  Add the meta-ros directory to your local bblayers.conf file 

USE for native compilation on the VM (milestone M1):
  The commands
    source oe-init-build-env
    bitbake core-image-ros
  builds our specifically configured linux image.
  
  With `runqemu qemux86-64 qemuparams="-m 2048" core-image-ros` the linux image runs within a virtual machine with 2048 MB of memory.
  We assumed that this is running on and compiled for an x86-64 architecture. For other architectures, some settings must be adjusted.
  
  On the host system, run fetch_ros.sh in a fresh directory, e.g. ~/ros-repos/.
  It clones all ros repositories locally.
  Then adjust pathes in fuerte-ros-base.rosinstall to the local repositories.
  After starting the virtual machine, copy the installation script from the host system to the home directory with scp and execute it.
  
    scp lukas@192.168.7.1:/<location of repository>/install.sh .
    sh ./install.sh


CONTENT of the repository:

  README                                                   this README file, which contains all important information
  COPYING.MIT
  conf/layer.conf                                          configuration file for this layer
  install.sh                                               installation script that runs within the virtual machine
  recipes-core/images/core-image-ros.bb                    recipe for our own core image (derived from core-image-minimal)
  recipes-devtools/python/python-pyyaml_3.10.bb            recipe for pyyaml python library
  recipes-devtools/python/python-rospkg_1.0.15.bb          recipe for rospkg tool
  recipes-devtools/python/python-empy_3.3.bb               recipe for empy python library
  recipes-devtools/python/python-nose_1.2.1.bb             recipe for nose python library
  recipes-devtools/python/python-rosinstall_0.6.21.bb      recipe for rosinstall tool
  recipes-devtools/python/python-pyyaml-native_3.10.bb     native recipes for cross-compilation
  recipes-devtools/python/python-rospkg-native_1.0.15.bb
  recipes-devtools/python/python-empy-native_3.3.bb
  recipes-devtools/python/python-nose-native_1.2.1.bb
  recipes-devtools/python/python-setuptools_0.6c11.bb      setuptools recipe originated from oe-core
  recipes-devtools/log4cxx                                 recipes and patches for log4cxx 0.10.0
  recipes-devtools/log4cxx/log4cxx_0.10.0.bb
  recipes-devtools/log4cxx/log4cxx/0001-log4cxx_0-10-0_add-missing-includes.patch
  recipes-devtools/log4cxx/log4cxx/0003-log4cxx-0.10.0-add_stdio_header.patch
  recipes-devtools/log4cxx/log4cxx/0002-Remove-duplicates-from-makefile.patch
  recipes-ros/ros/ros.bb                                   recipe for ros (incomplete)
  recipes-ros/ros/ros/fuerte-ros-base.rosinstall           the .rosinstall file to download ros
  classes/distutils.bbclass                                distutils recipe originated from oe-core (patch submitted to oe-core and accepted)
  classes/easyinstall.bbclass                              adjustments for easyinstall


MILESTONES

  M1: basic image with dev-tools (make, cmake, ...) and ROS compiles natively in the virtual machine
  M2: Linux+ROS System can be built completely with bitbake (no compilation and installing in the virtual machine)
  M3: Linux+ROS System with configured kernel (e.g. RT-Linux, System-D) that meets real-time and safety requirements 

RESOLVED ISSUES for M1:

  - recipes for python-pyyaml and python-rospkg create invalid shell scripts (header line refers to python-native instead of python.)
    RESOLVED by patching distutils class--has be committed to oe-core.
  - recipe for log4cxx requires another patch.
    RESOLVED by providing patch 0003 in recipe
  - Compilation with make fails in the virtual machine because of insufficient memory during compilation.
    RESOLVED by increasing memory.
  
OPEN ISSUES for M1:

  - python-setuptools requires some python-modules at run-time.
    TEMPORARILY RESOLVED by adding all python-modules in the image
    SHOULD BE RESOLVED by creating an appropriate patch for python-setuptools and contributing to openembedded-core
  - rospkg modules are not found when runnning python.
    TEMPORARILY RESOLVED by installing natively in the virtual machine
    CAUSE of PROBLEM: must add /usr/lib/python2.7/site-packages/rospkg-1.0.15-py2.7.egg to PYTHON_PATH (sys.path)
    In the usual setting, this is done by adding rospkg-1.0.15-py2.7.egg to the easy-install.pth
    However, the distutils class removes the created easy-install.pth before packaging.
    Modifying the class, to not remove the easy-install.pth does not solve the issue, because
    also the python-setuptools must add an entry to easy-install.pth
    This can be only solved by providing a general merge mechanism for the easy-install.pth file.
    Implementing this should not be difficult because the format of this file is very easy, and
    the pathes can be simply accumulated.
    FIRST TEMPORARY SOLUTION: we simply write the easy-install.pth file in the rootfs task of the image generation.
    SECOND SOLUTION: implemented behavior described above
    THIRD SOLUTION: uses the dist_utils argument to use traditional packaging mechanism and avoid .egg files at all (suggested by Ross Burton)

OPEN ISSUES for M2:
  - understand what rosinstall actually does
  - how fetch from multiple git repositories in one recipe?

OPEN ISSUES for PUBLICATION:
  - Explain how to/write a script to obtain the files in ros_server


LICENSE

All metadata is MIT licensed unless otherwise stated. Source code included
in tree for individual recipes is under the LICENSE stated in each recipe
(.bb file) unless otherwise stated.

This README document is Copyright (C) 2012 BMW Car IT GmbH.


REDISTRIBUTIONS

The log4cxx recipe originated from the recipe in the OpenEmbedded (Classic) Development
  (cf. http://cgit.openembedded.org/openembedded/tree/recipes/log4cxx)
  licensed with the MIT License.
The core-image-ros recipe originated from the core-image-minimal recipe in OpenEmbedded Core
  (cf. http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-core/images/core-image-minimal.bb)
  licensed with the MIT License.
The distutils class originated the distutils class in OpenEmbedded Core
  (cf. http://cgit.openembedded.org/openembedded-core/tree/meta/classes/distutils.bbclass)
  licensed with the MIT License.

The modified files are redistributed here under the same MIT License.