Revision: 8558
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8558&view=rev
Author:   rtv
Date:     2010-02-19 21:28:18 +0000 (Fri, 19 Feb 2010)

Log Message:
-----------
minimal fasr2 demo

Modified Paths:
--------------
    code/stage/trunk/examples/ctrl/astar/stlastar.h
    code/stage/trunk/examples/ctrl/fasr2.cc
    code/stage/trunk/examples/ctrl/sink.cc
    code/stage/trunk/worlds/fasr2.world

Added Paths:
-----------
    code/stage/trunk/worlds/fasr2_duo.world
    code/stage/trunk/worlds/fasr2_solo.world

Modified: code/stage/trunk/examples/ctrl/astar/stlastar.h
===================================================================
--- code/stage/trunk/examples/ctrl/astar/stlastar.h     2010-02-19 02:38:04 UTC 
(rev 8557)
+++ code/stage/trunk/examples/ctrl/astar/stlastar.h     2010-02-19 21:28:18 UTC 
(rev 8558)
@@ -41,11 +41,11 @@
 
 // Fixed size memory allocator can be disabled to compare performance
 // Uses std new and delete instead if you turn it off
-#define USE_FSA_MEMORY 1
+#define USE_FSA_MEMORY 0
 
 // disable warning that debugging information has lines that are truncated
 // occurs in stl headers
-#pragma warning( disable : 4786 )
+//#pragma warning( disable : 4786 )
 
 // The AStar search class. UserState is the users state space type
 template <class UserState> class AStarSearch

Modified: code/stage/trunk/examples/ctrl/fasr2.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr2.cc     2010-02-19 02:38:04 UTC (rev 
8557)
+++ code/stage/trunk/examples/ctrl/fasr2.cc     2010-02-19 21:28:18 UTC (rev 
8558)
@@ -103,6 +103,42 @@
         glPointSize(4);
         FOR_EACH( it, nodes ){ (*it)->Draw(); }
   }
+
+  stg_radians_t GoodDirection( const Pose& pose, stg_meters_t range )
+  {
+        // find the node with the lowest value within range of the given
+        // pose and return the absolute heading from pose that node 
+        
+        if( nodes.empty() )
+               return 0; // a null guess
+        
+
+        Node* best_node = NULL;
+
+        // find the closest node
+        FOR_EACH( it, nodes )
+               {
+                 Node* node = *it;
+                 double dist = hypot( node->pose.x - pose.x, node->pose.y - 
pose.y );
+                 
+                 // if it's in range, and either its the first we have found,
+                 // or it has a lower value than the current best
+                 if( dist < range &&  
+                               ( best_node == NULL || node->value < 
best_node->value ))
+                        {
+                               best_node = node;
+                        }
+               }
+        
+        if( best_node == NULL )
+               {
+                 puts( "warning: no nodes in range" );
+                 return 0;
+               }
+        //else
+        return atan2( best_node->pose.y - pose.y,
+                                               best_node->pose.x - pose.x );
+  }
 };
 
 
@@ -143,7 +179,7 @@
 {
   // print value
   //char buf[32];
-  //snprintf( buf, 32, "%.2f", value );
+  //snprintf( buf, 32, "%.0f", value );
   //Gl::draw_string( pose.x, pose.y+0.2, 0.1, buf );
 
   glBegin( GL_POINTS );
@@ -192,7 +228,6 @@
   double charger_range;
   double charger_heading;
   nav_mode_t mode;
-  bool at_dest;
 
   Graph graph;
   GraphVis graphvis;
@@ -203,7 +238,8 @@
   static unsigned int map_width;
   static unsigned int map_height;
   static uint8_t* map_data;
-
+  static Model* map_model;
+        
 public:
   Robot( ModelPosition* pos, 
                        Model* source,
@@ -223,7 +259,6 @@
                charger_range(0),
                charger_heading(0),
                mode(MODE_WORK),
-               at_dest( false ),
                graph(),
                graphvis( graph ),
                last_node( NULL ),
@@ -254,13 +289,7 @@
         //pos->AddFlagDecrCallback( (stg_model_callback_t)FlagDecr, NULL );
         
         pos->AddVisualizer( &graphvis, true );
-
-        // get the map
-        Model* cave = pos->GetWorld()->GetModel( "cave" );
-        assert(cave);
-        Geom g = cave->GetGeom();
         
-        
         if( map_data == NULL )
                {
                  map_data = new uint8_t[map_width*map_height*2];
@@ -269,12 +298,17 @@
                  // non-zero pixels
                  memset( map_data, 0, sizeof(uint8_t) * map_width * 
map_height);
                  
-                 cave->Rasterize( map_data, 
-                                                                map_width, 
-                                                                map_height, 
-                                                                
g.size.x/(float)map_width, 
-                                                                
g.size.y/(float)map_height );
+                 // get the map
+                 map_model = pos->GetWorld()->GetModel( "cave" );
+                 assert(map_model);
+                 Geom g = map_model->GetGeom();
                  
+                 map_model->Rasterize( map_data, 
+                                                                               
map_width, 
+                                                                               
map_height, 
+                                                                               
g.size.x/(float)map_width, 
+                                                                               
g.size.y/(float)map_height );
+                 
                  //     putchar( '\n' );
                  //     for( unsigned int y=0; y<map_height; y++ )
                  //            {
@@ -299,9 +333,16 @@
                                assert( (map_data[i] == 1) || (map_data[i] == 
9) );               
                         }       
                }
-
+        
+        Plan( source );
+        //puts("");
+  }
+  
+  void Plan( Model* dest )
+  {
         Pose pose = pos->GetPose();
-        Pose sp = source->GetPose();
+        Pose sp = dest->GetPose();
+        Geom g = map_model->GetGeom();
         
         point_t start( MetersToCell(pose.x, g.size.x, map_width), 
                                                 MetersToCell(pose.y, g.size.y, 
map_height) );
@@ -320,23 +361,30 @@
                                                                 path );
         
         //printf( "#%s:\n", result ? "PATH" : "NOPATH" );
+
+        graph.nodes.clear();
         
-        FOR_EACH( it, path )
-               {       
-                 //printf( "%d, %d\n", it->x, it->y );
-                 
-                 Node* node = new Node( Pose( CellToMeters(it->x, g.size.x, 
map_width ),
-                                                                               
                 CellToMeters(it->y, g.size.y, map_height),
-                                                                               
                 0, 0 ) );
-                 graph.AddNode( node );
-                 
-                 if( last_node )
-                        last_node->AddEdge( new Edge( node ) );
-                 
-                 last_node = node;
-               }
-        
-        //puts("");
+        unsigned int dist = 0;
+        //FOR_EACH( it, path )
+        for( std::vector<point_t>::reverse_iterator rit = path.rbegin();
+                       rit != path.rend();
+                       ++rit )                 
+        {      
+               //printf( "%d, %d\n", it->x, it->y );
+               
+               Node* node = new Node( Pose( CellToMeters(rit->x, g.size.x, 
map_width ),
+                                                                               
          CellToMeters(rit->y, g.size.y, map_height),
+                                                                               
          0, 0 ) );
+               
+               node->value = dist++;
+               
+               graph.AddNode( node );
+               
+               if( last_node )
+                 last_node->AddEdge( new Edge( node ) );
+               
+               last_node = node;
+        }       
   }
   
   void Dock()
@@ -506,15 +554,18 @@
 //               if( y < 0 ) y = 0;
 
 
-                 Model* goal = pos->GetFlagCount() ? sink : source;
-                 Pose gp = goal->GetPose();
+                 //Model* goal = pos->GetFlagCount() ? sink : source;
+                 //Pose gp = goal->GetPose();
                
                  //printf( "seeking %s\n", goal->Token() );
 
                  double a_goal = 
-                        // dtor( ( pos->GetFlagCount() ) ? have[y][x] : 
need[y][x] );          
-                        atan2( gp.y - pose.y, gp.x - pose.x );
+                        // dtor( ( pos->GetFlagCount() ) ? have[y][x] : 
need[y][x] );  // map
+                        //atan2( gp.y - pose.y, gp.x - pose.x ); // crow flies
+                        // use direction of lowest value node within range in 
graph 
 
+                        graph.GoodDirection( pose, 4.0 );
+
                  // if we are low on juice - find the direction to the 
recharger instead
                  if( Hungry() )                 
                         { 
@@ -618,31 +669,26 @@
         if( hypot( sourcepose.x-pose.x, sourcepose.y-pose.y ) < 
sourcegeom.size.x/2.0 &&
                  pos->GetFlagCount() < PAYLOAD )
                {
-                 if( ++robot->work_get > workduration )
-                        {
-                               // transfer a chunk from source to robot
-                               pos->PushFlag( robot->source->PopFlag() );
-                               robot->work_get = 0;    
-                        }        
+                 // transfer a chunk from source to robot
+                 pos->PushFlag( robot->source->PopFlag() );
+                 
+                 if( pos->GetFlagCount() == PAYLOAD )
+                        robot->Plan( robot->sink ); // we're done working
                }
         
-        robot->at_dest = false;
-
         // if we're close to the sink we lose a flag
         Pose sinkpose = robot->sink->GetPose();
+        Geom sinkgeom = robot->sink->GetGeom();
         
-        if( hypot( sinkpose.x-pose.x, sinkpose.y-pose.y ) < 
sourcegeom.size.x/2.0 &&
-                 pos->GetFlagCount() )
+        if( hypot( sinkpose.x-pose.x, sinkpose.y-pose.y ) < 
sinkgeom.size.x/2.0 && 
+                 pos->GetFlagCount() > 0 )
                {
-                 robot->at_dest = true;
+                 //puts( "dropping" );
+                 // transfer a chunk between robot and goal
+                 robot->sink->PushFlag( pos->PopFlag() );                
                  
-                 if( ++robot->work_put > workduration )
-                        {
-                               //puts( "dropping" );
-                               // transfer a chunk between robot and goal
-                               robot->sink->PushFlag( pos->PopFlag() );
-                               robot->work_put = 0;
-                        }
+                 if( pos->GetFlagCount() == 0 ) 
+                        robot->Plan( robot->source ); // we're done dropping 
off
                }
   
 
@@ -682,7 +728,7 @@
 
   
   static int FlagIncr( Model* mod, Robot* robot )
-  {
+ {
         printf( "model %s collected flag\n", mod->Token() );
         return 0;
   }
@@ -695,9 +741,10 @@
 };
 
 
-unsigned int Robot::map_width( 100 );
-unsigned int Robot::map_height( 100 );
+unsigned int Robot::map_width( 50 );
+unsigned int Robot::map_height( 50 );
 uint8_t* Robot::map_data( NULL );
+Model* Robot::map_model( NULL );
 
 void split( const std::string& text, const std::string& separators, 
std::vector<std::string>& words)
 {

Modified: code/stage/trunk/examples/ctrl/sink.cc
===================================================================
--- code/stage/trunk/examples/ctrl/sink.cc      2010-02-19 02:38:04 UTC (rev 
8557)
+++ code/stage/trunk/examples/ctrl/sink.cc      2010-02-19 21:28:18 UTC (rev 
8558)
@@ -8,8 +8,8 @@
 // Stage calls this when the model starts up
 extern "C" int Init( Model* mod )
 {  
-  mod->AddUpdateCallback( (stg_model_callback_t)Update, NULL );
-  mod->Subscribe();
+  //mod->AddUpdateCallback( (stg_model_callback_t)Update, NULL );
+  //mod->Subscribe();
   return 0; //ok
 }
 

Modified: code/stage/trunk/worlds/fasr2.world
===================================================================
--- code/stage/trunk/worlds/fasr2.world 2010-02-19 02:38:04 UTC (rev 8557)
+++ code/stage/trunk/worlds/fasr2.world 2010-02-19 21:28:18 UTC (rev 8558)
@@ -14,7 +14,7 @@
 quit_time 3600 # 1 hour of simulated time
 #quit_time 1800 # hour of simulated time
 
-resolution 0.02
+resolution 0.05
 
 threads 0
 
@@ -23,9 +23,9 @@
 ( 
   size [ 980.000 1016.000 ] 
 
-  center [ -15.341 4.193 ] 
+  center [ -0.203 -1.107 ] 
   rotate [ 0 0 ]
-  scale 13.528 
+  scale 9.251 
   
   show_data 1
   show_flags 1
@@ -163,7 +163,7 @@
 
 define autorob pioneer2dx                
 (               
- sicklaser( samples 32 range_max 5 laser_return 2 watts 30 )
+ sicklaser( samples 32 range_max 4 laser_return 2 watts 30 )
 # ctrl "fasr2"
  joules 100000 
  joules_capacity 400000 
@@ -194,8 +194,31 @@
 redbot( pose [-11.593 12.222 0 125.831] joules 100000 )
 redbot( pose [-10.303 12.222 0 125.831] joules 100000 )
 redbot( pose [-12.120 12.012 0 125.831] joules 100000 )
-redbot( pose [-10.777 11.353 0 125.831] joules 100000 )
+redbot( pose [-12.601 11.375 0 125.831] joules 100000 )
 
+redbot( pose [-12.145 10.886 0 125.831] joules 100000 )
+redbot( pose [-12.710 12.157 0 125.831] joules 100000 )
+redbot( pose [-12.275 12.775 0 125.831] joules 100000 )
+redbot( pose [-11.461 13.123 0 125.831] joules 100000 )
+redbot( pose [-10.679 13.036 0 125.831] joules 100000 )
+redbot( pose [-12.167 13.514 0 125.831] joules 100000 )
+redbot( pose [-12.992 13.047 0 125.831] joules 100000 )
+redbot( pose [-13.372 12.243 0 125.831] joules 100000 )
+redbot( pose [-13.296 11.331 0 125.831] joules 100000 )
+redbot( pose [-13.944 11.986 0 125.831] joules 100000 )
+
+redbot( pose [-14.005 12.947 0 125.831] joules 100000 )
+redbot( pose [-12.922 13.866 0 125.831] joules 100000 )
+redbot( pose [-13.698 13.866 0 125.831] joules 100000 )
+redbot( pose [-14.536 12.558 0 125.831] joules 100000 )
+redbot( pose [-14.577 11.782 0 125.831] joules 100000 )
+redbot( pose [-13.984 11.210 0 125.831] joules 100000 )
+redbot( pose [-13.392 10.618 0 125.831] joules 100000 )
+redbot( pose [-14.883 13.355 0 125.831] joules 100000 )
+redbot( pose [-15.231 12.681 0 125.831] joules 100000 )
+redbot( pose [-10.920 11.394 0 125.831] joules 100000 )
+
+
 bluebot( pose [-11.191 6.965 0 174.453] joules 200000 )
 bluebot( pose [-11.270 8.097 0 174.453] joules 200000 )
 bluebot( pose [-10.295 6.886 0 174.453] joules 200000 )
@@ -205,49 +228,159 @@
 bluebot( pose [-9.453 9.072 0 174.453] joules 200000 )
 bluebot( pose [-11.401 8.966 0 174.453] joules 200000 )
 bluebot( pose [-9.558 6.570 0 174.453] joules 200000 )
-bluebot( pose [-10.348 7.992 0 174.453] joules 200000 )
+bluebot( pose [-9.795 8.473 0 174.453] joules 200000 )
 
-#greenbot( pose [-4.059 16.220 0 -117.456] joules 400000 )
-#greenbot( pose [-2.610 16.957 0 -117.456] joules 400000 )
-#greenbot( pose [-1.794 15.087 0 -117.456] joules 400000 )
-#greenbot( pose [-4.164 15.272 0 -117.456] joules 400000 )
-#greenbot( pose [-3.348 14.771 0 -117.456] joules 400000 )
-#greenbot( pose [-2.242 15.930 0 -117.456] joules 400000 )
-#greenbot( pose [-3.348 17.036 0 -117.456] joules 400000 )
-#greenbot( pose [-4.322 17.510 0 -117.456] joules 400000 )
-#greenbot( pose [-4.822 16.536 0 -117.456] joules 400000 )
-#greenbot( pose [-4.980 15.693 0 -117.456] joules 400000 )
+bluebot( pose [-10.901 7.503 0 174.453] joules 200000 )
+bluebot( pose [-12.063 7.960 0 174.453] joules 200000 )
+bluebot( pose [-12.159 8.673 0 174.453] joules 200000 )
+bluebot( pose [-12.039 7.399 0 174.453] joules 200000 )
+bluebot( pose [-12.151 6.782 0 174.453] joules 200000 )
+bluebot( pose [-11.574 6.213 0 174.453] joules 200000 )
+bluebot( pose [-10.725 6.173 0 174.453] joules 200000 )
+bluebot( pose [-10.019 5.829 0 174.453] joules 200000 )
+bluebot( pose [-12.824 8.232 0 174.453] joules 200000 )
+bluebot( pose [-9.930 7.369 0 174.453] joules 200000 )
 
-#cyanbot( pose [-7.576 4.137 0 44.991] joules 100000 )
-#cyanbot( pose [-8.459 4.269 0 44.991] joules 100000 )
-#cyanbot( pose [-9.907 3.766 0 44.991] joules 100000 )
-#cyanbot( pose [-10.640 2.698 0 44.991] joules 100000 )
-#cyanbot( pose [-8.557 1.729 0 44.991] joules 100000 )
-#cyanbot( pose [-9.821 1.505 0 44.991] joules 100000 )
-#cyanbot( pose [-7.926 3.090 0 44.991] joules 100000 )
-#cyanbot( pose [-9.038 2.865 0 44.991] joules 100000 )
-#cyanbot( pose [-11.097 0.973 0 44.991] joules 100000 )
-#cyanbot( pose [-11.673 2.537 0 44.991] joules 100000 )
+bluebot( pose [-10.706 8.428 0 174.453] joules 200000 )
+bluebot( pose [-12.069 9.308 0 174.453] joules 200000 )
+bluebot( pose [-12.719 7.662 0 174.453] joules 200000 )
+bluebot( pose [-12.771 7.054 0 174.453] joules 200000 )
+bluebot( pose [-12.834 8.847 0 174.453] joules 200000 )
+bluebot( pose [-12.708 6.341 0 174.453] joules 200000 )
+bluebot( pose [-12.163 5.901 0 174.453] joules 200000 )
+bluebot( pose [-11.408 5.555 0 174.453] joules 200000 )
+bluebot( pose [-10.727 5.576 0 174.453] joules 200000 )
+bluebot( pose [-10.286 7.945 0 174.453] joules 200000 )
 
-#yellowbot( pose [-15.452 7.366 0 35.145] joules 200000 )
-#yellowbot( pose [-13.978 6.340 0 35.145] joules 200000 )
-#yellowbot( pose [-16.163 6.524 0 35.145] joules 200000 )
-#yellowbot( pose [-15.979 5.550 0 35.145] joules 200000 )
-#yellowbot( pose [-14.873 5.208 0 35.145] joules 200000 )
-#yellowbot( pose [-14.504 7.419 0 35.145] joules 200000 )
-#yellowbot( pose [-16.374 8.025 0 35.145] joules 200000 )
-#yellowbot( pose [-15.189 8.420 0 35.145] joules 200000 )
-#yellowbot( pose [-13.793 5.576 0 35.145] joules 200000 )
-#yellowbot( pose [-15.004 6.340 0 35.145] joules 200000 )
+cyanbot( pose [-3.491 17.578 0 -117.456] joules 400000 )
+cyanbot( pose [-2.642 17.210 0 -117.456] joules 400000 )
+cyanbot( pose [-1.415 18.181 0 -117.456] joules 400000 )
+cyanbot( pose [-6.058 20.955 0 -117.456] joules 400000 )
+cyanbot( pose [-5.274 21.749 0 -117.456] joules 400000 )
+cyanbot( pose [-1.642 17.193 0 -117.456] joules 400000 )
+cyanbot( pose [-3.095 18.236 0 -117.456] joules 400000 )
+cyanbot( pose [-4.038 18.173 0 -117.456] joules 400000 )
+cyanbot( pose [-4.538 17.452 0 -117.456] joules 400000 )
+cyanbot( pose [-4.651 20.435 0 -117.456] joules 400000 )
 
-#magentabot( pose [-7.850 14.772 0 -143.181] joules 300000 )
-#magentabot( pose [-8.323 14.087 0 -143.181] joules 300000 )
-#magentabot( pose [-7.850 13.613 0 -143.181] joules 300000 )
-#magentabot( pose [-7.139 14.772 0 -143.181] joules 300000 )
-#magentabot( pose [-6.401 14.061 0 -143.181] joules 300000 )
-#magentabot( pose [-7.165 13.429 0 -143.181] joules 300000 )
-#magentabot( pose [-6.428 13.323 0 -143.181] joules 300000 )
-#magentabot( pose [-7.455 15.430 0 -143.181] joules 300000 )
-#magentabot( pose [-6.507 14.851 0 -143.181] joules 300000 )
-#magentabot( pose [-8.718 14.877 0 -143.181] joules 300000 )
+cyanbot( pose [-3.635 20.622 0 -117.456] joules 400000 )
+cyanbot( pose [-5.346 20.649 0 -117.456] joules 400000 )
+cyanbot( pose [-4.518 21.397 0 -117.456] joules 400000 )
+cyanbot( pose [-3.796 21.611 0 -117.456] joules 400000 )
+cyanbot( pose [-3.074 19.927 0 -117.456] joules 400000 )
+cyanbot( pose [-2.940 21.424 0 -117.456] joules 400000 )
+cyanbot( pose [-2.326 20.756 0 -117.456] joules 400000 )
+cyanbot( pose [-1.898 19.927 0 -117.456] joules 400000 )
+cyanbot( pose [-1.737 19.125 0 -117.456] joules 400000 )
+cyanbot( pose [-5.320 17.681 0 -117.456] joules 400000 )
 
+cyanbot( pose [-4.708 18.475 0 -117.456] joules 400000 )
+cyanbot( pose [-5.615 18.687 0 -117.456] joules 400000 )
+cyanbot( pose [-6.341 17.840 0 -117.456] joules 400000 )
+cyanbot( pose [-3.521 18.825 0 -117.456] joules 400000 )
+cyanbot( pose [-4.194 19.473 0 -117.456] joules 400000 )
+cyanbot( pose [-5.192 19.564 0 -117.456] joules 400000 )
+cyanbot( pose [-6.341 19.836 0 -117.456] joules 400000 )
+cyanbot( pose [-2.742 19.050 0 -117.456] joules 400000 )
+cyanbot( pose [-2.198 18.082 0 -117.456] joules 400000 )
+cyanbot( pose [-6.301 18.782 0 -117.456] joules 400000 )
+
+greenbot( pose [-10.874 0.353 0 44.991] joules 100000 )
+greenbot( pose [-10.489 1.610 0 44.991] joules 100000 )
+greenbot( pose [-9.907 3.766 0 44.991] joules 100000 )
+greenbot( pose [-10.640 2.698 0 44.991] joules 100000 )
+greenbot( pose [-9.196 2.015 0 44.991] joules 100000 )
+greenbot( pose [-9.821 1.505 0 44.991] joules 100000 )
+greenbot( pose [-10.261 0.974 0 44.991] joules 100000 )
+greenbot( pose [-9.038 2.865 0 44.991] joules 100000 )
+greenbot( pose [-11.097 0.973 0 44.991] joules 100000 )
+greenbot( pose [-11.155 2.003 0 44.991] joules 100000 )
+
+greenbot( pose [-11.819 1.550 0 44.991] joules 100000 )
+greenbot( pose [-12.401 2.181 0 44.991] joules 100000 )
+greenbot( pose [-11.236 3.330 0 44.991] joules 100000 )
+greenbot( pose [-12.078 3.298 0 44.991] joules 100000 )
+greenbot( pose [-9.909 2.456 0 44.991] joules 100000 )
+greenbot( pose [-10.734 4.123 0 44.991] joules 100000 )
+greenbot( pose [-11.592 4.398 0 44.991] joules 100000 )
+greenbot( pose [-12.903 2.877 0 44.991] joules 100000 )
+greenbot( pose [-12.434 1.372 0 44.991] joules 100000 )
+greenbot( pose [-10.555 3.358 0 44.991] joules 100000 )
+
+greenbot( pose [-9.516 3.311 0 44.991] joules 100000 )
+greenbot( pose [-12.308 3.949 0 44.991] joules 100000 )
+greenbot( pose [-13.185 3.682 0 44.991] joules 100000 )
+greenbot( pose [-13.014 2.167 0 44.991] joules 100000 )
+greenbot( pose [-13.719 2.634 0 44.991] joules 100000 )
+greenbot( pose [-13.633 1.986 0 44.991] joules 100000 )
+greenbot( pose [-13.138 1.385 0 44.991] joules 100000 )
+greenbot( pose [-12.490 0.575 0 44.991] joules 100000 )
+greenbot( pose [-11.775 0.699 0 44.991] joules 100000 )
+greenbot( pose [-11.641 2.586 0 44.991] joules 100000 )
+
+yellowbot( pose [-15.452 7.366 0 35.145] joules 200000 )
+yellowbot( pose [-13.978 6.340 0 35.145] joules 200000 )
+yellowbot( pose [-16.173 6.901 0 35.145] joules 200000 )
+yellowbot( pose [-15.979 5.550 0 35.145] joules 200000 )
+yellowbot( pose [-14.873 5.208 0 35.145] joules 200000 )
+yellowbot( pose [-14.504 7.419 0 35.145] joules 200000 )
+yellowbot( pose [-16.374 8.025 0 35.145] joules 200000 )
+yellowbot( pose [-15.189 8.420 0 35.145] joules 200000 )
+yellowbot( pose [-13.793 5.576 0 35.145] joules 200000 )
+yellowbot( pose [-16.914 7.279 0 35.145] joules 200000 )
+
+yellowbot( pose [-17.222 6.291 0 35.145] joules 200000 )
+yellowbot( pose [-17.885 7.198 0 35.145] joules 200000 )
+yellowbot( pose [-17.254 8.218 0 35.145] joules 200000 )
+yellowbot( pose [-17.060 5.498 0 35.145] joules 200000 )
+yellowbot( pose [-18.047 6.227 0 35.145] joules 200000 )
+yellowbot( pose [-16.930 4.640 0 35.145] joules 200000 )
+yellowbot( pose [-17.966 5.417 0 35.145] joules 200000 )
+yellowbot( pose [-15.927 4.640 0 35.145] joules 200000 )
+yellowbot( pose [-14.988 4.236 0 35.145] joules 200000 )
+yellowbot( pose [-15.706 6.151 0 35.145] joules 200000 )
+
+yellowbot( pose [-16.419 6.225 0 35.145] joules 200000 )
+yellowbot( pose [-14.574 5.868 0 35.145] joules 200000 )
+yellowbot( pose [-15.759 7.850 0 35.145] joules 200000 )
+yellowbot( pose [-15.801 8.625 0 35.145] joules 200000 )
+yellowbot( pose [-16.598 8.835 0 35.145] joules 200000 )
+yellowbot( pose [-14.417 6.791 0 35.145] joules 200000 )
+yellowbot( pose [-15.235 6.801 0 35.145] joules 200000 )
+yellowbot( pose [-15.444 5.260 0 35.145] joules 200000 )
+yellowbot( pose [-16.598 5.187 0 35.145] joules 200000 )
+yellowbot( pose [-16.461 4.159 0 35.145] joules 200000 )
+
+magentabot( pose [-7.850 14.772 0 -143.181] joules 300000 )
+magentabot( pose [-8.323 14.087 0 -143.181] joules 300000 )
+magentabot( pose [-7.850 13.613 0 -143.181] joules 300000 )
+magentabot( pose [-7.139 14.772 0 -143.181] joules 300000 )
+magentabot( pose [-6.401 14.061 0 -143.181] joules 300000 )
+magentabot( pose [-7.165 13.429 0 -143.181] joules 300000 )
+magentabot( pose [-6.428 13.323 0 -143.181] joules 300000 )
+magentabot( pose [-7.455 15.430 0 -143.181] joules 300000 )
+magentabot( pose [-6.507 14.851 0 -143.181] joules 300000 )
+magentabot( pose [-8.343 17.162 0 -143.181] joules 300000 )
+
+magentabot( pose [-9.099 17.489 0 -143.181] joules 300000 )
+magentabot( pose [-9.610 15.854 0 -143.181] joules 300000 )
+magentabot( pose [-9.589 16.569 0 -143.181] joules 300000 )
+magentabot( pose [-10.059 15.221 0 -143.181] joules 300000 )
+magentabot( pose [-10.264 16.099 0 -143.181] joules 300000 )
+magentabot( pose [-9.814 17.325 0 -143.181] joules 300000 )
+magentabot( pose [-8.180 16.447 0 -143.181] joules 300000 )
+magentabot( pose [-8.629 17.999 0 -143.181] joules 300000 )
+magentabot( pose [-9.467 18.142 0 -143.181] joules 300000 )
+magentabot( pose [-9.079 16.263 0 -143.181] joules 300000 )
+
+magentabot( pose [-9.196 15.409 0 -143.181] joules 300000 )
+magentabot( pose [-9.598 14.812 0 -143.181] joules 300000 )
+magentabot( pose [-9.304 14.280 0 -143.181] joules 300000 )
+magentabot( pose [-8.946 13.737 0 -143.181] joules 300000 )
+magentabot( pose [-8.761 13.140 0 -143.181] joules 300000 )
+magentabot( pose [-8.153 12.629 0 -143.181] joules 300000 )
+magentabot( pose [-7.393 12.618 0 -143.181] joules 300000 )
+magentabot( pose [-8.467 15.712 0 -143.181] joules 300000 )
+magentabot( pose [-7.762 16.132 0 -143.181] joules 300000 )
+magentabot( pose [-8.794 14.855 0 -143.181] joules 300000 )
+

Added: code/stage/trunk/worlds/fasr2_duo.world
===================================================================
--- code/stage/trunk/worlds/fasr2_duo.world                             (rev 0)
+++ code/stage/trunk/worlds/fasr2_duo.world     2010-02-19 21:28:18 UTC (rev 
8558)
@@ -0,0 +1,320 @@
+
+# FASR demo world 
+# Authors: Richard Vaughan
+# $Id: fasr.world,v 1.4 2008-04-01 23:57:41 rtv Exp $
+
+include "pioneer.inc"
+include "map.inc"
+include "sick.inc"
+
+speedup 10.000
+paused 1
+
+# time at which to pause (in GUI mode) or quit (in headless mode) the 
simulation
+quit_time 3600 # 1 hour of simulated time
+#quit_time 1800 # hour of simulated time
+
+resolution 0.02
+
+threads 0
+
+# configure the GUI window
+window
+( 
+  size [ 980.000 1016.000 ] 
+
+  center [ -3.598 0.596 ] 
+  rotate [ 0 0 ]
+  scale 9.570 
+  
+  show_data 1
+  show_flags 1
+
+  # interval 50
+)
+
+# load an environment bitmap
+floorplan
+( 
+  name "cave" 
+  pose [0 0 0 0]
+  size [100.000 100.000 0.600]
+  bitmap "bitmaps/cave.png"
+)
+
+zone
+(
+  color "green"
+  pose [ 38.682 -25.820 0 0 ]
+  name "green_source"            
+  ctrl "source"
+)
+
+zone( color "DarkGreen"
+  pose [ -10.930 44.453 0 0 ]
+  name "green_sink"              
+  ctrl "sink"
+)
+
+zone( color "blue"
+  pose [ -40.264 -18.084 0 0 ]
+  name "blue_source"
+  ctrl "source"
+)
+
+zone( color "DarkBlue"
+  pose [ 39.986 37.517 0 0 ]
+  name "blue_sink"
+  ctrl "sink"
+)
+
+zone( color "red"
+  pose [ -41.325 32.878 0 0 ]
+  name "red_source"
+  ctrl "source"
+)
+
+zone( color "DarkRed"
+  pose [ 40.730 22.450 0 0 ]
+  name "red_sink"
+  ctrl "sink"
+)
+
+zone( color "yellow"
+  pose [ -37.146 -39.531 0 0 ]
+  name "yellow_source"
+  ctrl "source"
+)
+
+zone( color_rgba [ 0.8 0.8 0 1 ]
+  pose [ -38.243 9.591 0 0 ]
+  name "yellow_sink"
+  ctrl "sink"
+)
+
+zone( color "cyan"
+  pose [ 26.255 41.679 0 0 ]
+  name "cyan_source"
+  ctrl "source"
+)
+
+zone( color "DarkCyan"
+  pose [ 9.412 -40.363 0 0 ]
+  name "cyan_sink"
+  ctrl "sink"
+)
+
+zone( color "magenta"
+  pose [ -14.246 -42.150 0 0 ]
+  name "magenta_source"
+  ctrl "source"
+)
+
+zone( color "DarkMagenta"
+  pose [ 38.511 -14.808 0 0 ]
+  name "magenta_sink"
+  ctrl "sink"
+)
+
+
+define charging_bump model
+(
+  pose [0.240 0 -0.100 0 ] 
+  size [0.120 0.050 0.100] 
+  take_watts 2000.0 
+  color "orange" 
+  obstacle_return 0
+)
+
+define charge_station model
+(  
+  size [ 0.100 0.300 0.100 ]
+  color "purple"
+  
+  # side blocks to restrict view angle
+  model( color "purple" size [0.100 0.050 0.250] pose [ 0 0.100 0 0 ] )
+  model( color "purple" size [0.100 0.050 0.250] pose [ 0 -0.100 0 0 ] ) 
+
+  # the charging block
+  model( 
+    pose [ 0.010 0 0 0 ]
+    color "yellow"
+    size [ 0.050 0.200 0.100 ]
+    joules -1  # provides infinite energy
+    give_watts 2000 
+    fiducial_return 2 # look for this in the fiducial sensor
+        
+        alwayson 1 # so we give charge without any explicit subscriber
+   )
+
+)
+
+#charge_station(  pose [ 7.908 -2.510 0 0 ] )
+#charge_station(  pose [ 7.920 -3.847 0 0 ] )
+#charge_station(  pose [ 7.449 -4.974 0 -40.107 ] )
+#charge_station(  pose [ 7.698 -1.432 0 31.513 ] )
+#charge_station(  pose [ 5.162 -0.814 0 88.809 ] )
+
+#charge_station(  pose [ 3.927 -0.693 0 88.808 ] )
+#charge_station(  pose [ 6.427 -0.964 0 74.484 ] )
+#charge_station(  pose [ 4.964 -0.752 0 88.808 ] )
+#charge_station(  pose [ 3.832 -0.704 0 91.673 ] )
+#charge_station(  pose [ 7.949 -4.019 0 0 ] )
+
+define autorob pioneer2dx                
+(               
+ sicklaser( samples 32 range_max 5 laser_return 2 watts 30 )
+# ctrl "fasr2"
+ joules 100000 
+ joules_capacity 400000 
+ fiducial_return 0
+ charging_bump( fiducial( range_max 5 pose [ 0 0 -0.100 0 ] ) )
+
+ # small speed optimization
+ # trail_length 0
+)
+
+define redbot autorob( color "red" ctrl "fasr2 red" )            
+define greenbot autorob( color "green" ctrl "fasr2 green" )              
+define bluebot autorob( color "blue" ctrl "fasr2 blue" )                 
+define cyanbot autorob( color "cyan" ctrl "fasr2 cyan" )                 
+define yellowbot autorob( color "yellow" ctrl "fasr2 yellow" )
+define magentabot autorob( color "magenta" ctrl "fasr2 magenta" )              
  
+
+#define bot autorob( ctrl "fasr2 " )"            
+#define bot autorob( ctrl "fasr2 " )"            
+#define bot autorob( ctrl "fasr2 " )"            
+
+redbot( pose [-10.909 12.012 0 125.831] joules 100000 )
+redbot( pose [-11.699 11.274 0 125.831] joules 100000 )
+#redbot( pose [-11.356 10.669 0 125.831] joules 100000 )
+#redbot( pose [-10.066 11.432 0 125.831] joules 100000 )
+#redbot( pose [-10.698 10.458 0 125.831] joules 100000 )
+#redbot( pose [-9.987 10.669 0 125.831] joules 100000 )
+#redbot( pose [-11.593 12.222 0 125.831] joules 100000 )
+#redbot( pose [-10.303 12.222 0 125.831] joules 100000 )
+#redbot( pose [-12.120 12.012 0 125.831] joules 100000 )
+#redbot( pose [-12.601 11.375 0 125.831] joules 100000 )
+
+#redbot( pose [-12.145 10.886 0 125.831] joules 100000 )
+#redbot( pose [-12.710 12.157 0 125.831] joules 100000 )
+#redbot( pose [-12.275 12.775 0 125.831] joules 100000 )
+#redbot( pose [-11.461 13.123 0 125.831] joules 100000 )
+#redbot( pose [-10.679 13.036 0 125.831] joules 100000 )
+#redbot( pose [-12.167 13.514 0 125.831] joules 100000 )
+#redbot( pose [-12.992 13.047 0 125.831] joules 100000 )
+#redbot( pose [-13.372 12.243 0 125.831] joules 100000 )
+#redbot( pose [-13.296 11.331 0 125.831] joules 100000 )
+#redbot( pose [-10.777 11.353 0 125.831] joules 100000 )
+
+
+bluebot( pose [-11.191 6.965 0 174.453] joules 200000 )
+bluebot( pose [-11.270 8.097 0 174.453] joules 200000 )
+#bluebot( pose [-10.295 6.886 0 174.453] joules 200000 )
+#bluebot( pose [-8.900 8.361 0 174.453] joules 200000 )
+#bluebot( pose [-10.374 8.940 0 174.453] joules 200000 )
+#bluebot( pose [-9.321 7.650 0 174.453] joules 200000 )
+#bluebot( pose [-9.453 9.072 0 174.453] joules 200000 )
+#bluebot( pose [-11.401 8.966 0 174.453] joules 200000 )
+#bluebot( pose [-9.558 6.570 0 174.453] joules 200000 )
+#bluebot( pose [-9.795 8.473 0 174.453] joules 200000 )
+
+#bluebot( pose [-10.901 7.503 0 174.453] joules 200000 )
+#bluebot( pose [-12.063 7.960 0 174.453] joules 200000 )
+#bluebot( pose [-12.159 8.673 0 174.453] joules 200000 )
+#bluebot( pose [-12.039 7.399 0 174.453] joules 200000 )
+#bluebot( pose [-12.151 6.782 0 174.453] joules 200000 )
+#bluebot( pose [-11.574 6.213 0 174.453] joules 200000 )
+#bluebot( pose [-10.725 6.173 0 174.453] joules 200000 )
+#bluebot( pose [-10.019 5.829 0 174.453] joules 200000 )
+#bluebot( pose [-12.824 8.232 0 174.453] joules 200000 )
+#bluebot( pose [-10.276 7.872 0 174.453] joules 200000 )
+
+cyanbot( pose [-4.059 16.220 0 -117.456] joules 400000 )
+cyanbot( pose [-2.610 16.957 0 -117.456] joules 400000 )
+#cyanbot( pose [-1.794 15.087 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.164 15.272 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.348 14.771 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.242 15.930 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.348 17.036 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.322 17.510 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.822 16.536 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.373 17.628 0 -117.456] joules 400000 )
+
+#cyanbot( pose [-4.708 18.475 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.615 18.687 0 -117.456] joules 400000 )
+#cyanbot( pose [-6.341 17.840 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.710 18.415 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.194 19.473 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.192 19.564 0 -117.456] joules 400000 )
+#cyanbot( pose [-6.341 19.836 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.742 19.050 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.198 18.082 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.796 16.509 0 -117.456] joules 400000 )
+
+greenbot( pose [-7.576 4.137 0 44.991] joules 100000 )
+greenbot( pose [-8.459 4.269 0 44.991] joules 100000 )
+#greenbot( pose [-9.907 3.766 0 44.991] joules 100000 )
+#greenbot( pose [-10.640 2.698 0 44.991] joules 100000 )
+#greenbot( pose [-8.557 1.729 0 44.991] joules 100000 )
+#greenbot( pose [-9.821 1.505 0 44.991] joules 100000 )
+#greenbot( pose [-7.926 3.090 0 44.991] joules 100000 )
+#greenbot( pose [-9.038 2.865 0 44.991] joules 100000 )
+#greenbot( pose [-11.097 0.973 0 44.991] joules 100000 )
+#greenbot( pose [-11.155 2.003 0 44.991] joules 100000 )
+
+#greenbot( pose [-11.819 1.550 0 44.991] joules 100000 )
+#greenbot( pose [-12.401 2.181 0 44.991] joules 100000 )
+#greenbot( pose [-11.236 3.330 0 44.991] joules 100000 )
+#greenbot( pose [-12.078 3.298 0 44.991] joules 100000 )
+#greenbot( pose [-9.909 2.456 0 44.991] joules 100000 )
+#greenbot( pose [-10.734 4.123 0 44.991] joules 100000 )
+#greenbot( pose [-11.592 4.398 0 44.991] joules 100000 )
+#greenbot( pose [-12.903 2.877 0 44.991] joules 100000 )
+#greenbot( pose [-12.434 1.372 0 44.991] joules 100000 )
+#greenbot( pose [-11.689 2.634 0 44.991] joules 100000 )
+
+yellowbot( pose [-15.452 7.366 0 35.145] joules 200000 )
+yellowbot( pose [-13.978 6.340 0 35.145] joules 200000 )
+#yellowbot( pose [-16.163 6.524 0 35.145] joules 200000 )
+#yellowbot( pose [-15.979 5.550 0 35.145] joules 200000 )
+#yellowbot( pose [-14.873 5.208 0 35.145] joules 200000 )
+#yellowbot( pose [-14.504 7.419 0 35.145] joules 200000 )
+#yellowbot( pose [-16.374 8.025 0 35.145] joules 200000 )
+#yellowbot( pose [-15.189 8.420 0 35.145] joules 200000 )
+#yellowbot( pose [-13.793 5.576 0 35.145] joules 200000 )
+#yellowbot( pose [-16.914 7.279 0 35.145] joules 200000 )
+
+#yellowbot( pose [-17.222 6.291 0 35.145] joules 200000 )
+#yellowbot( pose [-17.885 7.198 0 35.145] joules 200000 )
+#yellowbot( pose [-17.254 8.218 0 35.145] joules 200000 )
+#yellowbot( pose [-17.060 5.498 0 35.145] joules 200000 )
+#yellowbot( pose [-18.047 6.227 0 35.145] joules 200000 )
+#yellowbot( pose [-16.930 4.640 0 35.145] joules 200000 )
+#yellowbot( pose [-17.966 5.417 0 35.145] joules 200000 )
+#yellowbot( pose [-15.927 4.640 0 35.145] joules 200000 )
+#yellowbot( pose [-14.988 4.236 0 35.145] joules 200000 )
+#yellowbot( pose [-15.004 6.340 0 35.145] joules 200000 )
+
+magentabot( pose [-7.850 14.772 0 -143.181] joules 300000 )
+magentabot( pose [-8.323 14.087 0 -143.181] joules 300000 )
+#magentabot( pose [-7.850 13.613 0 -143.181] joules 300000 )
+#magentabot( pose [-7.139 14.772 0 -143.181] joules 300000 )
+#magentabot( pose [-6.401 14.061 0 -143.181] joules 300000 )
+#magentabot( pose [-7.165 13.429 0 -143.181] joules 300000 )
+#magentabot( pose [-6.428 13.323 0 -143.181] joules 300000 )
+#magentabot( pose [-7.455 15.430 0 -143.181] joules 300000 )
+#magentabot( pose [-6.507 14.851 0 -143.181] joules 300000 )
+#magentabot( pose [-8.425 15.507 0 -143.181] joules 300000 )
+
+#magentabot( pose [-9.196 15.409 0 -143.181] joules 300000 )
+#magentabot( pose [-9.598 14.812 0 -143.181] joules 300000 )
+#magentabot( pose [-9.304 14.280 0 -143.181] joules 300000 )
+#magentabot( pose [-8.946 13.737 0 -143.181] joules 300000 )
+#magentabot( pose [-8.761 13.140 0 -143.181] joules 300000 )
+#magentabot( pose [-8.153 12.629 0 -143.181] joules 300000 )
+#magentabot( pose [-7.393 12.618 0 -143.181] joules 300000 )
+#magentabot( pose [-8.957 16.386 0 -143.181] joules 300000 )
+#magentabot( pose [-7.925 16.234 0 -143.181] joules 300000 )
+#magentabot( pose [-8.794 14.855 0 -143.181] joules 300000 )
+

Added: code/stage/trunk/worlds/fasr2_solo.world
===================================================================
--- code/stage/trunk/worlds/fasr2_solo.world                            (rev 0)
+++ code/stage/trunk/worlds/fasr2_solo.world    2010-02-19 21:28:18 UTC (rev 
8558)
@@ -0,0 +1,320 @@
+
+# FASR demo world 
+# Authors: Richard Vaughan
+# $Id: fasr.world,v 1.4 2008-04-01 23:57:41 rtv Exp $
+
+include "pioneer.inc"
+include "map.inc"
+include "sick.inc"
+
+speedup 10.000
+paused 1
+
+# time at which to pause (in GUI mode) or quit (in headless mode) the 
simulation
+quit_time 3600 # 1 hour of simulated time
+#quit_time 1800 # hour of simulated time
+
+resolution 0.02
+
+threads 0
+
+# configure the GUI window
+window
+( 
+  size [ 980.000 1016.000 ] 
+
+  center [ -3.598 0.596 ] 
+  rotate [ 0 0 ]
+  scale 9.570 
+  
+  show_data 1
+  show_flags 1
+
+  # interval 50
+)
+
+# load an environment bitmap
+floorplan
+( 
+  name "cave" 
+  pose [0 0 0 0]
+  size [100.000 100.000 0.600]
+  bitmap "bitmaps/cave.png"
+)
+
+zone
+(
+  color "green"
+  pose [ 38.682 -25.820 0 0 ]
+  name "green_source"            
+  ctrl "source"
+)
+
+zone( color "DarkGreen"
+  pose [ -10.930 44.453 0 0 ]
+  name "green_sink"              
+  ctrl "sink"
+)
+
+zone( color "blue"
+  pose [ -40.264 -18.084 0 0 ]
+  name "blue_source"
+  ctrl "source"
+)
+
+zone( color "DarkBlue"
+  pose [ 39.986 37.517 0 0 ]
+  name "blue_sink"
+  ctrl "sink"
+)
+
+zone( color "red"
+  pose [ -41.325 32.878 0 0 ]
+  name "red_source"
+  ctrl "source"
+)
+
+zone( color "DarkRed"
+  pose [ 40.730 22.450 0 0 ]
+  name "red_sink"
+  ctrl "sink"
+)
+
+zone( color "yellow"
+  pose [ -37.146 -39.531 0 0 ]
+  name "yellow_source"
+  ctrl "source"
+)
+
+zone( color_rgba [ 0.8 0.8 0 1 ]
+  pose [ -38.243 9.591 0 0 ]
+  name "yellow_sink"
+  ctrl "sink"
+)
+
+zone( color "cyan"
+  pose [ 26.255 41.679 0 0 ]
+  name "cyan_source"
+  ctrl "source"
+)
+
+zone( color "DarkCyan"
+  pose [ 9.412 -40.363 0 0 ]
+  name "cyan_sink"
+  ctrl "sink"
+)
+
+zone( color "magenta"
+  pose [ -14.246 -42.150 0 0 ]
+  name "magenta_source"
+  ctrl "source"
+)
+
+zone( color "DarkMagenta"
+  pose [ 38.511 -14.808 0 0 ]
+  name "magenta_sink"
+  ctrl "sink"
+)
+
+
+define charging_bump model
+(
+  pose [0.240 0 -0.100 0 ] 
+  size [0.120 0.050 0.100] 
+  take_watts 2000.0 
+  color "orange" 
+  obstacle_return 0
+)
+
+define charge_station model
+(  
+  size [ 0.100 0.300 0.100 ]
+  color "purple"
+  
+  # side blocks to restrict view angle
+  model( color "purple" size [0.100 0.050 0.250] pose [ 0 0.100 0 0 ] )
+  model( color "purple" size [0.100 0.050 0.250] pose [ 0 -0.100 0 0 ] ) 
+
+  # the charging block
+  model( 
+    pose [ 0.010 0 0 0 ]
+    color "yellow"
+    size [ 0.050 0.200 0.100 ]
+    joules -1  # provides infinite energy
+    give_watts 2000 
+    fiducial_return 2 # look for this in the fiducial sensor
+        
+        alwayson 1 # so we give charge without any explicit subscriber
+   )
+
+)
+
+#charge_station(  pose [ 7.908 -2.510 0 0 ] )
+#charge_station(  pose [ 7.920 -3.847 0 0 ] )
+#charge_station(  pose [ 7.449 -4.974 0 -40.107 ] )
+#charge_station(  pose [ 7.698 -1.432 0 31.513 ] )
+#charge_station(  pose [ 5.162 -0.814 0 88.809 ] )
+
+#charge_station(  pose [ 3.927 -0.693 0 88.808 ] )
+#charge_station(  pose [ 6.427 -0.964 0 74.484 ] )
+#charge_station(  pose [ 4.964 -0.752 0 88.808 ] )
+#charge_station(  pose [ 3.832 -0.704 0 91.673 ] )
+#charge_station(  pose [ 7.949 -4.019 0 0 ] )
+
+define autorob pioneer2dx                
+(               
+ sicklaser( samples 32 range_max 5 laser_return 2 watts 30 )
+# ctrl "fasr2"
+ joules 100000 
+ joules_capacity 400000 
+ fiducial_return 0
+ charging_bump( fiducial( range_max 5 pose [ 0 0 -0.100 0 ] ) )
+
+ # small speed optimization
+ # trail_length 0
+)
+
+define redbot autorob( color "red" ctrl "fasr2 red" )            
+define greenbot autorob( color "green" ctrl "fasr2 green" )              
+define bluebot autorob( color "blue" ctrl "fasr2 blue" )                 
+define cyanbot autorob( color "cyan" ctrl "fasr2 cyan" )                 
+define yellowbot autorob( color "yellow" ctrl "fasr2 yellow" )
+define magentabot autorob( color "magenta" ctrl "fasr2 magenta" )              
  
+
+#define bot autorob( ctrl "fasr2 " )"            
+#define bot autorob( ctrl "fasr2 " )"            
+#define bot autorob( ctrl "fasr2 " )"            
+
+redbot( pose [-10.909 12.012 0 125.831] joules 100000 )
+#redbot( pose [-11.699 11.274 0 125.831] joules 100000 )
+#redbot( pose [-11.356 10.669 0 125.831] joules 100000 )
+#redbot( pose [-10.066 11.432 0 125.831] joules 100000 )
+#redbot( pose [-10.698 10.458 0 125.831] joules 100000 )
+#redbot( pose [-9.987 10.669 0 125.831] joules 100000 )
+#redbot( pose [-11.593 12.222 0 125.831] joules 100000 )
+#redbot( pose [-10.303 12.222 0 125.831] joules 100000 )
+#redbot( pose [-12.120 12.012 0 125.831] joules 100000 )
+#redbot( pose [-12.601 11.375 0 125.831] joules 100000 )
+
+#redbot( pose [-12.145 10.886 0 125.831] joules 100000 )
+#redbot( pose [-12.710 12.157 0 125.831] joules 100000 )
+#redbot( pose [-12.275 12.775 0 125.831] joules 100000 )
+#redbot( pose [-11.461 13.123 0 125.831] joules 100000 )
+#redbot( pose [-10.679 13.036 0 125.831] joules 100000 )
+#redbot( pose [-12.167 13.514 0 125.831] joules 100000 )
+#redbot( pose [-12.992 13.047 0 125.831] joules 100000 )
+#redbot( pose [-13.372 12.243 0 125.831] joules 100000 )
+#redbot( pose [-13.296 11.331 0 125.831] joules 100000 )
+#redbot( pose [-10.777 11.353 0 125.831] joules 100000 )
+
+
+bluebot( pose [-11.191 6.965 0 174.453] joules 200000 )
+#bluebot( pose [-11.270 8.097 0 174.453] joules 200000 )
+#bluebot( pose [-10.295 6.886 0 174.453] joules 200000 )
+#bluebot( pose [-8.900 8.361 0 174.453] joules 200000 )
+#bluebot( pose [-10.374 8.940 0 174.453] joules 200000 )
+#bluebot( pose [-9.321 7.650 0 174.453] joules 200000 )
+#bluebot( pose [-9.453 9.072 0 174.453] joules 200000 )
+#bluebot( pose [-11.401 8.966 0 174.453] joules 200000 )
+#bluebot( pose [-9.558 6.570 0 174.453] joules 200000 )
+#bluebot( pose [-9.795 8.473 0 174.453] joules 200000 )
+
+#bluebot( pose [-10.901 7.503 0 174.453] joules 200000 )
+#bluebot( pose [-12.063 7.960 0 174.453] joules 200000 )
+#bluebot( pose [-12.159 8.673 0 174.453] joules 200000 )
+#bluebot( pose [-12.039 7.399 0 174.453] joules 200000 )
+#bluebot( pose [-12.151 6.782 0 174.453] joules 200000 )
+#bluebot( pose [-11.574 6.213 0 174.453] joules 200000 )
+#bluebot( pose [-10.725 6.173 0 174.453] joules 200000 )
+#bluebot( pose [-10.019 5.829 0 174.453] joules 200000 )
+#bluebot( pose [-12.824 8.232 0 174.453] joules 200000 )
+#bluebot( pose [-10.276 7.872 0 174.453] joules 200000 )
+
+cyanbot( pose [-4.059 16.220 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.610 16.957 0 -117.456] joules 400000 )
+#cyanbot( pose [-1.794 15.087 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.164 15.272 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.348 14.771 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.242 15.930 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.348 17.036 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.322 17.510 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.822 16.536 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.373 17.628 0 -117.456] joules 400000 )
+
+#cyanbot( pose [-4.708 18.475 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.615 18.687 0 -117.456] joules 400000 )
+#cyanbot( pose [-6.341 17.840 0 -117.456] joules 400000 )
+#cyanbot( pose [-3.710 18.415 0 -117.456] joules 400000 )
+#cyanbot( pose [-4.194 19.473 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.192 19.564 0 -117.456] joules 400000 )
+#cyanbot( pose [-6.341 19.836 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.742 19.050 0 -117.456] joules 400000 )
+#cyanbot( pose [-2.198 18.082 0 -117.456] joules 400000 )
+#cyanbot( pose [-5.796 16.509 0 -117.456] joules 400000 )
+
+greenbot( pose [-7.576 4.137 0 44.991] joules 100000 )
+#greenbot( pose [-8.459 4.269 0 44.991] joules 100000 )
+#greenbot( pose [-9.907 3.766 0 44.991] joules 100000 )
+#greenbot( pose [-10.640 2.698 0 44.991] joules 100000 )
+#greenbot( pose [-8.557 1.729 0 44.991] joules 100000 )
+#greenbot( pose [-9.821 1.505 0 44.991] joules 100000 )
+#greenbot( pose [-7.926 3.090 0 44.991] joules 100000 )
+#greenbot( pose [-9.038 2.865 0 44.991] joules 100000 )
+#greenbot( pose [-11.097 0.973 0 44.991] joules 100000 )
+#greenbot( pose [-11.155 2.003 0 44.991] joules 100000 )
+
+#greenbot( pose [-11.819 1.550 0 44.991] joules 100000 )
+#greenbot( pose [-12.401 2.181 0 44.991] joules 100000 )
+#greenbot( pose [-11.236 3.330 0 44.991] joules 100000 )
+#greenbot( pose [-12.078 3.298 0 44.991] joules 100000 )
+#greenbot( pose [-9.909 2.456 0 44.991] joules 100000 )
+#greenbot( pose [-10.734 4.123 0 44.991] joules 100000 )
+#greenbot( pose [-11.592 4.398 0 44.991] joules 100000 )
+#greenbot( pose [-12.903 2.877 0 44.991] joules 100000 )
+#greenbot( pose [-12.434 1.372 0 44.991] joules 100000 )
+#greenbot( pose [-11.689 2.634 0 44.991] joules 100000 )
+
+yellowbot( pose [-15.452 7.366 0 35.145] joules 200000 )
+#yellowbot( pose [-13.978 6.340 0 35.145] joules 200000 )
+#yellowbot( pose [-16.163 6.524 0 35.145] joules 200000 )
+#yellowbot( pose [-15.979 5.550 0 35.145] joules 200000 )
+#yellowbot( pose [-14.873 5.208 0 35.145] joules 200000 )
+#yellowbot( pose [-14.504 7.419 0 35.145] joules 200000 )
+#yellowbot( pose [-16.374 8.025 0 35.145] joules 200000 )
+#yellowbot( pose [-15.189 8.420 0 35.145] joules 200000 )
+#yellowbot( pose [-13.793 5.576 0 35.145] joules 200000 )
+#yellowbot( pose [-16.914 7.279 0 35.145] joules 200000 )
+
+#yellowbot( pose [-17.222 6.291 0 35.145] joules 200000 )
+#yellowbot( pose [-17.885 7.198 0 35.145] joules 200000 )
+#yellowbot( pose [-17.254 8.218 0 35.145] joules 200000 )
+#yellowbot( pose [-17.060 5.498 0 35.145] joules 200000 )
+#yellowbot( pose [-18.047 6.227 0 35.145] joules 200000 )
+#yellowbot( pose [-16.930 4.640 0 35.145] joules 200000 )
+#yellowbot( pose [-17.966 5.417 0 35.145] joules 200000 )
+#yellowbot( pose [-15.927 4.640 0 35.145] joules 200000 )
+#yellowbot( pose [-14.988 4.236 0 35.145] joules 200000 )
+#yellowbot( pose [-15.004 6.340 0 35.145] joules 200000 )
+
+magentabot( pose [-7.850 14.772 0 -143.181] joules 300000 )
+#magentabot( pose [-8.323 14.087 0 -143.181] joules 300000 )
+#magentabot( pose [-7.850 13.613 0 -143.181] joules 300000 )
+#magentabot( pose [-7.139 14.772 0 -143.181] joules 300000 )
+#magentabot( pose [-6.401 14.061 0 -143.181] joules 300000 )
+#magentabot( pose [-7.165 13.429 0 -143.181] joules 300000 )
+#magentabot( pose [-6.428 13.323 0 -143.181] joules 300000 )
+#magentabot( pose [-7.455 15.430 0 -143.181] joules 300000 )
+#magentabot( pose [-6.507 14.851 0 -143.181] joules 300000 )
+#magentabot( pose [-8.425 15.507 0 -143.181] joules 300000 )
+
+#magentabot( pose [-9.196 15.409 0 -143.181] joules 300000 )
+#magentabot( pose [-9.598 14.812 0 -143.181] joules 300000 )
+#magentabot( pose [-9.304 14.280 0 -143.181] joules 300000 )
+#magentabot( pose [-8.946 13.737 0 -143.181] joules 300000 )
+#magentabot( pose [-8.761 13.140 0 -143.181] joules 300000 )
+#magentabot( pose [-8.153 12.629 0 -143.181] joules 300000 )
+#magentabot( pose [-7.393 12.618 0 -143.181] joules 300000 )
+#magentabot( pose [-8.957 16.386 0 -143.181] joules 300000 )
+#magentabot( pose [-7.925 16.234 0 -143.181] joules 300000 )
+#magentabot( pose [-8.794 14.855 0 -143.181] joules 300000 )
+


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

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to