Revision: 6716
          http://playerstage.svn.sourceforge.net/playerstage/?rev=6716&view=rev
Author:   rtv
Date:     2008-06-30 13:54:05 -0700 (Mon, 30 Jun 2008)

Log Message:
-----------
working on examples from SI paper

Modified Paths:
--------------
    code/stage/trunk/examples/ctrl/CMakeLists.txt
    code/stage/trunk/libstage/canvas.cc
    code/stage/trunk/worlds/pioneer.inc
    code/stage/trunk/worlds/sick.inc
    code/stage/trunk/worlds/simple.world

Added Paths:
-----------
    code/stage/trunk/examples/ctrl/swarmbenchmark.cc
    code/stage/trunk/worlds/swarmbenchmark/
    code/stage/trunk/worlds/swarmbenchmark/cave.world

Modified: code/stage/trunk/examples/ctrl/CMakeLists.txt
===================================================================
--- code/stage/trunk/examples/ctrl/CMakeLists.txt       2008-06-30 19:25:25 UTC 
(rev 6715)
+++ code/stage/trunk/examples/ctrl/CMakeLists.txt       2008-06-30 20:54:05 UTC 
(rev 6716)
@@ -1,9 +1,11 @@
-SET( PLUGINS lasernoise source fasr sink )
+SET( PLUGINS lasernoise source fasr sink swarmbenchmark )
 
 ADD_LIBRARY( lasernoise MODULE lasernoise.cc )
 ADD_LIBRARY( source MODULE source.cc )
 ADD_LIBRARY( fasr MODULE fasr.cc )
 ADD_LIBRARY( sink MODULE sink.cc )
+ADD_LIBRARY( sink MODULE sink.cc )
+ADD_LIBRARY( swarmbenchmark MODULE swarmbenchmark.cc )
 
 # link libstage to each plugin
 foreach( PLUGIN ${PLUGINS} )

