Revision: 8596
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8596&view=rev
Author:   rtv
Date:     2010-03-20 02:06:09 +0000 (Sat, 20 Mar 2010)

Log Message:
-----------
fasr2 work

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

Modified: code/stage/trunk/examples/ctrl/fasr2.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-18 22:48:25 UTC (rev 
8595)
+++ code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-20 02:06:09 UTC (rev 
8596)
@@ -41,6 +41,18 @@
 // on-host implementation
 #include <list>
 
+class Task
+{
+public:
+  Model* source;
+  Model* sink;
+  unsigned int participants;
+  
+  Task( Model* source, Model* sink ) 
+  : source(source), sink(sink), participants(0) 
+  {}
+};
+
 class LocalQueue : public Queue
 {
 public:
@@ -189,6 +201,9 @@
         heading_result = atan2( best_node->pose.y - pose.y,
                                                                         
best_node->pose.x - pose.x );
 
+        // add a little bias
+        heading_result = normalize( heading_result + 0.25 );
+
         return true;
   }
 };
@@ -268,12 +283,20 @@
 class Robot
 {
 private:
+  static std::vector<Robot*> robots;
+
+  long int wait_started_at;
+  
   ModelPosition* pos;
   ModelLaser* laser;
   ModelRanger* ranger;
   ModelFiducial* fiducial;
-  Model *source, *sink;
+  
+  unsigned int task;
+
+  //Model *source, *sink;
   Model* fuel_zone;
+  Model* pool_zone;
   int avoidcount, randcount;
   int work_get, work_put;
   bool charger_ahoy;
@@ -304,50 +327,64 @@
   bool laser_sub;
   bool ranger_sub;
 
+  bool force_recharge;
+
   static std::vector<LocalQueue> queues;
 
-public:
+public:  
+  static std::vector<Task> tasks;
 
   Robot( ModelPosition* pos, 
-                       Model* source,
-                       Model* sink,
-                       Model* fuel) 
-        : pos(pos), 
-               laser( (ModelLaser*)pos->GetUnusedModelOfType( "laser" )),
-               ranger( (ModelRanger*)pos->GetUnusedModelOfType( "ranger" )),
-               fiducial( (ModelFiducial*)pos->GetUnusedModelOfType( "fiducial" 
)),     
-               source(source), 
-               sink(sink), 
-               fuel_zone(fuel),
-               avoidcount(0), 
-               randcount(0), 
-               work_get(0), 
-               work_put(0),
-               charger_ahoy(false),
-               charger_bearing(0),
-               charger_range(0),
-               charger_heading(0),
-               mode(MODE_WORK),
-               docked_angle(0),
-               goal(source),
-               cached_goal_pose(),
-               graph(),
-               graphvis( graph ),
-               last_node( NULL ),
-               node_interval( 20 ),
-               node_interval_countdown( node_interval ),
-               fiducial_sub(false),            
-               laser_sub(false),
-               ranger_sub(false)
+                       Model* fuel,
+                       Model* pool ) 
+        : 
+        wait_started_at(-1),
+        pos(pos), 
+        laser( (ModelLaser*)pos->GetUnusedModelOfType( "laser" )),
+        ranger( (ModelRanger*)pos->GetUnusedModelOfType( "ranger" )),
+        fiducial( (ModelFiducial*)pos->GetUnusedModelOfType( "fiducial" )),    
+        task(random() % tasks.size() ), // choose a task at random
+        //source( tasks[task].source ), 
+        //sink( tasks[task].sink ), 
+        fuel_zone(fuel),
+        pool_zone(pool),
+        avoidcount(0), 
+        randcount(0), 
+        work_get(0), 
+        work_put(0),
+        charger_ahoy(false),
+        charger_bearing(0),
+        charger_range(0),
+        charger_heading(0),
+        mode(MODE_WORK),
+        docked_angle(0),
+        goal(tasks[task].source),
+        cached_goal_pose(),
+        graph(),
+        graphvis( graph ),
+        last_node( NULL ),
+        node_interval( 20 ),
+        node_interval_countdown( node_interval ),
+        fiducial_sub(false),           
+        laser_sub(false),
+        ranger_sub(false),
+        force_recharge( false )
   {
+        // add myself to the static list of all robots
+        robots.push_back( this );
+        
         // need at least these models to get any work done
         // (pos must be good, as we used it in the initialization list)
         assert( laser );
         assert( fiducial );
         assert( ranger );
-        assert( source );
-        assert( sink );
+        assert( goal );
 
+        // match the color of my destination
+        pos->SetColor( tasks[task].source->GetColor() );
+
+        tasks[task].participants++;
+
         //      pos->GetUnusedModelOfType( "laser" );
         
         // PositionUpdate() checks to see if we reached source or sink
@@ -546,7 +583,7 @@
                }                         
         else
                {
-                 printf( "FASR: %s docking but can't see a charger\n", 
pos->Token() );
+                 //printf( "FASR: %s docking but can't see a charger\n", 
pos->Token() );
                  pos->Stop();
                  EnableFiducial( false );
                  mode = MODE_WORK; // should get us back on track eventually
@@ -559,9 +596,17 @@
                  mode = MODE_UNDOCK;
                  EnableRanger(true); // enable the sonar to see behind us
                  EnableLaser(true);
-               }
+                 EnableFiducial(true);
+                 force_recharge = false;                 
+               }        
   }
 
