DROS Execution

Maintained by: David Austin and Luke Cole

Compiling

  1. Download the DROS code tarball.
  2. Uncompress the tarball and untar the code.
          tar -xvfz DROS.tgz
    
  3. Go into the source part of the hierarchy.
          cd DROS/src                      
    
  4. Establish links between the various sub-directories.
          make links 
    
  5. Compile the code via one of the following commands.

    Create apps:
          make
    
    Create test apps:
          make ta
    
    Create all apps:
          make everything
    

Notes:

  1. If your 'make links' returns errors about stddef.h and stdarg.h, it is probably because there path has changed. So you should do the following (as root) for now:
    ln -s /usr/include/linux/stddef.h /usr/include/stddef.h
    ln -s /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h /usr/include/stdarg.h
    
  2. Some DROS features require the following libraries: libgtk2.0
  3. DROSInterface requires developement libraries for GTK+-2.0. Debian package libgtk2.0-dev. You should install this for pretty GUI displays, otherwise you will have only boring text.
  4. If you don't have support for all of the things that DROS uses, compilation will fail in some directories. Hopefully, you can ignore this without too many problems. Please let me know if you run into problems. Autoconf is coming real soon now!
  5. DROS searches for configuration data in the current directory, $HOME/DROS/data and /usr/local/DROS/data. Therefore, move DROS to your home directory or edit the data paths in DROS/src/Architecture/GlobalConfig.cc (before compiling).

Quick Start: Monolith

The DROS simulator involves a large number of different parts. To get going quickly, I've created a monolithic version with all of the parts integrated. I don't usually use this, because it is harder to debug with all of the output mixed together. However, for getting started with DROS, it is the easiest way.
  1. First of all, get the NameServer running and check that it can be found with NameServerShow. You need some form of networking for the NameServer to work properly at the moment. I want to improve it.... The NameServer lives in the directory DROS/src/MSDE/NameServer. Go there and type make to build the NameServer. At the moment, start the NameServer with the following command line.

    ./DROS/src/MSDE/NameServer/NameServer -n -x -d0 &
    
    • -n means no concept of locality (I had a notion of groups of machines with NameServers which would be authorities for the group). The locality concept needs to be improved and is not necessary for simple running of DROS.
    • -x means no background process for inter-NameServer communications and sharing
    • -d0 means no debug output
    Check that the NameServer can be found with NameServerShow. It shouldn't print any error messages. If your computer can't do hostname lookups properly, it can take a while for NameServer (and each of the processes below) to start. The DNS library sucks!

  2. Next, run all of the DROS robotic processes together:

    ./DROS/src/Monolith/Monolith &
    

    If everything is ok, it should produce some junk and then output like:

    1 Lines: 1 11 16 
    541.953| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625541.933227 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    2 Lines: 1 11 16 
    542.063| Became un-lost (or found) | P:./Monolith f:?? C:SuperLocaliserMain.cc:1541
    542.253| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625542.233251 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    3 Lines: 1 11 16 
    542.553| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625542.538536 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    4 Lines: 1 11 16 
    542.853| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625542.833303 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    5 Lines: 1 11 16 
    543.153| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625543.133332 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    6 Lines: 1 11 16 
    543.453| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625543.433395 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    7 Lines: 1 11 16 
    543.753| Robot is at 1.000000, 1.000000 @0.000000 (deg) at time 1073625543.733376 | P:./Monolith f:?? C:HALSimulatedLaser.cc:346
    8 Lines: 1 11 16 
    
  3. Now we can start the DROSInterface to check out graphically what is going on.

    ./DROS/src/Graphics/DROSInterface/DROSInterface
    
  4. Finally, to move the robot around, double-click where you want the robot to go to.

Individual Program Mode

Getting DROS going is a bit tricky because of the number of modules involved. Unfortunately, there is no way around this. We're now using the C++ DROSInterface, rather than the perl version. The perl version is a bit out of date and is CPU hungry. I prefer to start each of these in a separate xterm so I can see what's going on.

  1. First of all, get the NameServer running and check that it can be found with NameServerShow. You need some form of networking for the NameServer to work properly at the moment. I want to improve it.... The NameServer lives in the directory DROS/src/MSDE/NameServer. Go there and type make to build the NameServer. At the moment, start the NameServer with the following command line.

    ./DROS/src/MSDE/NameServer/NameServer -n -x -d0 
    
    • -n means no concept of locality (I had a notion of groups of machines with NameServers which would be authorities for the group). The locality concept needs to be improved and is not necessary for simple running of DROS.
    • -x means no background process for inter-NameServer communications and sharing
    • -d0 means no debug output
    Check that the NameServer can be found with NameServerShow. It shouldn't print any error messages. If your computer can't do hostname lookups properly, it can take a while for NameServer (and each of the processes below) to start. The DNS library sucks!

  2. Next, we need a robot server to do anything interesting. For simulation, this is started with

    ./DROS/src/Robot/RobotServer/XR4000Server -s 
    
    • -s means simulation mode.
  3. Next, we need a laser server. For simulation, this is started with

    ./DROS/src/Robot/LaserServer/SICKLaserServer -s 
    
    • -s means simulation mode (by default, the map file is line.map).
  4. Next, we start the SuperLocaliser. This is the collector of all localisation data - both odometry from the robot and localisation estimates from localisation modules.

    cd DROS/src/Localisers/SuperLocaliser/SuperLocaliser 
    
  5. Now we start the LaserPoseTrackerPoly. This is the only localisation module available at present.

    ./DROS/src/Localisers/LaserPoseTrackerPoly/LaserPoseTrackerPoly -P1:1:0 
    
    The -P flag tells LaserPoseTrackerPoly where the robot is located (at x=1m, y=1m and theta=0degrees in this case). Note that the LaserPoseTrackerPoly is only capable of maintaining an initial estimate of the robot's pose - it is not capable of determining where the robot is from scratch or recovering in the event that it gets lost.

    The LaserPoseTrackerPoly should start printing out the lines that it is tracking to maintain it's estimate of the robot's position.

    1 Lines: 1 11 16
    2 Lines: 1 11 16
    3 Lines: 1 11 16
    .
    .
    .
    
  6. Now we start the topological path planner (this uses a graph map of the environment to plan the path at a high level).

    ./DROS/src/Robot/TopologicalPathPlanner/PathPlanner
    
  7. Now we start the reactive path planner (this uses the sensors to move to the next via point in the high level path without colliding with things).

    ./DROS/src/Robot/Controllers/DWA/DWAPlanner
    
  8. Now we can start the DROSInterface to check out graphically what is going on.

    ./DROS/src/Graphics/DROSInterface/DROSInterface
    
  9. Finally, to move the robot around, double-click where you want the robot to go to.

Running the Particle Filter

Currently there are two particle filters: The Adaptive Monte-Carlo localiser (DROS/src/Localisers/AMCL/) and a trivial Monte-Carlo locaisation simulator (DROS/src/Localisers/MCL/). The AMCL can be run when the Monolith and DROSInterface (or by running the SuperLocaliser, etc individually) is running. Simply do:
./DROS/src/Localisers/AMCL/AMCL

Copyright 2002-2007 David Austin, Luke Cole