Added: code/stage/trunk/examples/ctrl/swarmbenchmark.cc
===================================================================
--- code/stage/trunk/examples/ctrl/swarmbenchmark.cc                            
(rev 0)
+++ code/stage/trunk/examples/ctrl/swarmbenchmark.cc    2008-06-30 20:54:05 UTC 
(rev 6716)
@@ -0,0 +1,117 @@
+/////////////////////////////////
+// File: stest.c
+// Desc: Stage library test program
+// Created: 2004.9.15
+// Author: Richard Vaughan <[EMAIL PROTECTED]>
+// CVS: $Id: stest.cc,v 1.3 2008-02-01 03:11:02 rtv Exp $
+// License: GPL
+/////////////////////////////////
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "stage.hh"
+using namespace Stg;
+
+static double minfrontdistance = 0.750;
+static double speed = 0.400;
+static double turnrate = M_PI/3.0;
+
+typedef struct
+{
+       StgModelLaser* laser;
+       StgModelPosition* position;
+       StgModelRanger* ranger;
+} robot_t;
+
+#define VSPEED 0.4 // meters per second
+#define WGAIN 1.0 // turn speed gain
+#define SAFE_DIST 0.6 // meters
+#define SAFE_ANGLE 0.25 // radians
+
+// forward declare
+int RangerUpdate( StgModel* mod, robot_t* robot );
+
+// Stage calls this when the model starts up
+extern "C" int Init( StgModel* mod )
+{
+  robot_t* robot = new robot_t;
+  robot->position = (StgModelPosition*)mod;
+
+  // subscribe to the ranger, which we use for navigating
+  robot->ranger = (StgModelRanger*)mod->GetModel( "ranger:0" );
+  assert( robot->ranger );
+  robot->ranger->Subscribe();
+  
+  // ask Stage to call into our ranger update function
+  robot->ranger->AddUpdateCallback( (stg_model_callback_t)RangerUpdate, robot 
);
+
+  // subscribe to the laser, though we don't use it for navigating
+  robot->laser = (StgModelLaser*)mod->GetModel( "laser:0" );
+  assert( robot->laser );
+  //robot->laser->Subscribe();
+
+  return 0; //ok
+}
+
+int RangerUpdate( StgModel* mod, robot_t* robot )
+{
+  StgModelRanger* rgr = robot->ranger;
+  
+  if( rgr->samples == NULL )
+        return 0;
+  
+  // compute the vector sum of the sonar ranges              
+  double dx=0, dy=0;
+  
+  for( unsigned int s=0; s< rgr->sensor_count; s++ )
+        {
+               double srange = rgr->samples[s];
+               
+               dx += srange * cos( rgr->sensors[s].pose.a );
+               dy += srange * sin( rgr->sensors[s].pose.a );
+        }
+  
+  if( (dx == 0) || (dy == 0) )
+        return 0;
+  
+  assert( dy != 0 );
+  assert( dx != 0 );
+  
+  double resultant_angle = atan2( dy, dx );
+  double forward_speed = 0.0;
+  double side_speed = 0.0;        
+  double turn_speed = WGAIN * resultant_angle;
+  
+  int forward = rgr->sensor_count/2 -1 ;
+  // if the front is clear, drive forwards
+  if( (rgr->samples[forward-1] > SAFE_DIST/5.0) &&
+               (rgr->samples[forward  ] > SAFE_DIST) &&
+               (rgr->samples[forward+1] > SAFE_DIST/5.0) && 
+               (fabs( resultant_angle ) < SAFE_ANGLE) )
+        {
+               forward_speed = VSPEED;
+        }
+  
+  //   // send a command to the robot
+  //   stg_velocity_t vel;
+  //   bzero(&vel,sizeof(vel));
+  //         vel.x = forward_speed;
+  //   vel.y = side_speed;
+  //   vel.z = 0;
+  //   vel.a = turn_speed;
+  
+  //printf( "robot %s [%.2f %.2f %.2f %.2f]\n",
+  //robots[i].position->Token(), vel.x, vel.y, vel.z, vel.a );
+  
+  //  uint32_t bcount=0;
+  //stg_blobfinder_blob_t* blobs = robots[i].blobfinder->GetBlobs( &bcount );
+  
+  //printf( "robot %s sees %u blobs\n", robots[i].blobfinder->Token(), bcount 
);              
+  
+  robot->position->SetSpeed( forward_speed, side_speed, turn_speed );
+
+  return 0;
+}
+

Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2008-06-30 19:25:25 UTC (rev 6715)
+++ code/stage/trunk/libstage/canvas.cc 2008-06-30 20:54:05 UTC (rev 6716)
@@ -646,12 +646,13 @@
       PRINT_ERR1( "Unable to open %s", filename );
     }
   
-  // write png header information
+  // create PNG data
   png_structp pp = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
   assert(pp);
   png_infop info = png_create_info_struct(pp);
   assert(info);
 
+  // setup the output file
   png_init_io(pp, fp);
 
   // need to invert the image as GL and PNG disagree on the row order
@@ -669,9 +670,9 @@
                PNG_COMPRESSION_TYPE_DEFAULT, 
                PNG_FILTER_TYPE_DEFAULT);
 
-  png_set_strip_alpha(pp);
+  png_write_png( pp, info, PNG_TRANSFORM_IDENTITY, NULL );
 
-  png_write_png( pp, info, PNG_TRANSFORM_IDENTITY, NULL );
+  // free the PNG data - we reuse the pixel data next time.
   png_destroy_write_struct(&pp, &info);
   
   fclose(fp);

Modified: code/stage/trunk/worlds/pioneer.inc
===================================================================
--- code/stage/trunk/worlds/pioneer.inc 2008-06-30 19:25:25 UTC (rev 6715)
+++ code/stage/trunk/worlds/pioneer.inc 2008-06-30 20:54:05 UTC (rev 6716)
@@ -127,7 +127,7 @@
   block[3].point[2] [ -0.083  0.140 ]
   block[3].point[3] [  0.083  0.140 ]
   block[3].z [0 0.165 ]
-  block[3].color "gray10"
+  block[3].color "gray15"
 
   # right wheel
   block[4].points 4
@@ -136,7 +136,7 @@
   block[4].point[2] [ -0.083  -0.177 ]
   block[4].point[3] [  0.083  -0.177 ]
   block[4].z [ 0 0.165 ]
-  block[4].color "gray10"
+  block[4].color "gray15"
 
   # castor
   block[5].points 4
@@ -145,7 +145,7 @@
   block[5].point[1] [ -0.1825 -0.012 ]
   block[5].point[0] [ -0.2475 -0.012 ]
   block[5].z [ 0 0.065 ]
-  block[5].color "gray10"
+  block[5].color "gray15"
 
   # lid
   block[6].points 22

Modified: code/stage/trunk/worlds/sick.inc
===================================================================
--- code/stage/trunk/worlds/sick.inc    2008-06-30 19:25:25 UTC (rev 6715)
+++ code/stage/trunk/worlds/sick.inc    2008-06-30 20:54:05 UTC (rev 6716)
@@ -51,7 +51,7 @@
   block[3].point[2] [  0.06  0.05 ]
   block[3].point[3] [ -0.02  0.05 ]
   block[3].z [0.02 0.12 ]  
-  #block[3].color "darkgray"
+  block[3].color "gray10"
 )
 
 

Modified: code/stage/trunk/worlds/simple.world
===================================================================
--- code/stage/trunk/worlds/simple.world        2008-06-30 19:25:25 UTC (rev 
6715)
+++ code/stage/trunk/worlds/simple.world        2008-06-30 20:54:05 UTC (rev 
6716)
@@ -15,57 +15,156 @@
 resolution 0.02
 
 interval_sim 100  # simulation timestep in milliseconds
-interval_real 100  # real-time interval between simulation updates in 
milliseconds 
+interval_real 10  # real-time interval between simulation updates in 
milliseconds 
 
 paused 0
 
 # configure the GUI window
-size [ 745.000 448.000 ] 
-center [-7.010 5.960] 
-rotate [ 0.920 -0.430 ]
-scale 28.806 
+window
+(
+  size [ 1000.000 1000.000 ] 
+  center [0.019 -0.121]
+  rotate [ 0.000 0.000 ]
+  scale 54.571 
+)
 
-
 # load an environment bitmap
 floorplan
 ( 
   name "cave"
-  size3 [16 16 1.5]
+  size3 [16 16 0.5]
   pose [0.000 0.000 0.000]
   bitmap "bitmaps/cave.png"
 )
 
-define autorob fancypioneer2dx
+define rob fancypioneer2dx
 (
- color "red"
  fancysicklaser( pose [ 0.040 0.000 0.000 ] samples 32 ) 
+
  #ctrl "wander"
-
- blinkenlight( pose [ 0.15 0.1 0 ] color "red" )
- blinkenlight( pose [ 0.15 0.0 0 ] color "green" )
- blinkenlight( pose [ 0.15 -0.1 0 ] color "blue" )
 )
 
-autorob( pose [3.537 7.177 158.268] name "r0" )
-autorob( pose [4.142 -7.764 -52.629] )
-autorob( pose [6.320 3.775 22.445] )
-#autorob( pose [-1.915 3.332 156.191] )
-#autorob( pose [3.309 5.546 -109.062] )
-#autorob( pose [7.209 4.552 89.455] )
-#autorob( pose [-6.329 1.151 -164.935] )
-#autorob( pose [-6.320 -5.692 -103.425] )
-#autorob( pose [3.187 -7.170 -57.759] )
-#autorob( pose [7.407 2.058 -57.823] )
 
-#autorob( pose [-6.370 2.754 -113.456] )
-#autorob( pose [0.402 -6.819 -1.177] )
-#autorob( pose [-2.892 -0.583 46.585] )
-#autorob( pose [2.284 5.478 135.162] )
-#autorob( pose [-2.483 -1.567 -3.588] )
-#autorob( pose [-6.321 4.372 93.535] )
-#autorob( pose [-4.204 -5.882 -35.760] )
-#autorob( pose [-2.409 -4.979 -17.538] )
-#autorob( pose [-6.692 5.179 -23.903] )
-#autorob( pose [-1.958 0.013 -17.092] )
+define redrob rob( color "red" )
+define greenrob rob( color "green" )
+define magentarob rob( color "magenta" )
+define cyanrob rob( color "cyan" )
+define yellowrob rob( color "yellow" )
+define greenrob rob( color "green" )
+define bluerob rob( color "LightBlue" )
+define orangerob rob( color "orange" )
+define purplerob rob( color "purple" )
+define goldrob rob( color "gold" )
+define darkredrob rob( color "DarkRed" )
 
+redrob( pose [-5.845 4.401 158.268] )
+redrob( pose [-5.982 4.979 -52.629] )
+redrob( pose [-6.227 3.735 22.445] )
+redrob( pose [-6.567 4.915 156.191] )
+redrob( pose [-7.089 4.569 -109.062] )
+redrob( pose [-7.606 4.063 89.455] )
+redrob( pose [-7.638 4.786 -164.935] )
+redrob( pose [-5.401 3.923 -103.425] )
+redrob( pose [-6.487 4.205 -57.759] )
+redrob( pose [-6.997 3.895 -57.823] )
 