+  void SetTask( unsigned int t )
+  {
+        //tasks[task].participants--;
+        task = t;
+        tasks[task].participants++;
+  }
 
   void UnDock()
   {
@@ -608,8 +653,18 @@
                         {
                                // we're pointing the right way, so we're done
                                mode = MODE_WORK;  
-                               SetGoal( pos->GetFlagCount() ? sink : source );
                                
+                               // if we're not working on a drop-off
+                               if( pos->GetFlagCount() == 0 )
+                                 {
+                                        // pick a new task at random
+                                        SetTask( random() % tasks.size() );
+                                        SetGoal( tasks[task].source );
+                                 }
+                               else
+                                 SetGoal( tasks[task].sink );
+
+                               
                                EnableFiducial(false);
                                EnableRanger(false);
                         }
@@ -627,7 +682,6 @@
         double minright = 1e6;
   
         // Get the data
-        //ModelLaser::Sample* scan = laser->GetSamples( &sample_count );
         const std::vector<ModelLaser::Sample>& scan = laser->GetSamples();
     uint32_t sample_count = scan.size();
 
@@ -779,7 +833,7 @@
 
   bool Hungry()
   {
-        return( pos->FindPowerPack()->ProportionRemaining() < 0.2 );
+        return( force_recharge || pos->FindPowerPack()->ProportionRemaining() 
< 0.2 );
   }     
 
   bool Full()
@@ -792,9 +846,29 @@
   {  
         return robot->Update();
   }
-
+  
   int Update( void )
   {
+        if(  strcmp( pos->Token(), "position:0") == 0 )
+               {
+                 static int seconds = 0;
+                 
+                 int timenow = pos->GetWorld()->SimTimeNow() / 1e6;
+                 
+                 if( timenow - seconds > 5 )
+                        {
+                               seconds = timenow;
+                               
+                               // report the task participation                
  
+                               printf( "time: %d sec\n", seconds ); 
+                                                 
+                               unsigned int sz = tasks.size(); 
+                               for( unsigned int i=0; i<sz; ++i )
+                                 printf( "\t task[%u] %3u (%s)\n", 
+                                                        i, 
tasks[i].participants, tasks[i].source->Token() );                              
                    
+                        }
+               }
+        
         Pose pose = pos->GetPose();
 
 #if 0   
@@ -863,43 +937,80 @@
         //pose.z += 0.0001;
         //pos->SetPose( pose );
         
-        // if we're close to the source we get a flag
-        Pose sourcepose = source->GetPose();
-        Geom sourcegeom = source->GetGeom();
+        if( goal == tasks[task].source )
+               {
+                 // if we're close to the source we get a flag
+                 Pose sourcepose = goal->GetPose();
+                 Geom sourcegeom = goal->GetGeom();
+                 
+                 stg_meters_t dest_dist = hypot( sourcepose.x-pose.x, 
sourcepose.y-pose.y );
+                 
+                 // when we get close enough, we start waiting
+                 if( dest_dist < sourcegeom.size.x/2.0 ) // nearby
+                        if( wait_started_at < 0 && pos->GetFlagCount() == 0 ) 
+                               {
+                                 wait_started_at = 
pos->GetWorld()->SimTimeNow() / 1e6; // usec to seconds
+                                 //printf( "%s begain waiting at %ld 
seconds\n", pos->Token(), wait_started_at );
+                               }
+                 
+                 if( wait_started_at > 0 )
+                        {
+                               long int waited = 
(pos->GetWorld()->SimTimeNow() / 1e6) - wait_started_at;
+                               
+                               
+                               // leave with small probability
+                               if( drand48() < 0.0005 )
+                                 {
+                                        //printf( "%s abandoning task %s after 
waiting %ld seconds\n",
+                                        //             pos->Token(), 
goal->Token(), waited );
+                                        
+                                        force_recharge = true; // forces 
hungry to return true
+                                        tasks[task].participants--;
+                                        wait_started_at = -1;
+                                        return 0;
+                                 }
+                        }
 
-        stg_meters_t dest_dist = hypot( sourcepose.x-pose.x, 
sourcepose.y-pose.y );
-        
-        // if we're close, go get in line
-        if( dest_dist < sourcegeom.size.x )
-               JoinQueue(0);
-        else
-               LeaveQueue(0);
+                 // when we get onto the square
+                 if( dest_dist < sourcegeom.size.x/2.0 &&                      
        
+                               pos->GetFlagCount() < PAYLOAD )
+                        {
+                               
+                               // transfer a chunk from source to robot
+                               pos->PushFlag( goal->PopFlag() );
 
-        if( dest_dist < sourcegeom.size.x/2.0 &&
-                 pos->GetFlagCount() < PAYLOAD )
-               {
-                 // transfer a chunk from source to robot
-                 pos->PushFlag( source->PopFlag() );
+                               if( pos->GetFlagCount() == 1 && wait_started_at 
> 0 )
+                                 {
+                                        // stop waiting, since we have 
received our first flag
+                                        wait_started_at = -1;
+                                 }                      
+
+                               if( pos->GetFlagCount() == PAYLOAD )
+                                 SetGoal( tasks[task].sink ); // we're done 
working
+                        }
+               }        
+        else if( goal == tasks[task].sink )
+               {                        
+                 // if we're close to the sink we lose a flag
+                 Pose sinkpose = goal->GetPose();
+                 Geom sinkgeom = goal->GetGeom();
                  
-                 if( pos->GetFlagCount() == PAYLOAD )
-                        SetGoal( sink ); // we're done working
+                 if( hypot( sinkpose.x-pose.x, sinkpose.y-pose.y ) < 
sinkgeom.size.x/2.0 && 
+                               pos->GetFlagCount() > 0 )
+                        {
+                               //puts( "dropping" );
+                               // transfer a chunk between robot and goal
+                               goal->PushFlag( pos->PopFlag() );               
  
+                               
+                               if( pos->GetFlagCount() == 0 ) 
+                                 SetGoal( tasks[task].source ); // we're done 
dropping off
+                        }
                }
-        
-        // if we're close to the sink we lose a flag
-        Pose sinkpose = sink->GetPose();
-        Geom sinkgeom = sink->GetGeom();
-        
-        if( hypot( sinkpose.x-pose.x, sinkpose.y-pose.y ) < 
sinkgeom.size.x/2.0 && 
-                 pos->GetFlagCount() > 0 )
+        else
                {
-                 //puts( "dropping" );
-                 // transfer a chunk between robot and goal
-                 sink->PushFlag( pos->PopFlag() );               
+                 assert( goal == fuel_zone || goal == pool_zone );
+               }
                  
-                 if( pos->GetFlagCount() == 0 ) 
-                        SetGoal( source ); // we're done dropping off
-               }
-        
         //printf( "diss: %.2f\n", pos->FindPowerPack()->GetDissipated() );
 
         //   if( laser->power_pack && laser->power_pack->charging )
@@ -981,6 +1092,8 @@
 Model* Robot::map_model( NULL );
 
 std::vector<LocalQueue> Robot::queues(100);
+std::vector<Robot*> Robot::robots;
+std::vector<Task> Robot::tasks;
 
 void split( const std::string& text, const std::string& separators, 
std::vector<std::string>& words)
 {
@@ -996,10 +1109,7 @@
         }
 }
 
-const std::string sources[] = {"red", "green", "blue", "cyan", "yellow", 
"magenta" };
-const unsigned int sources_count = 6;
 
-
 // Stage calls this when the model starts up
 extern "C" int Init( Model* mod, CtrlArgs* args )
 {  
@@ -1009,22 +1119,26 @@
   std::vector<std::string> words;
   split( args->worldfile, std::string(" \t"), words );
   
-  //printf( "words size %u\n", words.size() );  
+  // printf( "words size %u\n", words.size() );  
   //FOR_EACH( it, words )
-  //printf( "word: %s\n", it->c_str() );
+  // printf( "word: %s\n", it->c_str() );
   //puts( "" );
   
   // expecting a task color name as the 1th argument
-  assert( words.size() == 2 );
-  assert( words[1].size() > 0 );
+  assert( words.size() > 1 );
+  
+  if( Robot::tasks.size() == 0 )
+        {
+               
+               World* w = mod->GetWorld();
+               for( unsigned int s=1; s<words.size(); s++ )
+                 Robot::tasks.push_back( Task( w->GetModel( words[s] + 
"_source"),
+                                                                               
                  w->GetModel( words[s] + "_sink") ) );                  
+        }
 
-  // pick a source at random
-  const std::string& color = sources[ rand() % sources_count ];
-  
   new Robot( (ModelPosition*)mod,
-                                mod->GetWorld()->GetModel( color + "_source" ),
-                                mod->GetWorld()->GetModel( color + "_sink" ),
-                                mod->GetWorld()->GetModel( "fuel_zone" ) );
+                                mod->GetWorld()->GetModel( "fuel_zone" ),
+                                mod->GetWorld()->GetModel( "pool_zone" ) );
 
   return 0; //ok
 }

Modified: code/stage/trunk/examples/ctrl/sink.cc
===================================================================
--- code/stage/trunk/examples/ctrl/sink.cc      2010-03-18 22:48:25 UTC (rev 
8595)
+++ code/stage/trunk/examples/ctrl/sink.cc      2010-03-20 02:06:09 UTC (rev 
8596)
@@ -1,15 +1,15 @@
 #include "stage.hh"
 using namespace Stg;
 
-const int INTERVAL = 20;
+const int INTERVAL = 6000;
 
 int Update( Model* mod, void* dummy );
 
 // 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->AddCallback( Model::CB_UPDATE, (stg_model_callback_t)Update, NULL );
+  mod->Subscribe();
   return 0; //ok
 }
 
@@ -17,7 +17,10 @@
 int Update( Model* mod, void* dummy )
 {
   if( mod->GetWorld()->GetUpdateCount() % INTERVAL  == 0 )
-    mod->PopFlag();
+        // get rid of all the flags
+        while( mod->GetFlagCount() )
+               mod->PopFlag();
+
   return 0; // run again
 }
 

Modified: code/stage/trunk/examples/ctrl/source.cc
===================================================================
--- code/stage/trunk/examples/ctrl/source.cc    2010-03-18 22:48:25 UTC (rev 
8595)
+++ code/stage/trunk/examples/ctrl/source.cc    2010-03-20 02:06:09 UTC (rev 
8596)
@@ -1,24 +1,57 @@
 #include "stage.hh"
 using namespace Stg;
 
-const unsigned int INTERVAL = 100;
+
 const double FLAGSZ = 0.25;
-const unsigned int CAPACITY = 1;
 
+typedef struct 
+{
+  unsigned int capacity;
+  unsigned int interval;
+} info_t;
 
-int Update( Model* mod, void* dummy )
+int Update( Model* mod, info_t* info )
 {
-  if((  mod->GetWorld()->GetUpdateCount() % INTERVAL == 0 )
-         && ( mod->GetFlagCount() < CAPACITY) )
-        mod->PushFlag( new Model::Flag( Color( 1,1,0 ), FLAGSZ ) );
+  if((  mod->GetWorld()->GetUpdateCount() % info->interval  == 0 )
+         && ( mod->GetFlagCount() < info->capacity) )
+               mod->PushFlag( new Model::Flag( Color( 1,1,0 ), FLAGSZ ) );
 
   return 0; // run again
 }
 
+void split( const std::string& text, 
+                               const std::string& separators, 
+                               std::vector<std::string>& words)
+{
+  int n = text.length();
+  int start, stop;
+  start = text.find_first_not_of(separators);
+  while ((start >= 0) && (start < n))
+        {
+               stop = text.find_first_of(separators, start);
+               if ((stop < 0) || (stop > n)) stop = n;
+               words.push_back(text.substr(start, stop - start));
+               start = text.find_first_not_of(separators, stop+1);
+        }
+}
+
+
 // Stage calls this when the model starts up
-extern "C" int Init( Model* mod )
-{
-  mod->AddCallback( Model::CB_UPDATE, (stg_model_callback_t)Update, NULL );  
+extern "C" int Init( Model* mod, CtrlArgs* args )
+{  
+  // tokenize the argument string into words
+  std::vector<std::string> words;
+  split( args->worldfile, std::string(" \t"), words );
+  
+  // expect an interval as the 1th argument
+  assert( words.size() == 3 );
+  assert( words[1].size() > 0 );
+  
+  info_t* info = new info_t;
+  info->interval = atoi( words[1].c_str() );
+  info->capacity = atoi( words[2].c_str() );
+
+  mod->AddCallback( Model::CB_UPDATE, (stg_model_callback_t)Update, info );  
   mod->Subscribe();
   return 0; //ok
 }

Modified: code/stage/trunk/worlds/fasr2.world
===================================================================
--- code/stage/trunk/worlds/fasr2.world 2010-03-18 22:48:25 UTC (rev 8595)
+++ code/stage/trunk/worlds/fasr2.world 2010-03-20 02:06:09 UTC (rev 8596)
@@ -21,11 +21,11 @@
 # configure the GUI window
 window
 ( 
-  size [ 1226.000 1080.000 ] 
+  size [ 935.000 868.000 ] 
 
-  center [ -0.805 -1.069 ] 
+  center [ -3.612 -5.382 ] 
   rotate [ 0 0 ]
-  scale 9.771 
+  scale 7.038 
   
   show_data 1
   show_flags 1
@@ -42,76 +42,78 @@
   bitmap "bitmaps/cave.png"
 )
 
+
+
+zone( color "red"
+  pose [ 17.876 43.114 0 0 ]
+  name "red_source"
+  ctrl "source 50 10"
+)
+
+zone( color "DarkRed"
+  pose [ 41.888 42.482 0 0 ]
+  name "red_sink"
+  ctrl "sink"
+)
 zone
 (
   color "green"
-  pose [ 38.682 -25.820 0 0 ]
+  pose [ 45.076 -26.104 0 0 ]
   name "green_source"            
-  ctrl "source"
+  ctrl "source 200 10"
 )
 
 zone( color "DarkGreen"
-  pose [ -10.930 44.453 0 0 ]
+  pose [ -26.796 4.962 0 0 ]
   name "green_sink"              
   ctrl "sink"
 )
 
 zone( color "blue"
-  pose [ -40.264 -18.084 0 0 ]
+  pose [ 42.463 14.006 0 0 ]
   name "blue_source"
-  ctrl "source"
+  ctrl "source 200 10"
 )
 
 zone( color "DarkBlue"
-  pose [ 39.986 37.517 0 0 ]
+  pose [ 42.069 33.839 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 [ 0.464 -43.755 0 0 ]
+  pose [ 20.687 -42.588 0 0 ]
   name "yellow_source"
-  ctrl "source"
+  ctrl "source 200 10"
 )
 
 zone( color_rgba [ 0.8 0.8 0 1 ]
-  pose [ -38.243 9.591 0 0 ]
+  pose [ -15.632 -42.596 0 0 ]
   name "yellow_sink"
   ctrl "sink"
 )
 
 zone( color "cyan"
-  pose [ 26.255 41.679 0 0 ]
+  pose [ -43.076 36.202 0 0 ]
   name "cyan_source"
-  ctrl "source"
+  ctrl "source 200 10"
 )
 
 zone( color "DarkCyan"
-  pose [ 9.412 -40.363 0 0 ]
+  pose [ -43.606 -31.133 0 0 ]
   name "cyan_sink"
   ctrl "sink"
 )
 
 zone( color "magenta"
-  pose [ -19.859 -42.092 0 0 ]
+  pose [ -12.135 43.772 0 0 ]
   name "magenta_source"
-  ctrl "source"
+  ctrl "source 200 10" 
 )
 
 zone( color "DarkMagenta"
-  pose [ 38.511 -14.808 0 0 ]
+  pose [ 45.047 -13.245 0 0 ]
   name "magenta_sink"
   ctrl "sink"
 )
@@ -187,6 +189,13 @@
       gui_move 0
 )
 
+zone( color "gray5" 
+               pose [ -19.459 -42.499 0 0 ]
+               name "pool_zone"
+               size [ 1.000 1.000 0.010 ] 
+      gui_move 0
+)
+
 define buffer model
 (
   color "orange" 
@@ -222,211 +231,209 @@
 
  # small speed optimization
  # trail_length 0
+ 
+ ctrl "fasr2 red green blue yellow cyan magenta" 
 )
 
-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" )              
  
 
 
-redbot( pose [-11.388 12.267 0 166.581] kjoules 20 )
-redbot( pose [-12.208 11.744 0 135.003] kjoules 20 )
-redbot( pose [-12.289 10.814 0 147.497] kjoules 20 )
-redbot( pose [-10.642 11.563 0 123.708] kjoules 20 )
-redbot( pose [-11.378 11.274 0 143.281] kjoules 20 )
-redbot( pose [-10.200 11.012 0 46.529] kjoules 20 )
-redbot( pose [-13.006 13.061 0 168.778] kjoules 20 )
-redbot( pose [-12.466 13.333 0 163.730] kjoules 20 )
-redbot( pose [-13.740 12.740 0 157.546] kjoules 20 )
-redbot( pose [-15.434 11.856 0 138.616] kjoules 20 )
+autorob( pose [-11.388 12.267 0 166.581] kjoules 400 )
+autorob( pose [-12.208 11.744 0 135.003] kjoules 400 )
+autorob( pose [-12.289 10.814 0 147.497] kjoules 400 )
+autorob( pose [-10.642 11.563 0 123.708] kjoules 400 )
+autorob( pose [-11.378 11.274 0 143.281] kjoules 400 )
+autorob( pose [-10.200 11.012 0 46.529] kjoules 400 )
+autorob( pose [-13.006 13.061 0 168.778] kjoules 400 )
+autorob( pose [-12.466 13.333 0 163.730] kjoules 400 )
+autorob( pose [-13.740 12.740 0 157.546] kjoules 400 )
+autorob( pose [-15.434 11.856 0 138.616] kjoules 400 )
 
-redbot( pose [-12.841 10.666 0 125.831] kjoules 40 )
-redbot( pose [-12.710 12.157 0 125.831] kjoules 40 )
-redbot( pose [-12.214 12.593 0 125.831] kjoules 40 )
-redbot( pose [-11.461 13.123 0 125.831] kjoules 40 )
-redbot( pose [-10.679 13.036 0 125.831] kjoules 40 )
-redbot( pose [-12.277 14.027 0 125.831] kjoules 40 )
-redbot( pose [-13.981 13.377 0 125.831] kjoules 40 )
-redbot( pose [-13.372 12.243 0 125.831] kjoules 40 )
-redbot( pose [-13.296 11.331 0 125.831] kjoules 40 )
-redbot( pose [-13.944 11.986 0 125.831] kjoules 40 )
+autorob( pose [-12.841 10.666 0 125.831] kjoules 400 )
+autorob( pose [-12.710 12.157 0 125.831] kjoules 400 )
+autorob( pose [-12.214 12.593 0 125.831] kjoules 400 )
+autorob( pose [-11.461 13.123 0 125.831] kjoules 400 )
+autorob( pose [-10.679 13.036 0 125.831] kjoules 400 )
+autorob( pose [-12.277 14.027 0 125.831] kjoules 400 )
+autorob( pose [-13.981 13.377 0 125.831] kjoules 400 )
+autorob( pose [-13.372 12.243 0 125.831] kjoules 400 )
+autorob( pose [-13.296 11.331 0 125.831] kjoules 400 )
+autorob( pose [-13.944 11.986 0 125.831] kjoules 400 )
 
-#redbot( pose [-14.580 14.279 0 125.831] kjoules 400 )
-#redbot( pose [-12.922 13.866 0 125.831] kjoules 400 )
-#redbot( pose [-13.698 13.866 0 125.831] kjoules 400 )
-#redbot( pose [-14.536 12.558 0 125.831] kjoules 400 )
-#redbot( pose [-14.577 11.782 0 125.831] kjoules 400 )
-#redbot( pose [-13.984 11.210 0 125.831] kjoules 400 )
-#redbot( pose [-13.392 10.618 0 125.831] kjoules 400 )
-#redbot( pose [-14.883 13.355 0 125.831] kjoules 400 )
-#redbot( pose [-15.231 12.681 0 125.831] kjoules 400 )
-#redbot( pose [-11.102 10.456 0 125.831] kjoules 400 )
+autorob( pose [-14.580 14.279 0 125.831] kjoules 400 )
+autorob( pose [-12.922 13.866 0 125.831] kjoules 400 )
+autorob( pose [-13.698 13.866 0 125.831] kjoules 400 )
+autorob( pose [-14.536 12.558 0 125.831] kjoules 400 )
+autorob( pose [-14.577 11.782 0 125.831] kjoules 400 )
+autorob( pose [-13.984 11.210 0 125.831] kjoules 400 )
+autorob( pose [-13.392 10.618 0 125.831] kjoules 400 )
+autorob( pose [-14.883 13.355 0 125.831] kjoules 400 )
+autorob( pose [-15.231 12.681 0 125.831] kjoules 400 )
+autorob( pose [-11.102 10.456 0 125.831] kjoules 400 )
 
-bluebot( pose [-13.004 6.811 0 166.511] kjoules 200 )
-bluebot( pose [-13.272 8.255 0 175.835] kjoules 200 )
-bluebot( pose [-12.180 6.527 0 -132.938] kjoules 200 )
-bluebot( pose [-9.625 8.080 0 171.172] kjoules 200 )
-bluebot( pose [-12.844 9.141 0 170.270] kjoules 200 )
-bluebot( pose [-11.369 8.011 0 -157.026] kjoules 200 )
-bluebot( pose [-11.453 8.651 0 -120.696] kjoules 200 )
-bluebot( pose [-13.876 8.850 0 -177.508] kjoules 200 )
-bluebot( pose [-11.753 5.510 0 -139.502] kjoules 200 )
-bluebot( pose [-10.121 8.843 0 160.986] kjoules 200 )
+autorob( pose [-13.004 6.811 0 166.511] kjoules 200 )
+autorob( pose [-13.272 8.255 0 175.835] kjoules 200 )
+autorob( pose [-12.180 6.527 0 -132.938] kjoules 200 )
+autorob( pose [-9.625 8.080 0 171.172] kjoules 200 )
+autorob( pose [-12.844 9.141 0 170.270] kjoules 200 )
+autorob( pose [-11.369 8.011 0 -157.026] kjoules 200 )
+autorob( pose [-11.453 8.651 0 -120.696] kjoules 200 )
+autorob( pose [-13.876 8.850 0 -177.508] kjoules 200 )
+autorob( pose [-11.753 5.510 0 -139.502] kjoules 200 )
+autorob( pose [-10.121 8.843 0 160.986] kjoules 200 )
 
-bluebot( pose [-10.901 7.503 0 174.453] kjoules 200 )
-bluebot( pose [-12.063 7.960 0 174.453] kjoules 200 )
-bluebot( pose [-12.159 8.673 0 174.453] kjoules 200 )
-bluebot( pose [-12.039 7.399 0 174.453] kjoules 200 )
-bluebot( pose [-11.455 6.855 0 174.453] kjoules 200 )
-bluebot( pose [-11.574 6.213 0 174.453] kjoules 200 )
-bluebot( pose [-10.725 6.173 0 174.453] kjoules 200 )
-bluebot( pose [-10.019 5.829 0 174.453] kjoules 200 )
-bluebot( pose [-9.828 6.667 0 174.453] kjoules 200 )
-bluebot( pose [-9.930 7.369 0 174.453] kjoules 200 )
+autorob( pose [-10.901 7.503 0 174.453] kjoules 200 )
+autorob( pose [-12.063 7.960 0 174.453] kjoules 200 )
+autorob( pose [-12.159 8.673 0 174.453] kjoules 200 )
+autorob( pose [-12.039 7.399 0 174.453] kjoules 200 )
+autorob( pose [-11.455 6.855 0 174.453] kjoules 200 )
+autorob( pose [-11.574 6.213 0 174.453] kjoules 200 )
+autorob( pose [-10.725 6.173 0 174.453] kjoules 200 )
+autorob( pose [-10.019 5.829 0 174.453] kjoules 200 )
+autorob( pose [-9.828 6.667 0 174.453] kjoules 200 )
+autorob( pose [-9.930 7.369 0 174.453] kjoules 200 )
 
-#bluebot( pose [-10.706 8.428 0 174.453] kjoules 200 )
-#bluebot( pose [-12.069 9.308 0 174.453] kjoules 200 )
-#bluebot( pose [-12.719 7.662 0 174.453] kjoules 200 )
-#bluebot( pose [-13.739 7.599 0 174.453] kjoules 200 )
-#bluebot( pose [-10.988 9.361 0 174.453] kjoules 200 )
-#bluebot( pose [-12.708 6.341 0 174.453] kjoules 200 )
-#bluebot( pose [-12.163 5.901 0 174.453] kjoules 200 )
-#bluebot( pose [-10.500 6.917 0 174.453] kjoules 200 )
-#bluebot( pose [-10.727 5.576 0 174.453] kjoules 200 )
-#bluebot( pose [-10.286 7.945 0 174.453] kjoules 200 )
+autorob( pose [-10.706 8.428 0 174.453] kjoules 200 )
+autorob( pose [-12.069 9.308 0 174.453] kjoules 200 )
+autorob( pose [-12.719 7.662 0 174.453] kjoules 200 )
+autorob( pose [-13.739 7.599 0 174.453] kjoules 200 )
+autorob( pose [-10.988 9.361 0 174.453] kjoules 200 )
+autorob( pose [-12.708 6.341 0 174.453] kjoules 200 )
+autorob( pose [-12.163 5.901 0 174.453] kjoules 200 )
+autorob( pose [-10.500 6.917 0 174.453] kjoules 200 )
+autorob( pose [-10.727 5.576 0 174.453] kjoules 200 )
+autorob( pose [-10.286 7.945 0 174.453] kjoules 200 )
 
-cyanbot( pose [-1.975 18.008 0 67.057] kjoules 400 )
-cyanbot( pose [-0.577 17.752 0 28.480] kjoules 400 )
-cyanbot( pose [0.185 18.933 0 64.025] kjoules 400 )
-cyanbot( pose [-4.470 20.502 0 5.703] kjoules 400 )
-cyanbot( pose [-3.229 21.138 0 5.731] kjoules 400 )
-cyanbot( pose [0.290 17.823 0 24.200] kjoules 400 )
-cyanbot( pose [-1.945 19.158 0 54.480] kjoules 400 )
-cyanbot( pose [-3.733 17.894 0 54.588] kjoules 400 )
-cyanbot( pose [-3.232 17.616 0 52.768] kjoules 400 )
-cyanbot( pose [-2.570 20.624 0 20.367] kjoules 400 )
+autorob( pose [-1.975 18.008 0 67.057] kjoules 400 )
+autorob( pose [-0.577 17.752 0 28.480] kjoules 400 )
+autorob( pose [0.185 18.933 0 64.025] kjoules 400 )
+autorob( pose [-4.470 20.502 0 5.703] kjoules 400 )
+autorob( pose [-3.229 21.138 0 5.731] kjoules 400 )
+autorob( pose [0.290 17.823 0 24.200] kjoules 400 )
+autorob( pose [-1.945 19.158 0 54.480] kjoules 400 )
+autorob( pose [-3.733 17.894 0 54.588] kjoules 400 )
+autorob( pose [-3.232 17.616 0 52.768] kjoules 400 )
+autorob( pose [-2.570 20.624 0 20.367] kjoules 400 )
 
-cyanbot( pose [-3.635 20.622 0 -117.456] kjoules 400 )
-cyanbot( pose [-5.346 20.649 0 -117.456] kjoules 400 )
-cyanbot( pose [-4.518 21.397 0 -117.456] kjoules 400 )
-cyanbot( pose [-3.796 21.611 0 -117.456] kjoules 400 )
-cyanbot( pose [-3.074 19.927 0 -117.456] kjoules 400 )
-cyanbot( pose [-2.610 21.900 0 -117.456] kjoules 400 )
-cyanbot( pose [-1.703 20.756 0 -117.456] kjoules 400 )
-cyanbot( pose [-1.898 19.927 0 -117.456] kjoules 400 )
-cyanbot( pose [-1.371 19.088 0 -117.456] kjoules 400 )
-cyanbot( pose [-5.320 17.681 0 -117.456] kjoules 400 )
+autorob( pose [-3.635 20.622 0 -117.456] kjoules 400 )
+autorob( pose [-5.346 20.649 0 -117.456] kjoules 400 )
+autorob( pose [-4.518 21.397 0 -117.456] kjoules 400 )
+autorob( pose [-3.796 21.611 0 -117.456] kjoules 400 )
+autorob( pose [-3.074 19.927 0 -117.456] kjoules 400 )
+autorob( pose [-2.610 21.900 0 -117.456] kjoules 400 )
+autorob( pose [-1.703 20.756 0 -117.456] kjoules 400 )
+autorob( pose [-1.898 19.927 0 -117.456] kjoules 400 )
+autorob( pose [-1.371 19.088 0 -117.456] kjoules 400 )
+autorob( pose [-5.320 17.681 0 -117.456] kjoules 400 )
 
-#cyanbot( pose [-4.708 18.475 0 -117.456] kjoules 400 )
-#cyanbot( pose [-5.615 18.687 0 -117.456] kjoules 400 )
-#cyanbot( pose [-6.341 17.840 0 -117.456] kjoules 400 )
-#cyanbot( pose [-3.521 18.825 0 -117.456] kjoules 400 )
-#cyanbot( pose [-4.194 19.473 0 -117.456] kjoules 400 )
-#cyanbot( pose [-5.192 19.564 0 -117.456] kjoules 400 )
-#cyanbot( pose [-6.341 19.836 0 -117.456] kjoules 400 )
-#cyanbot( pose [-2.742 19.050 0 -117.456] kjoules 400 )
-#cyanbot( pose [-2.591 18.324 0 -108.862] kjoules 400 )
-#cyanbot( pose [-6.301 18.782 0 -117.456] kjoules 400 )
+autorob( pose [-4.708 18.475 0 -117.456] kjoules 400 )
+autorob( pose [-5.615 18.687 0 -117.456] kjoules 400 )
+autorob( pose [-6.341 17.840 0 -117.456] kjoules 400 )
+autorob( pose [-3.521 18.825 0 -117.456] kjoules 400 )
+autorob( pose [-4.194 19.473 0 -117.456] kjoules 400 )
+autorob( pose [-5.192 19.564 0 -117.456] kjoules 400 )
+autorob( pose [-6.341 19.836 0 -117.456] kjoules 400 )
+autorob( pose [-2.742 19.050 0 -117.456] kjoules 400 )
+autorob( pose [-2.591 18.324 0 -108.862] kjoules 400 )
+autorob( pose [-6.301 18.782 0 -117.456] kjoules 400 )
 
-greenbot( pose [-35.549 -47.514 0 -41.980] kjoules 40 )
-greenbot( pose [-45.547 -46.397 0 -119.991] kjoules 40 )
-greenbot( pose [-38.902 -42.142 0 -65.139] kjoules 40 )
-greenbot( pose [-39.615 -42.398 0 -73.426] kjoules 40 )
-greenbot( pose [-39.830 -40.428 0 -93.488] kjoules 40 )
-greenbot( pose [-39.230 -41.231 0 -99.719] kjoules 40 )
-greenbot( pose [-30.258 -41.202 0 27.802] kjoules 40 )
-greenbot( pose [-38.513 -40.851 0 -96.070] kjoules 40 )
-greenbot( pose [-30.890 -41.197 0 160.446] kjoules 40 )
-greenbot( pose [-31.214 -41.949 0 46.259] kjoules 40 )
+autorob( pose [-35.549 -47.514 0 -41.980] kjoules 40 )
+autorob( pose [-45.547 -46.397 0 -119.991] kjoules 40 )
+autorob( pose [-38.902 -42.142 0 -65.139] kjoules 40 )
+autorob( pose [-39.615 -42.398 0 -73.426] kjoules 40 )
+autorob( pose [-39.830 -40.428 0 -93.488] kjoules 40 )
+autorob( pose [-39.230 -41.231 0 -99.719] kjoules 40 )
+autorob( pose [-30.258 -41.202 0 27.802] kjoules 40 )
+autorob( pose [-38.513 -40.851 0 -96.070] kjoules 40 )
+autorob( pose [-30.890 -41.197 0 160.446] kjoules 40 )
+autorob( pose [-31.214 -41.949 0 46.259] kjoules 40 )
 
-greenbot( pose [-11.819 1.550 0 44.991] kjoules 400 )
-greenbot( pose [-12.401 2.181 0 44.991] kjoules 400 )
-greenbot( pose [-11.236 3.330 0 44.991] kjoules 400 )
-greenbot( pose [-12.078 3.298 0 44.991] kjoules 400 )
-greenbot( pose [-10.275 2.456 0 44.991] kjoules 400 )
-greenbot( pose [-10.734 4.123 0 44.991] kjoules 400 )
-greenbot( pose [-11.592 4.398 0 44.991] kjoules 400 )
-greenbot( pose [-12.903 2.877 0 44.991] kjoules 400 )
-greenbot( pose [-12.434 1.372 0 44.991] kjoules 400 )
-greenbot( pose [-10.555 3.358 0 44.991] kjoules 400 )
+#100
 
-#greenbot( pose [-9.516 3.311 0 44.991] kjoules 400 )
-#greenbot( pose [-12.308 3.949 0 44.991] kjoules 400 )
-#greenbot( pose [-13.185 3.682 0 44.991] kjoules 400 )
-#greenbot( pose [-13.014 2.167 0 44.991] kjoules 400 )
-#greenbot( pose [-13.719 2.634 0 44.991] kjoules 400 )
-#greenbot( pose [-13.633 1.986 0 44.991] kjoules 400 )
-#greenbot( pose [-13.138 1.385 0 44.991] kjoules 400 )
-#greenbot( pose [-12.490 0.575 0 44.991] kjoules 400 )
-#greenbot( pose [-11.775 0.699 0 44.991] kjoules 400 )
-#greenbot( pose [-11.641 2.586 0 44.991] kjoules 400 )
+autorob( pose [-11.819 1.550 0 44.991] kjoules 400 )
+autorob( pose [-12.401 2.181 0 44.991] kjoules 400 )
+autorob( pose [-11.236 3.330 0 44.991] kjoules 400 )
+autorob( pose [-12.078 3.298 0 44.991] kjoules 400 )
+autorob( pose [-10.275 2.456 0 44.991] kjoules 400 )
+autorob( pose [-10.734 4.123 0 44.991] kjoules 400 )
+autorob( pose [-11.592 4.398 0 44.991] kjoules 400 )
+autorob( pose [-12.903 2.877 0 44.991] kjoules 400 )
+autorob( pose [-12.434 1.372 0 44.991] kjoules 400 )
+autorob( pose [-10.555 3.358 0 44.991] kjoules 400 )
 
-yellowbot( pose [-14.296 4.967 0 -113.433] kjoules 200 )
-yellowbot( pose [-13.218 5.200 0 -105.066] kjoules 200 )
-yellowbot( pose [-17.084 7.178 0 -113.959] kjoules 200 )
-yellowbot( pose [-15.829 3.428 0 -100.843] kjoules 200 )
-yellowbot( pose [-16.001 6.965 0 -116.077] kjoules 200 )
-yellowbot( pose [-13.589 6.170 0 -108.098] kjoules 200 )
-yellowbot( pose [-15.665 7.690 0 35.677] kjoules 200 )
-yellowbot( pose [-18.633 7.374 0 -100.002] kjoules 200 )
-yellowbot( pose [-14.987 3.480 0 -97.678] kjoules 200 )
-yellowbot( pose [-16.445 7.660 0 68.821] kjoules 200 )
+autorob( pose [-9.516 3.311 0 44.991] kjoules 400 )
+autorob( pose [-12.308 3.949 0 44.991] kjoules 400 )
+autorob( pose [-13.185 3.682 0 44.991] kjoules 400 )
+autorob( pose [-13.014 2.167 0 44.991] kjoules 400 )
+autorob( pose [-13.719 2.634 0 44.991] kjoules 400 )
+autorob( pose [-13.633 1.986 0 44.991] kjoules 400 )
+autorob( pose [-13.138 1.385 0 44.991] kjoules 400 )
+autorob( pose [-12.490 0.575 0 44.991] kjoules 400 )
+autorob( pose [-11.775 0.699 0 44.991] kjoules 400 )
+autorob( pose [-11.641 2.586 0 44.991] kjoules 400 )
 
-yellowbot( pose [-17.222 6.291 0 35.145] kjoules 200 )
-yellowbot( pose [-17.885 7.198 0 35.145] kjoules 200 )
-yellowbot( pose [-17.254 8.218 0 35.145] kjoules 200 )
-yellowbot( pose [-17.060 5.498 0 35.145] kjoules 200 )
-yellowbot( pose [-18.047 6.227 0 35.145] kjoules 200 )
-yellowbot( pose [-16.930 4.640 0 35.145] kjoules 200 )
-yellowbot( pose [-17.966 5.417 0 35.145] kjoules 200 )
-yellowbot( pose [-15.927 4.640 0 35.145] kjoules 200 )
-yellowbot( pose [-14.988 4.236 0 35.145] kjoules 200 )
-yellowbot( pose [-15.706 6.151 0 35.145] kjoules 200 )
+autorob( pose [-14.296 4.967 0 -113.433] kjoules 200 )
+autorob( pose [-13.218 5.200 0 -105.066] kjoules 200 )
+autorob( pose [-17.084 7.178 0 -113.959] kjoules 200 )
+autorob( pose [-15.829 3.428 0 -100.843] kjoules 200 )
+autorob( pose [-16.001 6.965 0 -116.077] kjoules 200 )
+autorob( pose [-13.589 6.170 0 -108.098] kjoules 200 )
+autorob( pose [-15.665 7.690 0 35.677] kjoules 200 )
+autorob( pose [-18.633 7.374 0 -100.002] kjoules 200 )
+autorob( pose [-14.987 3.480 0 -97.678] kjoules 200 )
+autorob( pose [-16.445 7.660 0 68.821] kjoules 200 )
 
-#yellowbot( pose [-16.419 6.225 0 35.145] kjoules 200 )
-#yellowbot( pose [-14.574 5.868 0 35.145] kjoules 200 )
-#yellowbot( pose [-18.271 8.274 0 35.145] kjoules 200 )
-#yellowbot( pose [-15.801 8.625 0 35.145] kjoules 200 )
-#yellowbot( pose [-16.598 8.835 0 35.145] kjoules 200 )
-#yellowbot( pose [-14.417 6.791 0 35.145] kjoules 200 )
-#yellowbot( pose [-15.235 6.801 0 35.145] kjoules 200 )
-#yellowbot( pose [-15.444 5.260 0 35.145] kjoules 200 )
-#yellowbot( pose [-16.598 5.187 0 35.145] kjoules 200 )
-#yellowbot( pose [-16.461 4.159 0 35.145] kjoules 200 )
+autorob( pose [-17.222 6.291 0 35.145] kjoules 200 )
+autorob( pose [-17.885 7.198 0 35.145] kjoules 200 )
+autorob( pose [-17.254 8.218 0 35.145] kjoules 200 )
+autorob( pose [-17.060 5.498 0 35.145] kjoules 200 )
+autorob( pose [-18.047 6.227 0 35.145] kjoules 200 )
+autorob( pose [-16.930 4.640 0 35.145] kjoules 200 )
+autorob( pose [-17.966 5.417 0 35.145] kjoules 200 )
+autorob( pose [-15.927 4.640 0 35.145] kjoules 200 )
+autorob( pose [-14.988 4.236 0 35.145] kjoules 200 )
+autorob( pose [-15.706 6.151 0 35.145] kjoules 200 )
 
-magentabot( pose [-8.171 13.723 0 -139.469] kjoules 300 )
-magentabot( pose [-8.887 12.177 0 -88.070] kjoules 300 )
-magentabot( pose [-7.357 15.181 0 -94.395] kjoules 300 )
-magentabot( pose [-7.970 15.169 0 -167.188] kjoules 300 )
-magentabot( pose [-7.482 13.834 0 -94.067] kjoules 300 )
-magentabot( pose [-8.009 13.153 0 -163.083] kjoules 300 )
-magentabot( pose [-6.846 13.156 0 -137.774] kjoules 300 )
-magentabot( pose [-8.349 14.435 0 -136.374] kjoules 300 )
-magentabot( pose [-6.752 14.083 0 -101.104] kjoules 300 )
-magentabot( pose [-6.452 15.332 0 -131.336] kjoules 300 )
+autorob( pose [-16.419 6.225 0 35.145] kjoules 200 )
+autorob( pose [-14.574 5.868 0 35.145] kjoules 200 )
+autorob( pose [-18.271 8.274 0 35.145] kjoules 200 )
+autorob( pose [-15.801 8.625 0 35.145] kjoules 200 )
+autorob( pose [-16.598 8.835 0 35.145] kjoules 200 )
+autorob( pose [-14.417 6.791 0 35.145] kjoules 200 )
+autorob( pose [-15.235 6.801 0 35.145] kjoules 200 )
+autorob( pose [-15.444 5.260 0 35.145] kjoules 200 )
+autorob( pose [-16.598 5.187 0 35.145] kjoules 200 )
+autorob( pose [-16.461 4.159 0 35.145] kjoules 200 )
 
-magentabot( pose [-9.099 17.489 0 -143.181] kjoules 300 )
-magentabot( pose [-9.610 15.854 0 -143.181] kjoules 300 )
-magentabot( pose [-9.589 16.569 0 -143.181] kjoules 300 )
-magentabot( pose [-10.059 15.221 0 -143.181] kjoules 300 )
-magentabot( pose [-10.264 16.099 0 -143.181] kjoules 300 )
-magentabot( pose [-9.814 17.325 0 -143.181] kjoules 300 )
-magentabot( pose [-8.271 16.840 0 -143.181] kjoules 300 )
-magentabot( pose [-8.629 17.999 0 -143.181] kjoules 300 )
-magentabot( pose [-9.467 18.142 0 -143.181] kjoules 300 )
-magentabot( pose [-9.079 16.263 0 -143.181] kjoules 300 )
+autorob( pose [-8.171 13.723 0 -139.469] kjoules 300 )
+autorob( pose [-8.887 12.177 0 -88.070] kjoules 300 )
+autorob( pose [-7.357 15.181 0 -94.395] kjoules 300 )
+autorob( pose [-7.970 15.169 0 -167.188] kjoules 300 )
+autorob( pose [-7.482 13.834 0 -94.067] kjoules 300 )
+autorob( pose [-8.009 13.153 0 -163.083] kjoules 300 )
+autorob( pose [-6.846 13.156 0 -137.774] kjoules 300 )
+autorob( pose [-8.349 14.435 0 -136.374] kjoules 300 )
+autorob( pose [-6.752 14.083 0 -101.104] kjoules 300 )
+autorob( pose [-6.452 15.332 0 -131.336] kjoules 300 )
 
-#magentabot( pose [-9.196 15.409 0 -143.181] kjoules 300 )
-#magentabot( pose [-9.598 14.812 0 -143.181] kjoules 300 )
-#magentabot( pose [-9.304 14.280 0 -143.181] kjoules 300 )
-#magentabot( pose [-8.946 13.737 0 -143.181] kjoules 300 )
-#magentabot( pose [-8.761 13.140 0 -143.181] kjoules 300 )
-#magentabot( pose [-8.153 12.629 0 -143.181] kjoules 300 )
-#magentabot( pose [-7.393 12.618 0 -143.181] kjoules 300 )
-#magentabot( pose [-8.467 15.712 0 -143.181] kjoules 300 )
-#magentabot( pose [-7.762 16.132 0 -143.181] kjoules 300 )
-#magentabot( pose [-8.794 14.855 0 -143.181] kjoules 300 )
+autorob( pose [-9.099 17.489 0 -143.181] kjoules 300 )
+autorob( pose [-9.610 15.854 0 -143.181] kjoules 300 )
+autorob( pose [-9.589 16.569 0 -143.181] kjoules 300 )
+autorob( pose [-10.059 15.221 0 -143.181] kjoules 300 )
+autorob( pose [-10.264 16.099 0 -143.181] kjoules 300 )
+autorob( pose [-9.814 17.325 0 -143.181] kjoules 300 )
+autorob( pose [-8.271 16.840 0 -143.181] kjoules 300 )
+autorob( pose [-8.629 17.999 0 -143.181] kjoules 300 )
+autorob( pose [-9.467 18.142 0 -143.181] kjoules 300 )
+autorob( pose [-9.079 16.263 0 -143.181] kjoules 300 )
 
+autorob( pose [-9.196 15.409 0 -143.181] kjoules 300 )
+autorob( pose [-9.598 14.812 0 -143.181] kjoules 300 )
+autorob( pose [-9.304 14.280 0 -143.181] kjoules 300 )
+autorob( pose [-8.946 13.737 0 -143.181] kjoules 300 )
+autorob( pose [-8.761 13.140 0 -143.181] kjoules 300 )
+autorob( pose [-8.153 12.629 0 -143.181] kjoules 300 )
+autorob( pose [-7.393 12.618 0 -143.181] kjoules 300 )
+autorob( pose [-8.467 15.712 0 -143.181] kjoules 300 )
+autorob( pose [-7.762 16.132 0 -143.181] kjoules 300 )
+autorob( pose [-8.794 14.855 0 -143.181] kjoules 300 )
+


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

Reply via email to