Revision: 8588
http://playerstage.svn.sourceforge.net/playerstage/?rev=8588&view=rev
Author: rtv
Date: 2010-03-13 01:09:52 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
bugfix, fasr2
Modified Paths:
--------------
code/stage/trunk/examples/ctrl/fasr2.cc
code/stage/trunk/libstage/blockgroup.cc
code/stage/trunk/libstage/model_draw.cc
code/stage/trunk/libstage/powerpack.cc
code/stage/trunk/worlds/fasr2.world
Modified: code/stage/trunk/examples/ctrl/fasr2.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr2.cc 2010-03-12 08:06:06 UTC (rev
8587)
+++ code/stage/trunk/examples/ctrl/fasr2.cc 2010-03-13 01:09:52 UTC (rev
8588)
@@ -77,7 +77,7 @@
void Draw() const
{
- glPointSize(4);
+ glPointSize(3);
FOR_EACH( it, nodes ){ (*it)->Draw(); }
}
@@ -126,7 +126,7 @@
{
public:
Graph& graph;
-
+
GraphVis( Graph& graph )
: Visualizer( "graph", "vis_graph" ), graph(graph) {}
virtual ~GraphVis(){}
@@ -140,7 +140,10 @@
//mod->PushColor( 1,0,0,1 );
- mod->PushColor( mod->GetColor() );
+ Color c = mod->GetColor();
+ c.a = 0.4;
+
+ mod->PushColor( c );
graph.Draw();
mod->PopColor();
@@ -231,10 +234,11 @@
static Model* map_model;
bool fiducial_sub;
+ bool laser_sub;
bool ranger_sub;
-
public:
+
Robot( ModelPosition* pos,
Model* source,
Model* sink,
@@ -263,7 +267,8 @@
last_node( NULL ),
node_interval( 20 ),
node_interval_countdown( node_interval ),
- fiducial_sub(false),
+ fiducial_sub(false),
+ laser_sub(false),
ranger_sub(false)
{
// need at least these models to get any work done
@@ -282,8 +287,8 @@
// LaserUpdate() controls the robot, by reading from laser and
// writing to position
- laser->AddUpdateCallback( (stg_model_callback_t)LaserUpdate, this );
- laser->Subscribe();
+ //laser->AddUpdateCallback( (stg_model_callback_t)LaserUpdate, this );
+ EnableLaser(true);
// we subscribe to the fiducial device only while docking
fiducial->AddUpdateCallback( (stg_model_callback_t)FiducialUpdate,
this );
@@ -312,15 +317,6 @@
g.size.x/(float)map_width,
g.size.y/(float)map_height );
- // putchar( '\n' );
- // for( unsigned int y=0; y<map_height; y++ )
- // {
- // for( unsigned int x=0; x<map_width; x++ )
- // printf( "%3d,", map_data[x +
((map_height-y-1)*map_width)] ? 999 : 1 );
-
- // puts("");
- // }
-
// fix the node costs for astar: 0=>1, 1=>9
unsigned int sz = map_width * map_height;
@@ -340,7 +336,9 @@
//( goal );
//puts("");
}
-
+
+
+
void EnableRanger( bool on )
{
if( on && !ranger_sub )
@@ -356,6 +354,21 @@
}
}
+ void EnableLaser( bool on )
+ {
+ if( on && !laser_sub )
+ {
+ laser_sub = true;
+ laser->Subscribe();
+ }
+
+ if( !on && laser_sub )
+ {
+ laser_sub = false;
+ laser->Unsubscribe();
+ }
+ }
+
void EnableFiducial( bool on )
{
if( on && !fiducial_sub )
@@ -371,11 +384,13 @@
}
}
-
- void Plan( Model* dest )
+ void Plan( Pose sp )
{
+ // change my color to that of my destination
+ //pos->SetColor( dest->GetColor() );
+
Pose pose = pos->GetPose();
- Pose sp = dest->GetPose();
+ //Pose sp = dest->GetPose();
Geom g = map_model->GetGeom();
point_t start( MetersToCell(pose.x, g.size.x, map_width),
@@ -432,24 +447,14 @@
if( charger_ahoy )
{
+ // drive toward the charger
double a_goal = normalize( charger_bearing );
+ // helps to align with the way the charger is pointing
double orient = normalize( M_PI - (charger_bearing -
charger_heading) );
- //printf( "val %.2f\n", orient );
-
- //if( fabs(orient) < M_PI/4.0 )
+
a_goal = normalize( a_goal - 2.0 * orient );
-
-
- // if( pos->Stalled() )
- // {
- // puts( "stalled. stopping" );
- // pos->Stop();
- // }
- // else
-
- // a_goal *= 2.0;
-
+
if( charger_range > creep_distance )
{
if( !ObstacleAvoid() )
@@ -458,7 +463,7 @@
pos->SetTurnSpeed( a_goal );
}
}
- else
+ else // we are very close!
{
pos->SetTurnSpeed( a_goal );
pos->SetXSpeed( 0.02 ); // creep towards it
@@ -467,6 +472,7 @@
{
pos->Stop();
docked_angle = pos->GetPose().a;
+ EnableLaser( false );
}
if( pos->Stalled() ) // touching
@@ -487,7 +493,7 @@
//printf( "fully charged, now back to work\n" );
mode = MODE_UNDOCK;
EnableRanger(true); // enable the sonar to see behind us
- //EnableFiducial(false);
+ EnableLaser(true);
}
}
@@ -623,11 +629,12 @@
void SetGoal( Model* goal )
- {
+ {
if( goal != this->goal )
{
this->goal = goal;
- Plan( goal );
+ Plan( goal->GetPose() );
+ pos->SetColor( goal->GetColor() );
}
}
@@ -641,8 +648,6 @@
Pose pose = pos->GetPose();
-
-
double a_goal = 0;
// dtor( ( pos->GetFlagCount() ) ? have[y][x] :
need[y][x] ); // map
@@ -666,8 +671,8 @@
// goal->Token(),
// goal->GetPose().x,
// goal->GetPose().y );
- Plan( goal );
- cached_goal_pose = goal->GetPose();
+ Plan( goal->GetPose() );
+ cached_goal_pose = goal->GetPose();
}
// if we are low on juice - find the direction to the
recharger instead
@@ -711,42 +716,11 @@
}
- // inspect the laser data and decide what to do
- static int LaserUpdate( ModelLaser* laser, Robot* robot )
- {
- // if( laser->power_pack && laser->power_pack->charging )
- // printf( "model %s power pack @%p is charging\n",
- // laser->Token(), laser->power_pack );
-
- //if( laser->GetSamples(NULL) == NULL )
- //return 0;
+// // inspect the laser data and decide what to do
+// static int LaserUpdate( ModelLaser* laser, Robot* robot )
+// {
+// }
- assert( laser->GetSamples().size() > 0 );
-
- switch( robot->mode )
- {
- case MODE_DOCK:
- //puts( "DOCK" );
- robot->Dock();
- break;
-
- case MODE_WORK:
- //puts( "WORK" );
- robot->Work();
- break;
-
- case MODE_UNDOCK:
- //puts( "UNDOCK" );
- robot->UnDock();
- break;
-
- default:
- printf( "unrecognized mode %u\n", robot->mode );
- }
-
- return 0;
- }
-
bool Hungry()
{
return( pos->FindPowerPack()->ProportionRemaining() < 0.2 );
@@ -819,7 +793,38 @@
//printf( "diss: %.2f\n", pos->FindPowerPack()->GetDissipated() );
+
+ // if( laser->power_pack && laser->power_pack->charging )
+ // printf( "model %s power pack @%p is charging\n",
+ // laser->Token(), laser->power_pack );
+ //if( laser->GetSamples(NULL) == NULL )
+ //return 0;
+
+ //assert( robot->laser->GetSamples().size() > 0 );
+
+ switch( robot->mode )
+ {
+ case MODE_DOCK:
+ //puts( "DOCK" );
+ robot->Dock();
+ break;
+
+ case MODE_WORK:
+ //puts( "WORK" );
+ robot->Work();
+ break;
+
+ case MODE_UNDOCK:
+ //puts( "UNDOCK" );
+ robot->UnDock();
+ break;
+
+ default:
+ printf( "unrecognized mode %u\n", robot->mode );
+ }
+
+
return 0; // run again
}
@@ -876,8 +881,8 @@
// STATIC VARS
pthread_mutex_t Robot::planner_mutex = PTHREAD_MUTEX_INITIALIZER;
-unsigned int Robot::map_width( 60 );
-unsigned int Robot::map_height( 60 );
+unsigned int Robot::map_width( 50 );
+unsigned int Robot::map_height( 50 );
uint8_t* Robot::map_data( NULL );
Model* Robot::map_model( NULL );
@@ -895,6 +900,9 @@
}
}
+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 )
{
@@ -912,10 +920,15 @@
// expecting a task color name as the 1th argument
assert( words.size() == 2 );
assert( words[1].size() > 0 );
+
+ // pick a source at random
+ const std::string& color = sources[ rand() % sources_count ];
new Robot( (ModelPosition*)mod,
- mod->GetWorld()->GetModel( words[1] +
"_source" ),
- mod->GetWorld()->GetModel( words[1] + "_sink"
),
+ //mod->GetWorld()->GetModel( words[1] +
"_source" ),
+ //mod->GetWorld()->GetModel( words[1] +
"_sink" ),
+ mod->GetWorld()->GetModel( color + "_source" ),
+ mod->GetWorld()->GetModel( color + "_sink" ),
mod->GetWorld()->GetModel( "fuel_zone" ) );
return 0; //ok
Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc 2010-03-12 08:06:06 UTC (rev
8587)
+++ code/stage/trunk/libstage/blockgroup.cc 2010-03-13 01:09:52 UTC (rev
8588)
@@ -150,6 +150,8 @@
void BlockGroup::BuildDisplayList( Model* mod )
{
+ //puts( "build" );
+
if( ! mod->world->IsGUI() )
return;
@@ -237,8 +239,11 @@
void BlockGroup::CallDisplayList( Model* mod )
{
- if( displaylist == 0 )
+ if( displaylist == 0 || mod->rebuild_displaylist )
+ {
BuildDisplayList( mod );
+ mod->rebuild_displaylist = 0;
+ }
glCallList( displaylist );
}
Modified: code/stage/trunk/libstage/model_draw.cc
===================================================================
--- code/stage/trunk/libstage/model_draw.cc 2010-03-12 08:06:06 UTC (rev
8587)
+++ code/stage/trunk/libstage/model_draw.cc 2010-03-13 01:09:52 UTC (rev
8588)
@@ -308,8 +308,8 @@
glRotatef( robotAngle - yaw, 0,0,1 );
glRotatef( -pitch, 1,0,0 );
- if( power_pack )
- power_pack->Visualize( cam );
+ // if( power_pack )
+ //power_pack->Visualize( cam );
if( !say_string.empty() )
{
Modified: code/stage/trunk/libstage/powerpack.cc
===================================================================
--- code/stage/trunk/libstage/powerpack.cc 2010-03-12 08:06:06 UTC (rev
8587)
+++ code/stage/trunk/libstage/powerpack.cc 2010-03-13 01:09:52 UTC (rev
8588)
@@ -16,7 +16,11 @@
stg_joules_t PowerPack::global_dissipated = 0.0;
PowerPack::PowerPack( Model* mod ) :
- event_vis( 32,32,1.0 ),
+ event_vis( 2.0 * std::max( fabs(ceil(mod->GetWorld()->GetExtent().x.max)),
+
fabs(floor(mod->GetWorld()->GetExtent().x.min))),
+ 2.0 * std::max(
fabs(ceil(mod->GetWorld()->GetExtent().y.max)),
+
fabs(floor(mod->GetWorld()->GetExtent().y.min))),
+ 1.0 ),
output_vis( 0,100,200,40, 1200, Color(1,0,0), Color(0,0,0,0.5), "energy
output", "energy_input" ),
stored_vis( 0,142,200,40, 1200, Color(0,1,0), Color(0,0,0,0.5), "energy
stored", "energy_stored" ),
mod( mod),
@@ -32,8 +36,8 @@
mod->world->AddPowerPack( this );
mod->AddVisualizer( &event_vis, false );
- mod->AddVisualizer( &output_vis, true );
- mod->AddVisualizer( &stored_vis, true );
+ mod->AddVisualizer( &output_vis, false );
+ mod->AddVisualizer( &stored_vis, false );
}
PowerPack::~PowerPack()
Modified: code/stage/trunk/worlds/fasr2.world
===================================================================
--- code/stage/trunk/worlds/fasr2.world 2010-03-12 08:06:06 UTC (rev 8587)
+++ code/stage/trunk/worlds/fasr2.world 2010-03-13 01:09:52 UTC (rev 8588)
@@ -16,16 +16,16 @@
resolution 0.02
-threads 8
+threads 0
# configure the GUI window
window
(
size [ 1226.000 1080.000 ]
- center [ -40.702 -47.522 ]
+ center [ -36.643 -41.795 ]
rotate [ 0 0 ]
- scale 22.245
+ scale 41.558
show_data 1
show_flags 1
@@ -147,16 +147,16 @@
-charge_station( pose [ -38.500 -49.9 0 90.000 ] )
-charge_station( pose [ -39.500 -49.9 0 90.000 ] )
-charge_station( pose [ -40.500 -49.9 0 90.000 ] )
-charge_station( pose [ -41.500 -49.9 0 90.000 ] )
-charge_station( pose [ -42.500 -49.9 0 90.000 ] )
-charge_station( pose [ -43.500 -49.9 0 90.000 ] )
-charge_station( pose [ -44.500 -49.9 0 90.000 ] )
-charge_station( pose [ -45.500 -49.9 0 90.000 ] )
-charge_station( pose [ -46.500 -49.9 0 90.000 ] )
-charge_station( pose [ -47.500 -49.9 0 90.000 ] )
+charge_station( pose [ -38.500 -49.900 0 90.000 ] )
+charge_station( pose [ -39.500 -49.900 0 90.000 ] )
+charge_station( pose [ -40.500 -49.900 0 90.000 ] )
+charge_station( pose [ -41.500 -49.900 0 90.000 ] )
+charge_station( pose [ -42.500 -49.900 0 90.000 ] )
+charge_station( pose [ -43.500 -49.900 0 90.000 ] )
+charge_station( pose [ -44.500 -49.900 0 90.000 ] )
+charge_station( pose [ -45.500 -49.900 0 90.000 ] )
+charge_station( pose [ -46.500 -49.900 0 90.000 ] )
+charge_station( pose [ -47.500 -49.900 0 90.000 ] )
#charge_station( pose [ -38.00 -49.9 0 90.000 ] )
#charge_station( pose [ -39.00 -49.9 0 90.000 ] )
@@ -169,16 +169,16 @@
#charge_station( pose [ -46.00 -49.9 0 90.000 ] )
#charge_station( pose [ -47.0 -49.9 0 90.000 ] )
-charge_station( pose [ -49.9 -38.500 0 0 ] )
-charge_station( pose [ -49.9 -39.500 0 0 ] )
-charge_station( pose [ -49.9 -40.500 0 0 ] )
-charge_station( pose [ -49.9 -41.500 0 0 ] )
-charge_station( pose [ -49.9 -42.500 0 0 ] )
-charge_station( pose [ -49.9 -43.500 0 0 ] )
-charge_station( pose [ -49.9 -44.500 0 0 ] )
-charge_station( pose [ -49.9 -45.500 0 0 ] )
-charge_station( pose [ -49.9 -46.500 0 0 ] )
-charge_station( pose [ -49.9 -47.500 0 0 ] )
+charge_station( pose [ -49.900 -38.500 0 0 ] )
+charge_station( pose [ -49.900 -39.500 0 0 ] )
+charge_station( pose [ -49.900 -40.500 0 0 ] )
+charge_station( pose [ -49.900 -41.500 0 0 ] )
+charge_station( pose [ -49.900 -42.500 0 0 ] )
+charge_station( pose [ -49.900 -43.500 0 0 ] )
+charge_station( pose [ -49.900 -44.500 0 0 ] )
+charge_station( pose [ -49.900 -45.500 0 0 ] )
+charge_station( pose [ -49.900 -46.500 0 0 ] )
+charge_station( pose [ -49.900 -47.500 0 0 ] )
zone( color "orange"
pose [ -43.000 -43.000 0 0 ]
@@ -332,7 +332,7 @@
#cyanbot( pose [-6.301 18.782 0 -117.456] kjoules 400 )
greenbot( pose [-35.549 -47.514 0 -41.980] kjoules 40 )
-greenbot( pose [-48.064 -48.105 0 -119.991] 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 )
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