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
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit