From: <rt...@us...> - 2009-03-20 09:02:42
|
Revision: 7533 http://playerstage.svn.sourceforge.net/playerstage/?rev=7533&view=rev Author: rtv Date: 2009-03-20 09:02:33 +0000 (Fri, 20 Mar 2009) Log Message: ----------- experimenting with wavefront planner Modified Paths: -------------- code/stage/trunk/examples/ctrl/CMakeLists.txt code/stage/trunk/libstage/block.cc code/stage/trunk/libstage/model.cc code/stage/trunk/libstage/model_laser.cc code/stage/trunk/libstage/model_position.cc code/stage/trunk/libstage/stage.cc code/stage/trunk/worlds/simple.world code/stage/trunk/worlds/wavefront.cfg Modified: code/stage/trunk/examples/ctrl/CMakeLists.txt =================================================================== --- code/stage/trunk/examples/ctrl/CMakeLists.txt 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/examples/ctrl/CMakeLists.txt 2009-03-20 09:02:33 UTC (rev 7533) @@ -7,18 +7,29 @@ wander ) +# need plaer's wavefront planning library for this one +if( PLAYER_FOUND ) + SET( PLUGINS ${PLUGINS} fasr_plan ) +endif( PLAYER_FOUND ) # create a library module for each plugin and link libstage to each - foreach( PLUGIN ${PLUGINS} ) ADD_LIBRARY( ${PLUGIN} MODULE ${PLUGIN}.cc ) TARGET_LINK_LIBRARIES( ${PLUGIN} stage ) - set_source_files_properties( ${PLUGIN}.cc PROPERTIES COMPILE_FLAGS "${FLTK_CFLAGS}" ) endforeach( PLUGIN ) # delete the "lib" prefix from the plugin libraries SET_TARGET_PROPERTIES( ${PLUGINS} PROPERTIES PREFIX "" ) +# need plaer's wavefront planning library for this one +if( PLAYER_FOUND ) + link_directories( ${PLAYER_LIBRARY_DIRS} ) + include_directories( ${PLAYER_INCLUDE_DIRS} ) + target_link_libraries( fasr_plan "-lwavefront_standalone" ) +endif( PLAYER_FOUND ) + + # install in <prefix>/lib -INSTALL( TARGETS ${PLUGINS} DESTINATION lib) +install( TARGETS ${PLUGINS} DESTINATION lib) + Modified: code/stage/trunk/libstage/block.cc =================================================================== --- code/stage/trunk/libstage/block.cc 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/libstage/block.cc 2009-03-20 09:02:33 UTC (rev 7533) @@ -5,16 +5,16 @@ using namespace Stg; /** Create a new block. A model's body is a list of these - blocks. The point data is copied, so pts can safely be freed - after calling this.*/ + blocks. The point data is copied, so pts can safely be freed + after calling this.*/ Block::Block( Model* mod, - stg_point_t* pts, - size_t pt_count, - stg_meters_t zmin, - stg_meters_t zmax, - stg_color_t color, - bool inherit_color - ) : + stg_point_t* pts, + size_t pt_count, + stg_meters_t zmin, + stg_meters_t zmax, + stg_color_t color, + bool inherit_color + ) : mod( mod ), pt_count( pt_count ), pts( (stg_point_t*)g_memdup( pts, pt_count * sizeof(stg_point_t)) ), @@ -33,15 +33,15 @@ /** A from-file constructor */ Block::Block( Model* mod, - Worldfile* wf, - int entity) + Worldfile* wf, + int entity) : mod( mod ), - pt_count(0), - pts(NULL), - color(0), - inherit_color(true), - rendered_cells( g_ptr_array_sized_new(32) ), - candidate_cells( g_ptr_array_sized_new(32) ) + pt_count(0), + pts(NULL), + color(0), + inherit_color(true), + rendered_cells( g_ptr_array_sized_new(32) ), + candidate_cells( g_ptr_array_sized_new(32) ) { assert(mod); assert(wf); @@ -64,10 +64,10 @@ void Block::Translate( double x, double y ) { for( unsigned int p=0; p<pt_count; p++) - { - pts[p].x += x; - pts[p].y += y; - } + { + pts[p].x += x; + pts[p].y += y; + } // force redraw mod->blockgroup.BuildDisplayList( mod ); @@ -80,10 +80,10 @@ double max = -billion; for( unsigned int p=0; p<pt_count; p++) - { - if( pts[p].y > max ) max = pts[p].y; - if( pts[p].y < min ) min = pts[p].y; - } + { + if( pts[p].y > max ) max = pts[p].y; + if( pts[p].y < min ) min = pts[p].y; + } // return the value half way between max and min return( min + (max - min)/2.0 ); @@ -95,10 +95,10 @@ double max = -billion; for( unsigned int p=0; p<pt_count; p++) - { - if( pts[p].x > max ) max = pts[p].x; - if( pts[p].x < min ) min = pts[p].x; - } + { + if( pts[p].x > max ) max = pts[p].x; + if( pts[p].x < min ) min = pts[p].x; + } // return the value half way between maxx and min return( min + (max - min)/2.0 ); @@ -144,20 +144,20 @@ { // for every cell we are rendered into for( unsigned int i=0; i<rendered_cells->len; i++ ) - { - Cell* cell = (Cell*)g_ptr_array_index( rendered_cells, i); + { + Cell* cell = (Cell*)g_ptr_array_index( rendered_cells, i); - // for every block rendered into that cell - for( GSList* it = cell->list; it; it=it->next ) - { - Block* testblock = (Block*)it->data; - Model* testmod = testblock->mod; + // for every block rendered into that cell + for( GSList* it = cell->list; it; it=it->next ) + { + Block* testblock = (Block*)it->data; + Model* testmod = testblock->mod; - if( !mod->IsRelated( testmod )) - if( ! g_list_find( list, testmod ) ) - list = g_list_append( list, testmod ); - } - } + if( !mod->IsRelated( testmod )) + if( ! g_list_find( list, testmod ) ) + list = g_list_append( list, testmod ); + } + } return list; } @@ -170,29 +170,29 @@ GenerateCandidateCells(); if( mod->vis.obstacle_return ) - // for every cell we may be rendered into - for( unsigned int i=0; i<candidate_cells->len; i++ ) - { - Cell* cell = (Cell*)g_ptr_array_index(candidate_cells, i); + // for every cell we may be rendered into + for( unsigned int i=0; i<candidate_cells->len; i++ ) + { + Cell* cell = (Cell*)g_ptr_array_index(candidate_cells, i); - // for every rendered into that cell - for( GSList* it = cell->list; it; it=it->next ) - { - Block* testblock = (Block*)it->data; - Model* testmod = testblock->mod; + // for every rendered into that cell + for( GSList* it = cell->list; it; it=it->next ) + { + Block* testblock = (Block*)it->data; + Model* testmod = testblock->mod; - //printf( " testing block %p of model %s\n", testblock, testmod->Token() ); + //printf( " testing block %p of model %s\n", testblock, testmod->Token() ); - // if the tested model is an obstacle and it's not attached to this model - if( (testmod != this->mod) && - testmod->vis.obstacle_return && - !mod->IsRelated( testmod )) - { - //puts( "HIT"); - return testmod; // bail immediately with the bad news - } - } - } + // if the tested model is an obstacle and it's not attached to this model + if( (testmod != this->mod) && + testmod->vis.obstacle_return && + !mod->IsRelated( testmod )) + { + //puts( "HIT"); + return testmod; // bail immediately with the bad news + } + } + } //printf( "model %s block %p collision done. no hits.\n", mod->Token(), this ); return NULL; // no hit @@ -202,13 +202,13 @@ void Block::RemoveFromCellArray( GPtrArray* ptrarray ) { for( unsigned int i=0; i<ptrarray->len; i++ ) - ((Cell*)g_ptr_array_index(ptrarray, i))->RemoveBlock( this ); + ((Cell*)g_ptr_array_index(ptrarray, i))->RemoveBlock( this ); } void Block::AddToCellArray( GPtrArray* ptrarray ) { for( unsigned int i=0; i<ptrarray->len; i++ ) - ((Cell*)g_ptr_array_index(ptrarray, i))->AddBlock( this ); + ((Cell*)g_ptr_array_index(ptrarray, i))->AddBlock( this ); } @@ -276,9 +276,9 @@ // compute the global location of the first point Pose local( (pts[0].x - bgoffset.x) * scale.x , - (pts[0].y - bgoffset.y) * scale.y, - -bgoffset.z, - 0 ); + (pts[0].y - bgoffset.y) * scale.y, + -bgoffset.z, + 0 ); Pose first_gpose, last_gpose; first_gpose = last_gpose = pose_sum( gpose, local ); @@ -289,27 +289,27 @@ // now loop from the the second to the last for( unsigned int p=1; p<pt_count; p++ ) - { - Pose local( (pts[p].x - bgoffset.x) * scale.x , - (pts[p].y - bgoffset.y) * scale.y, - -bgoffset.z, - 0 ); + { + Pose local( (pts[p].x - bgoffset.x) * scale.x , + (pts[p].y - bgoffset.y) * scale.y, + -bgoffset.z, + 0 ); - Pose gpose2 = pose_sum( gpose, local ); + Pose gpose2 = pose_sum( gpose, local ); - // and render the shape of the block into the global cells - mod->world->ForEachCellInLine( last_gpose.x, last_gpose.y, - gpose2.x, gpose2.y, - (stg_cell_callback_t)AppendCellToPtrArray, - candidate_cells ); - last_gpose = gpose2; - } + // and render the shape of the block into the global cells + mod->world->ForEachCellInLine( last_gpose.x, last_gpose.y, + gpose2.x, gpose2.y, + (stg_cell_callback_t)AppendCellToPtrArray, + candidate_cells ); + last_gpose = gpose2; + } // close the polygon mod->world->ForEachCellInLine( last_gpose.x, last_gpose.y, - first_gpose.x, first_gpose.y, - (stg_cell_callback_t)AppendCellToPtrArray, - candidate_cells ); + first_gpose.x, first_gpose.y, + (stg_cell_callback_t)AppendCellToPtrArray, + candidate_cells ); mapped = true; } @@ -321,7 +321,7 @@ // extent glBegin( GL_POLYGON); for( unsigned int i=0; i<pt_count; i++ ) - glVertex3f( pts[i].x, pts[i].y, local_z.max ); + glVertex3f( pts[i].x, pts[i].y, local_z.max ); glEnd(); } @@ -330,10 +330,10 @@ // construct a strip that wraps around the polygon glBegin(GL_QUAD_STRIP); for( unsigned int p=0; p<pt_count; p++) - { - glVertex3f( pts[p].x, pts[p].y, local_z.max ); - glVertex3f( pts[p].x, pts[p].y, local_z.min ); - } + { + glVertex3f( pts[p].x, pts[p].y, local_z.max ); + glVertex3f( pts[p].x, pts[p].y, local_z.min ); + } // close the strip glVertex3f( pts[0].x, pts[0].y, local_z.max ); glVertex3f( pts[0].x, pts[0].y, local_z.min ); @@ -344,7 +344,7 @@ { glBegin(GL_POLYGON); for( unsigned int p=0; p<pt_count; p++ ) - glVertex2f( pts[p].x, pts[p].y ); + glVertex2f( pts[p].x, pts[p].y ); glEnd(); } @@ -391,7 +391,7 @@ //printf( "Block::Load entity %d\n", entity ); if( pts ) - stg_points_destroy( pts ); + stg_points_destroy( pts ); pt_count = wf->ReadInt( entity, "points", 0); pts = stg_points_create( pt_count ); @@ -401,10 +401,10 @@ char key[128]; for( unsigned int p=0; p<pt_count; p++ ) { - snprintf(key, sizeof(key), "point[%d]", p ); + snprintf(key, sizeof(key), "point[%d]", p ); - pts[p].x = wf->ReadTupleLength(entity, key, 0, 0); - pts[p].y = wf->ReadTupleLength(entity, key, 1, 0); + pts[p].x = wf->ReadTupleLength(entity, key, 0, 0); + pts[p].y = wf->ReadTupleLength(entity, key, 1, 0); } local_z.min = wf->ReadTupleLength( entity, "z", 0, 0.0 ); @@ -412,12 +412,12 @@ const char* colorstr = wf->ReadString( entity, "color", NULL ); if( colorstr ) - { - color = stg_lookup_color( colorstr ); - inherit_color = false; - } + { + color = stg_lookup_color( colorstr ); + inherit_color = false; + } else - inherit_color = true; + inherit_color = true; } Modified: code/stage/trunk/libstage/model.cc =================================================================== --- code/stage/trunk/libstage/model.cc 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/libstage/model.cc 2009-03-20 09:02:33 UTC (rev 7533) @@ -1022,3 +1022,5 @@ //if( world->IsGUI() ) world->RegisterOption( opt ); } + + Modified: code/stage/trunk/libstage/model_laser.cc =================================================================== --- code/stage/trunk/libstage/model_laser.cc 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/libstage/model_laser.cc 2009-03-20 09:02:33 UTC (rev 7533) @@ -38,57 +38,57 @@ Option ModelLaser::showLaserBeams( "Laser beams", "show_laser_beams", "", false, NULL ); /** -@ingroup model -@defgroup model_laser Laser model -The laser model simulates a scanning laser rangefinder + @ingroup model + @defgroup model_laser Laser model + The laser model simulates a scanning laser rangefinder -API: Stg::ModelLaser + API: Stg::ModelLaser -<h2>Worldfile properties</h2> + <h2>Worldfile properties</h2> -@par Summary and default values + @par Summary and default values -@verbatim -laser -( - # laser properties - samples 180 - range_max 8.0 - fov 3.14159 - resolution 1 + @verbatim + laser + ( + # laser properties + samples 180 + range_max 8.0 + fov 3.14159 + resolution 1 - # model properties - size [ 0.15 0.15 0.2 ] - color "blue" -) -@endverbatim + # model properties + size [ 0.15 0.15 0.2 ] + color "blue" + ) + @endverbatim -@par Details + @par Details -- samples <int>\n - the number of laser samples per scan -- range_max <float>\n - the maximum range reported by the scanner, in meters. The scanner will not detect objects beyond this range. -- fov <float>\n - the angular field of view of the scanner, in radians. -- resolution <int>\n - Only calculate the true range of every nth laser sample. The missing samples are filled in with a linear interpolation. Generally it would be better to use fewer samples, but some (poorly implemented!) programs expect a fixed number of samples. Setting this number > 1 allows you to reduce the amount of computation required for your fixed-size laser vector. + - samples <int>\n + the number of laser samples per scan + - range_max <float>\n + the maximum range reported by the scanner, in meters. The scanner will not detect objects beyond this range. + - fov <float>\n + the angular field of view of the scanner, in radians. + - resolution <int>\n + Only calculate the true range of every nth laser sample. The missing samples are filled in with a linear interpolation. Generally it would be better to use fewer samples, but some (poorly implemented!) programs expect a fixed number of samples. Setting this number > 1 allows you to reduce the amount of computation required for your fixed-size laser vector. */ - ModelLaser::ModelLaser( World* world, - Model* parent ) +ModelLaser::ModelLaser( World* world, + Model* parent ) : Model( world, parent, MODEL_TYPE_LASER ), - data_dl(0), - data_dirty( true ), - samples( NULL ), // don't allocate sample buffer memory until Update() is called - sample_count( DEFAULT_SAMPLES ), - range_max( DEFAULT_MAXRANGE ), - fov( DEFAULT_FOV ), - resolution( DEFAULT_RESOLUTION ) + data_dl(0), + data_dirty( true ), + samples( NULL ), // don't allocate sample buffer memory until Update() is called + sample_count( DEFAULT_SAMPLES ), + range_max( DEFAULT_MAXRANGE ), + fov( DEFAULT_FOV ), + resolution( DEFAULT_RESOLUTION ) { PRINT_DEBUG2( "Constructing ModelLaser %d (%s)\n", - id, typestr ); + id, typestr ); // Model data members @@ -162,8 +162,8 @@ } static bool laser_raytrace_match( Model* hit, - Model* finder, - const void* dummy ) + Model* finder, + const void* dummy ) { // Ignore the model that's looking and things that are invisible to // lasers @@ -186,20 +186,20 @@ rayorg.a = bearing; stg_raytrace_result_t sample = - Raytrace( rayorg, - range_max, - laser_raytrace_match, - NULL, - true ); // z testing enabled + Raytrace( rayorg, + range_max, + laser_raytrace_match, + NULL, + true ); // z testing enabled samples[t].range = sample.range; // if we hit a model and it reflects brightly, we set // reflectance high, else low if( sample.mod && ( sample.mod->vis.laser_return >= LaserBright ) ) - samples[t].reflectance = 1; + samples[t].reflectance = 1; else - samples[t].reflectance = 0; + samples[t].reflectance = 0; // todo - lower bound on range bearing += sample_incr; @@ -209,22 +209,22 @@ if( resolution > 1 ) { for( unsigned int t=resolution; t<sample_count; t+=resolution ) - for( unsigned int g=1; g<resolution; g++ ) - { - if( t >= sample_count ) - break; + for( unsigned int g=1; g<resolution; g++ ) + { + if( t >= sample_count ) + break; - // copy the rightmost sample data into this point - memcpy( &samples[t-g], - &samples[t-resolution], - sizeof(stg_laser_sample_t)); + // copy the rightmost sample data into this point + memcpy( &samples[t-g], + &samples[t-resolution], + sizeof(stg_laser_sample_t)); - double left = samples[t].range; - double right = samples[t-resolution].range; + double left = samples[t].range; + double right = samples[t-resolution].range; - // linear range interpolation between the left and right samples - samples[t-g].range = (left-g*(left-right)/resolution); - } + // linear range interpolation between the left and right samples + samples[t-g].range = (left-g*(left-right)/resolution); + } } data_dirty = true; @@ -317,8 +317,8 @@ { data_dirty = false; - if( data_dl < 1 ) - data_dl = glGenLists(1); + if( data_dl < 1 ) + data_dl = glGenLists(1); glNewList( data_dl, GL_COMPILE ); @@ -330,7 +330,7 @@ glBegin( GL_POINTS ); glVertex2f( 0,0 ); glEnd(); - PopColor(); + PopColor(); // pack the laser hit points into a vertex array for fast rendering static float* pts = NULL; @@ -339,79 +339,79 @@ pts[0] = 0.0; pts[1] = 0.0; - PushColor( 0, 0, 1, 0.5 ); - glDepthMask( GL_FALSE ); - glPointSize( 2 ); + PushColor( 0, 0, 1, 0.5 ); + glDepthMask( GL_FALSE ); + glPointSize( 2 ); - for( unsigned int s=0; s<sample_count; s++ ) - { - double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; - pts[2*s+2] = (float)(samples[s].range * cos(ray_angle) ); - pts[2*s+3] = (float)(samples[s].range * sin(ray_angle) ); + for( unsigned int s=0; s<sample_count; s++ ) + { + double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; + pts[2*s+2] = (float)(samples[s].range * cos(ray_angle) ); + pts[2*s+3] = (float)(samples[s].range * sin(ray_angle) ); - // if the sample is unusually bright, draw a little blob - if( showLaserData && (samples[s].reflectance > 0) ) - { - glBegin( GL_POINTS ); - glVertex2f( pts[2*s+2], pts[2*s+3] ); - glEnd(); - } - } + // if the sample is unusually bright, draw a little blob + if( showLaserData && (samples[s].reflectance > 0) ) + { + glBegin( GL_POINTS ); + glVertex2f( pts[2*s+2], pts[2*s+3] ); + glEnd(); + } + } - glVertexPointer( 2, GL_FLOAT, 0, pts ); + glVertexPointer( 2, GL_FLOAT, 0, pts ); - PopColor(); + PopColor(); - if( showLaserData ) - { - // draw the filled polygon in transparent blue - PushColor( 0, 0, 1, 0.1 ); - glDrawArrays( GL_POLYGON, 0, sample_count+1 ); - PopColor(); - } + if( showLaserData ) + { + // draw the filled polygon in transparent blue + PushColor( 0, 0, 1, 0.1 ); + glDrawArrays( GL_POLYGON, 0, sample_count+1 ); + PopColor(); + } if( showLaserStrikes ) - { - // draw the beam strike points - PushColor( 0, 0, 1, 0.8 ); - glDrawArrays( GL_POINTS, 0, sample_count+1 ); - PopColor(); - } + { + // draw the beam strike points + PushColor( 0, 0, 1, 0.8 ); + glDrawArrays( GL_POINTS, 0, sample_count+1 ); + PopColor(); + } - if( showLaserFov ) - { - for( unsigned int s=0; s<sample_count; s++ ) - { - double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; - pts[2*s+2] = (float)(range_max * cos(ray_angle) ); - pts[2*s+3] = (float)(range_max * sin(ray_angle) ); - } + if( showLaserFov ) + { + for( unsigned int s=0; s<sample_count; s++ ) + { + double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; + pts[2*s+2] = (float)(range_max * cos(ray_angle) ); + pts[2*s+3] = (float)(range_max * sin(ray_angle) ); + } - glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); - PushColor( 0, 0, 1, 0.5 ); - glDrawArrays( GL_POLYGON, 0, sample_count+1 ); - PopColor(); - // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + PushColor( 0, 0, 1, 0.5 ); + glDrawArrays( GL_POLYGON, 0, sample_count+1 ); + PopColor(); + // glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); - } + } - if( showLaserBeams ) - { - PushColor( 0, 0, 1, 0.5 ); - glBegin( GL_LINES ); + if( showLaserBeams ) + { + PushColor( 0, 0, 1, 0.5 ); + glBegin( GL_LINES ); - for( unsigned int s=0; s<sample_count; s++ ) - { + for( unsigned int s=0; s<sample_count; s++ ) + { - glVertex2f( 0,0 ); - double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; - glVertex2f( samples[s].range * cos(ray_angle), - samples[s].range * sin(ray_angle) ); + glVertex2f( 0,0 ); + double ray_angle = (s * (fov / (sample_count-1))) - fov/2.0; + glVertex2f( samples[s].range * cos(ray_angle), + samples[s].range * sin(ray_angle) ); - } - glEnd(); - PopColor(); - } + } + glEnd(); + PopColor(); + } glDepthMask( GL_TRUE ); Modified: code/stage/trunk/libstage/model_position.cc =================================================================== --- code/stage/trunk/libstage/model_position.cc 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/libstage/model_position.cc 2009-03-20 09:02:33 UTC (rev 7533) @@ -662,7 +662,7 @@ // draw lines connecting the waypoints if( waypoint_count > 1 ) { - glBegin( GL_LINE_STRIP ); + glBegin( GL_LINES ); for( unsigned int i=1; i < waypoint_count; i++ ) { Modified: code/stage/trunk/libstage/stage.cc =================================================================== --- code/stage/trunk/libstage/stage.cc 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/libstage/stage.cc 2009-03-20 09:02:33 UTC (rev 7533) @@ -254,7 +254,7 @@ } } -// // returns TRUE if any channel in the pixel is non-zero +// returns true if the value in the first channel is above threshold static gboolean pb_pixel_is_set( Fl_Shared_Image* img, int x, int y, int threshold ) { guchar* pixel = pb_get_pixel( img,x,y ); Modified: code/stage/trunk/worlds/simple.world =================================================================== --- code/stage/trunk/worlds/simple.world 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/worlds/simple.world 2009-03-20 09:02:33 UTC (rev 7533) @@ -7,7 +7,7 @@ include "sick.inc" interval_sim 100 # simulation timestep in milliseconds -interval_real 50 # real-time interval between simulation updates in milliseconds +interval_real 0 # real-time interval between simulation updates in milliseconds paused 0 @@ -44,5 +44,9 @@ sicklaser() ctrl "wander" + + # report error-free position in world coordinates + localization "gps" + localization_origin [ 0 0 0 0 ] ) Modified: code/stage/trunk/worlds/wavefront.cfg =================================================================== --- code/stage/trunk/worlds/wavefront.cfg 2009-03-19 06:38:54 UTC (rev 7532) +++ code/stage/trunk/worlds/wavefront.cfg 2009-03-20 09:02:33 UTC (rev 7533) @@ -1,23 +1,34 @@ driver ( name "stage" - plugin "libstageplugin" + plugin "stageplugin" provides ["6665:simulation:0"] - worldfile "simple.world" + worldfile "wavefront.world" ) +#driver +#( +# name "stage" +# provides ["6665:map:0"] +# model "cave" +#) + driver ( - name "stage" + name "mapfile" provides ["6665:map:0"] - model "cave" + filename "bitmaps/cave.png" + resolution 0.032 # meters per pixel + negate 0 + origin [-8 -8 ] # real-world location of the bottom-left-hand corner of the map ) + driver ( name "stage" provides ["6665:position2d:0" "6665:laser:0"] - model "robot1" + model "r0" ) driver @@ -36,19 +47,19 @@ # requires ["output::6665:position2d:0" "input::6665:position2d:0" "6665:laser:0"] #) -driver -( - name "amcl" - provides ["6665:localize:0" "6665:position2d:2"] - requires ["odometry::6665:position2d:0" "6665:laser:0" "laser::6665:map:0"] -) +#driver +#( +# name "amcl" +# provides ["6665:localize:0" "6665:position2d:2"] +# requires ["odometry::6665:position2d:0" "6665:laser:0" "laser::6665:map:0"] +#) driver ( name "wavefront" provides ["6665:planner:0"] - requires ["output::6665:position2d:1" "input::6665:position2d:2" "6665:map:0"] + requires ["output::6665:position2d:1" "input::6665:position2d:0" "6665:map:0"] safety_dist 0.15 distance_epsilon 0.5 angle_epsilon 10 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |