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® 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