+bluerob( pose [-6.937 6.565 -113.456] )
+bluerob( pose [-6.243 5.709 -1.177] )
+bluerob( pose [-6.312 6.297 46.585] )
+bluerob( pose [-7.527 6.162 135.162] )
+bluerob( pose [-6.880 5.801 -3.588] )
+bluerob( pose [-7.611 6.835 93.535] )
+bluerob( pose [-7.624 5.532 -35.760] )
+bluerob( pose [-7.100 5.262 -17.538] )
+bluerob( pose [-7.415 7.485 -23.903] )
+bluerob( pose [-6.738 7.157 -17.092] )
+
+greenrob( pose [-4.888 4.831 -97.306] )
+greenrob( pose [-5.545 5.497 2.962] )
+greenrob( pose [-5.419 4.931 -120.224] )
+greenrob( pose [-5.515 5.994 -82.019] )
+greenrob( pose [-4.890 5.974 -143.143] )
+greenrob( pose [-4.826 5.423 54.528] )
+greenrob( pose [-4.401 5.935 70.753] )
+greenrob( pose [-3.658 5.798 0.097] )
+greenrob( pose [-4.059 5.368 -52.433] )
+greenrob( pose [-4.262 4.774 163.390] )
+
+magentarob( pose [-2.623 7.577 -37.146] )
+magentarob( pose [-2.740 6.912 -88.712] )
+magentarob( pose [-2.935 6.326 -17.092] )
+magentarob( pose [-2.114 7.596 160.525] )
+magentarob( pose [-2.193 7.049 108.959] )
+magentarob( pose [-2.271 6.521 -24.723] )
+magentarob( pose [-2.408 6.013 -157.467] )
+magentarob( pose [-3.013 5.759 -54.334] )
+magentarob( pose [-2.525 5.368 -17.092] )
+magentarob( pose [-3.111 5.192 -150.774] )
+
+yellowrob( pose [-7.548 3.355 150.967] )
+yellowrob( pose [-6.961 3.277 108.959] )
+yellowrob( pose [-7.645 2.749 -85.847] )
+yellowrob( pose [-7.039 2.691 153.832] )
+yellowrob( pose [-6.375 3.199 91.770] )
+yellowrob( pose [-6.473 2.651 179.615] )
+yellowrob( pose [-5.769 3.218 120.418] )
+yellowrob( pose [-5.867 2.671 -62.929] )
+yellowrob( pose [-5.261 3.179 -137.413] )
+yellowrob( pose [-5.261 2.573 -62.929] )
+
+goldrob( pose [-1.461 7.643 -32.379] )
+goldrob( pose [-0.849 7.618 63.122] )
+goldrob( pose [-1.527 7.120 80.311] )
+goldrob( pose [-0.921 7.085 60.257] )
+goldrob( pose [-1.484 6.566 156.697] )
+goldrob( pose [-0.899 6.611 162.426] )
+goldrob( pose [-1.716 6.058 -17.092] )
+goldrob( pose [-1.373 5.628 -17.092] )
+goldrob( pose [-1.969 5.606 -17.092] )
+goldrob( pose [-1.683 5.110 -17.092] )
+
+darkredrob( pose [-7.567 2.065 -45.740] )
+darkredrob( pose [-6.883 2.026 -74.388] )
+darkredrob( pose [-6.258 2.007 177.714] )
+darkredrob( pose [-5.398 2.104 176.750] )
+darkredrob( pose [-7.587 1.362 68.852] )
+darkredrob( pose [-6.805 1.381 23.015] )
+darkredrob( pose [-6.121 1.322 -51.469] )
+darkredrob( pose [-5.320 1.322 -120.224] )
+darkredrob( pose [-4.616 1.811 -176.557] )
+darkredrob( pose [-4.577 1.283 -17.092] )
+
+cyanrob( pose [-2.544 4.684 -166.061] )
+cyanrob( pose [-1.919 4.684 55.491] )
+cyanrob( pose [-2.525 4.117 -125.954] )
+cyanrob( pose [-1.919 4.078 -163.196] )
+cyanrob( pose [-2.564 3.472 137.607] )
+cyanrob( pose [-1.958 3.433 -153.638] )
+cyanrob( pose [-2.603 2.866 130.914] )
+cyanrob( pose [-1.958 2.886 149.066] )
+cyanrob( pose [-2.603 2.241 22.052] )
+cyanrob( pose [-1.997 2.202 8.691] )
+
+orangerob( pose [-7.567 0.678 129.012] )
+orangerob( pose [-6.805 0.619 83.176] )
+orangerob( pose [-6.160 0.619 159.562] )
+orangerob( pose [-5.476 0.619 74.581] )
+orangerob( pose [-4.811 0.599 -94.441] )
+orangerob( pose [-7.606 0.130 48.798] )
+orangerob( pose [-6.942 0.033 -5.633] )
+orangerob( pose [-6.336 0.072 -105.900] )
+orangerob( pose [-5.671 0.091 28.745] )
+orangerob( pose [-4.987 0.072 -45.740] )
+
+purplerob( pose [-3.873 1.694 -97.306] )
+purplerob( pose [-3.267 1.694 -177.520] )
+purplerob( pose [-3.912 1.127 -154.602] )
+purplerob( pose [-3.287 1.088 -114.495] )
+purplerob( pose [-4.049 0.599 -97.306] )
+purplerob( pose [-3.424 0.541 137.607] )
+purplerob( pose [-4.069 0.013 -117.360] )
+purplerob( pose [-3.365 -0.007 -60.064] )
+purplerob( pose [-2.623 1.635 -82.982] )
+purplerob( pose [-2.623 1.029 -17.092] )
+
+

Added: code/stage/trunk/worlds/swarmbenchmark/cave.world
===================================================================
--- code/stage/trunk/worlds/swarmbenchmark/cave.world                           
(rev 0)
+++ code/stage/trunk/worlds/swarmbenchmark/cave.world   2008-06-30 20:54:05 UTC 
(rev 6716)
@@ -0,0 +1,161 @@
+# cave.world - 100 robot test and benchmark world
+# Authors: Richard Vaughan
+# $id$
+
+include "../pioneer.inc"
+include "../map.inc"
+include "../sick.inc"
+
+resolution 0.02    # resolution of the underlying raytrace mode
+interval_sim 100  # simulation timestep in milliseconds
+interval_real 10  # real-time interval between simulation updates in 
milliseconds 
+
+paused 1
+
+# configure the GUI window
+window
+(
+  size [ 1000.000 1000.000 ] 
+  center [-0.932 -0.088]
+  rotate [ 0.000 0.000 ]
+  scale 51.828 
+)
+
+floorplan
+( 
+  name "cave"
+  size3 [16 16 0.5]
+  pose [0.000 0.000 0.000]
+  bitmap "../bitmaps/cave.png"
+)
+
+define rob fancypioneer2dx
+(
+ fancysicklaser( pose [ 0.040 0.000 0.000 ] samples 180 ) 
+ ctrl "swarmbenchmark"
+)
+
+
+define redrob rob( color "red" )
+define greenrob rob( color "green" )
+define magentarob rob( color "magenta" )
+define cyanrob rob( color "cyan" )
+define yellowrob rob( color "yellow" )
+define greenrob rob( color "green" )
+define bluerob rob( color "LightBlue" )
+define orangerob rob( color "orange" )
+define purplerob rob( color "purple" )
+define goldrob rob( color "gold" )
+define darkredrob rob( color "DarkRed" )
+
+redrob( pose [-5.285 4.915 158.268] )
+redrob( pose [-4.464 5.679 -52.629] )
+redrob( pose [-5.518 4.157 22.445] )
+redrob( pose [-6.007 5.008 156.191] )
+redrob( pose [-5.559 3.371 -109.062] )
+redrob( pose [-6.932 3.655 89.455] )
+redrob( pose [-7.521 4.062 -164.935] )
+redrob( pose [-4.377 4.901 -103.425] )
+redrob( pose [-6.277 4.252 -57.759] )
+redrob( pose [-5.216 5.750 -57.823] )
+
+bluerob( pose [-6.984 6.565 -113.456] )
+bluerob( pose [-6.243 5.709 -1.177] )
+bluerob( pose [-6.382 6.320 46.585] )
+bluerob( pose [-7.527 6.162 135.162] )
+bluerob( pose [-6.973 5.568 -3.588] )
+bluerob( pose [-7.611 6.835 93.535] )
+bluerob( pose [-7.601 5.135 -35.760] )
+bluerob( pose [-6.983 4.818 -17.538] )
+bluerob( pose [-7.415 7.485 -23.903] )
+bluerob( pose [-6.738 7.157 -17.092] )
+
+greenrob( pose [-2.693 6.699 -97.306] )
+greenrob( pose [-3.304 5.100 2.962] )
+greenrob( pose [-2.477 6.075 -120.224] )
+greenrob( pose [-3.507 5.901 -82.019] )
+greenrob( pose [-2.462 7.492 -143.143] )
+greenrob( pose [-1.908 6.870 -5.633] )
+greenrob( pose [-1.583 6.080 -95.405] )
+greenrob( pose [-0.600 7.526 0.097] )
+greenrob( pose [-0.563 6.815 -52.433] )
+greenrob( pose [-1.367 7.506 163.390] )
+
+magentarob( pose [1.702 7.364 -37.146] )
+magentarob( pose [2.628 6.716 -88.712] )
+magentarob( pose [2.686 5.754 -17.092] )
+magentarob( pose [3.723 7.426 160.525] )
+magentarob( pose [2.625 7.473 108.959] )
+magentarob( pose [3.460 6.754 -24.723] )
+magentarob( pose [3.418 5.967 -85.847] )
+magentarob( pose [0.349 7.510 0.097] )
+magentarob( pose [1.769 6.270 -17.092] )
+magentarob( pose [0.561 6.752 -27.588] )
+
+yellowrob( pose [-7.548 3.117 150.967] )
+yellowrob( pose [-6.811 2.501 108.959] )
+yellowrob( pose [-7.632 2.151 -85.847] )
+yellowrob( pose [-7.089 1.777 153.832] )
+yellowrob( pose [-6.317 3.246 -140.278] )
+yellowrob( pose [-6.323 1.862 179.615] )
+yellowrob( pose [-5.979 2.590 -54.334] )
+yellowrob( pose [-5.358 1.495 -62.929] )
+yellowrob( pose [-5.279 2.419 0.097] )
+yellowrob( pose [-4.685 1.709 -62.929] )
+
+goldrob( pose [5.734 7.537 -32.379] )
+goldrob( pose [7.335 7.494 63.122] )
+goldrob( pose [6.403 6.182 -19.957] )
+goldrob( pose [7.441 6.661 -88.712] )
+goldrob( pose [5.541 6.778 156.697] )
+goldrob( pose [6.593 6.929 162.426] )
+goldrob( pose [4.757 7.353 -17.092] )
+goldrob( pose [5.228 6.159 -17.092] )
+goldrob( pose [4.738 6.752 -17.092] )
+goldrob( pose [4.217 6.192 -17.092] )
+
+darkredrob( pose [-7.630 0.425 -45.740] )
+darkredrob( pose [-7.571 1.112 -74.388] )
+darkredrob( pose [-6.158 1.168 177.714] )
+darkredrob( pose [-4.509 0.635 24.916] )
+darkredrob( pose [-7.625 -0.265 68.852] )
+darkredrob( pose [-6.805 0.167 23.015] )
+darkredrob( pose [-6.897 0.859 -51.469] )
+darkredrob( pose [-6.055 0.262 25.880] )
+darkredrob( pose [-5.195 0.771 -33.318] )
+darkredrob( pose [-5.483 -0.245 -17.092] )
+
+cyanrob( pose [-2.544 4.684 -143.143] )
+cyanrob( pose [-0.542 3.423 32.573] )
+cyanrob( pose [-1.731 4.304 -125.954] )
+cyanrob( pose [-2.152 5.502 -94.441] )
+cyanrob( pose [-2.424 3.799 137.607] )
+cyanrob( pose [-1.440 3.502 -37.145] )
+cyanrob( pose [-2.603 2.866 130.914] )
+cyanrob( pose [-1.958 2.886 -5.633] )
+cyanrob( pose [-2.183 2.102 -3.731] )
+cyanrob( pose [-1.483 5.050 8.691] )
+
+orangerob( pose [-7.692 -2.013 129.012] )
+orangerob( pose [-6.974 -2.159 83.176] )
+orangerob( pose [-6.795 -1.320 -120.224] )
+orangerob( pose [-7.641 -0.996 74.581] )
+orangerob( pose [-6.801 -0.515 -94.441] )
+orangerob( pose [-7.611 -3.107 -103.036] )
+orangerob( pose [-6.788 -3.163 -91.577] )
+orangerob( pose [-6.028 -2.820 -105.900] )
+orangerob( pose [-6.163 -1.853 -45.740] )
+orangerob( pose [-6.026 -0.817 65.987] )
+
+purplerob( pose [-3.873 1.694 -97.306] )
+purplerob( pose [-2.893 1.951 -177.520] )
+purplerob( pose [-3.912 1.127 -19.957] )
+purplerob( pose [-3.152 1.184 -114.495] )
+purplerob( pose [-3.878 0.364 -88.712] )
+purplerob( pose [-3.058 0.453 -19.956] )
+purplerob( pose [-3.848 -0.468 -5.633] )
+purplerob( pose [-3.114 -0.386 -60.064] )
+purplerob( pose [-2.506 1.261 -82.982] )
+purplerob( pose [-4.611 -0.180 -17.092] )
+
+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to