Revision: 8587
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8587&view=rev
Author:   rtv
Date:     2010-03-12 08:06:06 +0000 (Fri, 12 Mar 2010)

Log Message:
-----------
cleaning up API - may break some clients

Modified Paths:
--------------
    code/stage/trunk/examples/ctrl/CMakeLists.txt
    code/stage/trunk/examples/ctrl/fasr.cc
    code/stage/trunk/examples/ctrl/fasr2.cc
    code/stage/trunk/examples/ctrl/lasernoise.cc
    code/stage/trunk/examples/ctrl/pioneer_flocking.cc
    code/stage/trunk/examples/ctrl/wander.cc
    code/stage/trunk/examples/ctrl/wander_pioneer.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/model_ranger.cc
    code/stage/trunk/libstage/stage.hh
    code/stage/trunk/libstage/world.cc
    code/stage/trunk/webstage/webstage.cc
    code/stage/trunk/worlds/benchmark/expand_pioneer.cc
    code/stage/trunk/worlds/benchmark/expand_swarm.cc

Modified: code/stage/trunk/examples/ctrl/CMakeLists.txt
===================================================================
--- code/stage/trunk/examples/ctrl/CMakeLists.txt       2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/examples/ctrl/CMakeLists.txt       2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -1,7 +1,6 @@
 
 SET( PLUGINS
      fasr
-     lasernoise
      sink
      source
      wander

Modified: code/stage/trunk/examples/ctrl/fasr.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr.cc      2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/examples/ctrl/fasr.cc      2010-03-12 08:06:06 UTC (rev 
8587)
@@ -212,9 +212,9 @@
         double minright = 1e6;
   
         // Get the data
-        uint32_t sample_count=0;
-        ModelLaser::Sample* scan = laser->GetSamples( &sample_count );
-    
+        const std::vector<ModelLaser::Sample>& scan = laser->GetSamples();
+        uint32_t sample_count = scan.size();
+  
         for (uint32_t i = 0; i < sample_count; i++)
                {               
                  if( verbose ) printf( "%.3f ", scan[i].range );
@@ -339,10 +339,9 @@
         //   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( laser->GetSamples().size() > 0 );
+               
         switch( robot->mode )
                {
                case MODE_DOCK:

Modified: code/stage/trunk/examples/ctrl/fasr2.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-12 08:06:06 UTC (rev 
8587)
@@ -509,8 +509,10 @@
                  pos->Say( "" );
                  
                  // stay put while anything is close behind 
+                       const std::vector<ModelRanger::Sensor>& sensors = 
ranger->GetSensors();
+
                  for( unsigned int s = BACK_SENSOR_FIRST; s <= 
BACK_SENSOR_LAST; ++s )
-                        if( ranger->sensors[s].range < wait_distance) 
+                        if( sensors[s].range < wait_distance) 
                                {
                                  pos->Say( "Waiting..." );
                                  pos->SetXSpeed( 0.0 );
@@ -551,9 +553,10 @@
         double minright = 1e6;
   
         // Get the data
-        uint32_t sample_count=0;
-        ModelLaser::Sample* scan = laser->GetSamples( &sample_count );
-    
+        //ModelLaser::Sample* scan = laser->GetSamples( &sample_count );
+        const std::vector<ModelLaser::Sample>& scan = laser->GetSamples();
+    uint32_t sample_count = scan.size();
+
         for (uint32_t i = 0; i < sample_count; i++)
                {               
                  if( verbose ) printf( "%.3f ", scan[i].range );
@@ -715,9 +718,11 @@
         //      printf( "model %s power pack @%p is charging\n",
         //                             laser->Token(), laser->power_pack );
   
-        if( laser->GetSamples(NULL) == NULL )
-               return 0;
+        //if( laser->GetSamples(NULL) == NULL )
+               //return 0;
 
+        assert( laser->GetSamples().size() > 0 );
+
         switch( robot->mode )
                {
                case MODE_DOCK:

Modified: code/stage/trunk/examples/ctrl/lasernoise.cc
===================================================================
--- code/stage/trunk/examples/ctrl/lasernoise.cc        2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/examples/ctrl/lasernoise.cc        2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -25,11 +25,12 @@
 {
   // get the data
   uint32_t sample_count=0;
-       ModelLaser::Sample* scan = mod->GetSamples( &sample_count );
   
-  if( scan )
-    for( unsigned int i=0; i<sample_count; i++ )
-      scan[i].range *= simple_normal_deviate( 1.0, DEVIATION );
+       const std::vector<ModelLaser::Sample>& scan = mod->GetSamples();
+       
+  if( scan.size()>0 )
+    FOR_EACH( it, scan )
+      it->range *= simple_normal_deviate( 1.0, DEVIATION );
   
   return 0; // run again
 }

Modified: code/stage/trunk/examples/ctrl/pioneer_flocking.cc
===================================================================
--- code/stage/trunk/examples/ctrl/pioneer_flocking.cc  2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/examples/ctrl/pioneer_flocking.cc  2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -68,12 +68,13 @@
   // compute the vector sum of the sonar ranges              
   double dx=0, dy=0;
   
+       const std::vector<ModelRanger::Sensor>& sensors = rgr->GetSensors();
+
   // use the front-facing sensors only
   for( unsigned int i=0; i < 8; i++ )
         {
-               ModelRanger::Sensor& s = rgr->sensors[i];
-               dx += s.range * cos( s.pose.a );
-               dy += s.range * sin( s.pose.a );
+               dx += sensors[i].range * cos( sensors[i].pose.a );
+               dy += sensors[i].range * sin( sensors[i].pose.a );
         }
   
   if( (dx == 0) || (dy == 0) )
@@ -85,12 +86,12 @@
   double turn_speed = EXPAND_WGAIN * resultant_angle;
   
   // if the front is clear, drive forwards
-  if( (rgr->sensors[3].range > SAFE_DIST) && // forwards
-         (rgr->sensors[4].range > SAFE_DIST) &&
-         (rgr->sensors[5].range > SAFE_DIST ) && //
-         (rgr->sensors[6].range > SAFE_DIST/2.0) && 
-         (rgr->sensors[2].range > SAFE_DIST ) && 
-         (rgr->sensors[1].range > SAFE_DIST/2.0) && 
+  if( (sensors[3].range > SAFE_DIST) && // forwards
+         (sensors[4].range > SAFE_DIST) &&
+         (sensors[5].range > SAFE_DIST ) && //
+         (sensors[6].range > SAFE_DIST/2.0) && 
+         (sensors[2].range > SAFE_DIST ) && 
+         (sensors[1].range > SAFE_DIST/2.0) && 
          (fabs( resultant_angle ) < SAFE_ANGLE) )
        {
          forward_speed = VSPEED;

Modified: code/stage/trunk/examples/ctrl/wander.cc
===================================================================
--- code/stage/trunk/examples/ctrl/wander.cc    2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/examples/ctrl/wander.cc    2010-03-12 08:06:06 UTC (rev 
8587)
@@ -50,14 +50,14 @@
 int LaserUpdate( Model* mod, robot_t* robot )
 {
   // get the data
-  uint32_t sample_count=0;
-       ModelLaser::Sample* scan = robot->laser->GetSamples( &sample_count );
-  if( ! scan )
+       const std::vector<ModelLaser::Sample>& scan = 
robot->laser->GetSamples();
+  uint32_t sample_count = scan.size();
+  if( ! sample_count < 1 )
     return 0;
   
   bool obstruction = false;
   bool stop = false;
-
+       
   // find the closest distance to the left and right and check if
   // there's anything in front
   double minleft = 1e6;

Modified: code/stage/trunk/examples/ctrl/wander_pioneer.cc
===================================================================
--- code/stage/trunk/examples/ctrl/wander_pioneer.cc    2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/examples/ctrl/wander_pioneer.cc    2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -75,12 +75,13 @@
   // compute the vector sum of the sonar ranges              
   double dx=0, dy=0;
   
+       const std::vector<ModelRanger::Sensor>& sensors = rgr->GetSensors();
+
   // use the front-facing sensors only
   for( unsigned int i=0; i < 8; i++ )
         {
-               ModelRanger::Sensor& s = rgr->sensors[i];
-               dx += s.range * cos( s.pose.a );
-               dy += s.range * sin( s.pose.a );
+               dx += sensors[i].range * cos( sensors[i].pose.a );
+               dy += sensors[i].range * sin( sensors[i].pose.a );
                
                //printf( "sensor %d angle= %.2f\n", s, rgr->sensors[s].pose.a 
);        
         }
@@ -96,12 +97,12 @@
   //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed );
   
   // if the front is clear, drive forwards
-  if( (rgr->sensors[3].range > SAFE_DIST) && // forwards
-               (rgr->sensors[4].range > SAFE_DIST) &&
-               (rgr->sensors[5].range > SAFE_DIST/2.0) && //
-               (rgr->sensors[6].range > SAFE_DIST/4.0) && 
-               (rgr->sensors[2].range > SAFE_DIST/2.0) && 
-               (rgr->sensors[1].range > SAFE_DIST/4.0) && 
+  if( (sensors[3].range > SAFE_DIST) && // forwards
+               (sensors[4].range > SAFE_DIST) &&
+               (sensors[5].range > SAFE_DIST/2.0) && //
+               (sensors[6].range > SAFE_DIST/4.0) && 
+               (sensors[2].range > SAFE_DIST/2.0) && 
+               (sensors[1].range > SAFE_DIST/4.0) && 
                (fabs( resultant_angle ) < SAFE_ANGLE) )
         {
                forward_speed = VSPEED;
@@ -147,29 +148,5 @@
                robot->closest_heading_error = robot->closest->geom.a;
         }
     
-//   if( (dx == 0) || (dy == 0) )
-//      return 0;
-    
-//   double resultant_angle = atan2( dy, dx );
-//   double forward_speed = 0.0;
-//   double side_speed = 0.0;     
-//   double turn_speed = WGAIN * resultant_angle;
-  
-//   //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed 
);
-  
-//   // if the front is clear, drive forwards
-//   if( (rgr->sensors[3].range > SAFE_DIST) && // forwards
-//             (rgr->sensors[4].range > SAFE_DIST) &&
-//             (rgr->sensors[5].range > SAFE_DIST/2.0) && //
-//             (rgr->sensors[6].range > SAFE_DIST/4.0) && 
-//             (rgr->sensors[2].range > SAFE_DIST/2.0) && 
-//             (rgr->sensors[1].range > SAFE_DIST/4.0) && 
-//             (fabs( resultant_angle ) < SAFE_ANGLE) )
-//      {
-//             forward_speed = VSPEED;
-//      }
-  
-//   robot->position->SetSpeed( forward_speed, side_speed, turn_speed );
-
   return 0;
 }

Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc  2010-03-12 04:55:07 UTC (rev 8586)
+++ code/stage/trunk/libstage/model.cc  2010-03-12 08:06:06 UTC (rev 8587)
@@ -184,7 +184,7 @@
                }
 }
 
-void Size::Save( Worldfile* wf, int section, const char* keyword )
+void Size::Save( Worldfile* wf, int section, const char* keyword ) const
 {
   wf->WriteTupleLength( section, keyword, 0, x );
   wf->WriteTupleLength( section, keyword, 1, y );
@@ -980,7 +980,7 @@
   return NULL;
 }
 
-stg_kg_t Model::GetTotalMass()
+stg_kg_t Model::GetTotalMass() const
 {
   stg_kg_t sum = mass;
   
@@ -990,7 +990,7 @@
   return sum;
 }
 
-stg_kg_t Model::GetMassOfChildren()
+stg_kg_t Model::GetMassOfChildren() const
 {
   return( GetTotalMass() - mass);
 }

Modified: code/stage/trunk/libstage/model_laser.cc
===================================================================
--- code/stage/trunk/libstage/model_laser.cc    2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/libstage/model_laser.cc    2010-03-12 08:06:06 UTC (rev 
8587)
@@ -125,7 +125,7 @@
   SampleConfig();
 }
 
-ModelLaser::Config ModelLaser::GetConfig()
+ModelLaser::Config ModelLaser::GetConfig() const
 { 
   Config cfg;
   cfg.sample_count = sample_count;
@@ -239,7 +239,7 @@
   Model::Shutdown();
 }
 
-void ModelLaser::Print( char* prefix )
+void ModelLaser::Print( char* prefix ) const
 {
   Model::Print( prefix );
 
@@ -254,16 +254,8 @@
   puts( " ]" );
 }
 
-
-ModelLaser::Sample* ModelLaser::GetSamples( uint32_t* count )
+const std::vector<ModelLaser::Sample>& ModelLaser::GetSamples() const
 { 
-  // get a C style array from our vector
-  if( count ) *count = sample_count;
-  return &samples[0];
-}
-
-const std::vector<ModelLaser::Sample>& ModelLaser::GetSamples()
-{ 
   return samples;
 }
 

Modified: code/stage/trunk/libstage/model_position.cc
===================================================================
--- code/stage/trunk/libstage/model_position.cc 2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/libstage/model_position.cc 2010-03-12 08:06:06 UTC (rev 
8587)
@@ -88,6 +88,7 @@
                                                                                
Model* parent,
                                                                                
const std::string& type ) : 
   Model( world, parent, type ),
+  // private
   goal(0,0,0,0),
   control_mode( CONTROL_VELOCITY ),
   drive_mode( DRIVE_DIFFERENTIAL ),
@@ -96,8 +97,9 @@
                                                        drand48() * 
INTEGRATION_ERROR_MAX_Y - INTEGRATION_ERROR_MAX_Y/2.0,
                                                        drand48() * 
INTEGRATION_ERROR_MAX_Z - INTEGRATION_ERROR_MAX_Z/2.0,
                                                        drand48() * 
INTEGRATION_ERROR_MAX_A - INTEGRATION_ERROR_MAX_A/2.0 ),
+  wheelbase( 1.0 ),
+  //public
   waypoints(),
-  wheelbase( 1.0 ),
   wpvis(),
   posevis()
 {

Modified: code/stage/trunk/libstage/model_ranger.cc
===================================================================
--- code/stage/trunk/libstage/model_ranger.cc   2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/libstage/model_ranger.cc   2010-03-12 08:06:06 UTC (rev 
8587)
@@ -276,7 +276,7 @@
   Model::Update();
 }
 
-void ModelRanger::Print( char* prefix )
+void ModelRanger::Print( char* prefix ) const
 {
   Model::Print( prefix );
 

Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh  2010-03-12 04:55:07 UTC (rev 8586)
+++ code/stage/trunk/libstage/stage.hh  2010-03-12 08:06:06 UTC (rev 8587)
@@ -245,7 +245,7 @@
     {/*empty*/}        
        
         void Load( Worldfile* wf, int section, const char* keyword );
-        void Save( Worldfile* wf, int section, const char* keyword );
+        void Save( Worldfile* wf, int section, const char* keyword ) const;
         
         void Zero()
         { x=y=z=0.0; }
@@ -885,7 +885,7 @@
     virtual void Stop(){ paused = true; };
     virtual void TogglePause(){ paused ? Start() : Stop(); };
 
-               bool Paused(){ return( paused ); };
+               bool Paused() const { return( paused ); };
                
                /** Force the GUI to redraw the world, even if paused. This
                                imlementation does nothing, but can be 
overridden by
@@ -922,11 +922,9 @@
     void LoadBlock( Worldfile* wf, int entity );
     void LoadBlockGroup( Worldfile* wf, int entity );
     
-    virtual Model* RecentlySelectedModel(){ return NULL; }
+    virtual Model* RecentlySelectedModel() const { return NULL; }
                
     SuperRegion* AddSuperRegion( const stg_point_int_t& coord );
-    //SuperRegion* GetSuperRegion( const stg_point_int_t& coord );
-    //SuperRegion* GetSuperRegionCached( const stg_point_int_t& coord);
     SuperRegion* GetSuperRegion( int32_t x, int32_t y );
     void ExpireSuperRegion( SuperRegion* sr );
                
@@ -938,10 +936,10 @@
                
     /** convert a distance in meters to a distance in world occupancy
                  grid pixels */
-    int32_t MetersToPixels( stg_meters_t x )
+    int32_t MetersToPixels( stg_meters_t x ) const
     { return (int32_t)floor(x * ppm); };
                
-    stg_point_int_t MetersToPixels( const stg_point_t& pt )
+    stg_point_int_t MetersToPixels( const stg_point_t& pt ) const
     { return stg_point_int_t( MetersToPixels(pt.x), MetersToPixels(pt.y)); };
                
     // dummy implementations to be overloaded by GUI subclasses
@@ -1025,7 +1023,7 @@
 
         /** returns an event queue index number for a model to use for
                  updates */
-        unsigned int GetEventQueue( Model* mod );
+        unsigned int GetEventQueue( Model* mod ) const;
 
   public:
     /** returns true when time to quit, false otherwise */
@@ -1035,11 +1033,11 @@
                          double ppm = DEFAULT_PPM );
                
     virtual ~World();
-        
-    stg_usec_t SimTimeNow(void);
-        
-    Worldfile* GetWorldFile(){ return wf; };
-        
+       
+    stg_usec_t SimTimeNow(void) const { return sim_time; }
+               
+    Worldfile* GetWorldFile()  { return wf; };
+               
     virtual bool IsGUI() const { return false; }
         
     virtual void Load( const char* worldfile_path );
@@ -1048,7 +1046,7 @@
     virtual bool Save( const char* filename );
     virtual bool Update(void);
         
-    bool TestQuit(){ return( quit || quit_all );  }
+    bool TestQuit() const { return( quit || quit_all );  }
     void Quit(){ quit = true; }
     void QuitAll(){ quit_all = true; }
     void CancelQuit(){ quit = false; }
@@ -1058,17 +1056,17 @@
 
     /** Get the resolution in pixels-per-metre of the underlying
                  discrete raytracing model */ 
-    double Resolution(){ return ppm; };
+    double Resolution() const { return ppm; };
    
     /** Returns a pointer to the model identified by name, or NULL if
                  nonexistent */
     Model* GetModel( const std::string& name ) const;
   
     /** Return the 3D bounding box of the world, in meters */
-    const stg_bounds3d_t& GetExtent(){ return extent; };
+    const stg_bounds3d_t& GetExtent() const { return extent; };
   
     /** Return the number of times the world has been updated. */
-    uint64_t GetUpdateCount() { return updates; }
+    uint64_t GetUpdateCount() const { return updates; }
 
         /// Register an Option for pickup by the GUI
         void RegisterOption( Option* opt );    
@@ -2216,10 +2214,10 @@
         uint32_t GetId()  const { return id; }
         
         /** Get the total mass of a model and it's children recursively */
-        stg_kg_t GetTotalMass();
+        stg_kg_t GetTotalMass() const;
         
         /** Get the mass of this model's children recursively. */
-        stg_kg_t GetMassOfChildren();
+        stg_kg_t GetMassOfChildren() const;
 
         /** Change a model's parent - experimental*/
         int SetParent( Model* newparent);
@@ -2456,7 +2454,7 @@
                Bounds range_bounds; ///< min and max ranges
                stg_radians_t fov; ///< Field of view, centered about the pose 
angle
                stg_usec_t interval; ///< Time interval  between updates (TODO: 
is this used?)
-        };
+        }; 
                
   private:      
         class Vis : public Visualizer 
@@ -2472,12 +2470,12 @@
                virtual void Visualize( Model* mod, Camera* cam );
         } vis;
                
-        unsigned int sample_count;
-        std::vector<Sample> samples;
-
-        stg_meters_t range_max;
-        stg_radians_t fov;
-        uint32_t resolution;
+               unsigned int sample_count;
+               std::vector<Sample> samples;
+               
+               stg_meters_t range_max;
+               stg_radians_t fov;
+               uint32_t resolution;
     
         // set up data buffers after the config changes
         void SampleConfig();
@@ -2495,16 +2493,13 @@
         virtual void Shutdown();
         virtual void Update();
         virtual void Load();
-        virtual void Print( char* prefix );
+        virtual void Print( char* prefix ) const;
   
-        /** returns an array of range & reflectance samples */
-        Sample* GetSamples( uint32_t* count );
-        
         /** returns a const reference to a vector of range and reflectance 
samples */
-        const std::vector<Sample>& GetSamples();
+        const std::vector<Sample>& GetSamples() const;
         
         /** Get the user-tweakable configuration of the laser */
-        Config GetConfig( );
+        Config GetConfig( ) const;
         
         /** Set the user-tweakable configuration of the laser */
         void SetConfig( Config& cfg );  
@@ -2718,25 +2713,28 @@
         };
 
   protected:
-
-        virtual void Startup();
-        virtual void Shutdown();
-        virtual void Update();
-        virtual void DataVisualize( Camera* cam );
-       
+               
+               virtual void Startup();
+               virtual void Shutdown();
+               virtual void Update();
+               virtual void DataVisualize( Camera* cam );
+               
   public:
-        ModelRanger( World* world, Model* parent,
-                                         const std::string& type );
-        virtual ~ModelRanger();
-       
-        virtual void Load();
-        virtual void Print( char* prefix );
-        
-        std::vector<Sensor> sensors;
-       
+               ModelRanger( World* world, Model* parent,
+                                                                const 
std::string& type );
+               virtual ~ModelRanger();
+               
+               virtual void Load();
+               virtual void Print( char* prefix ) const;
+               
+               const std::vector<Sensor>& GetSensors() const
+               { return sensors; }
+               
   private:
-        static Option showRangerData;
-        static Option showRangerTransducers;           
+               std::vector<Sensor> sensors;
+               
+               static Option showRangerData;
+               static Option showRangerTransducers;            
   };
        
   // BLINKENLIGHT MODEL ----------------------------------------------------

Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc  2010-03-12 04:55:07 UTC (rev 8586)
+++ code/stage/trunk/libstage/world.cc  2010-03-12 08:06:06 UTC (rev 8587)
@@ -597,7 +597,7 @@
   return false;
 }
 
-unsigned int World::GetEventQueue( Model* mod )
+unsigned int World::GetEventQueue( Model* mod ) const
 {
   if( worker_threads < 1 )
     return 0;
@@ -1053,9 +1053,6 @@
   option_table.insert( opt );
 }
 
-stg_usec_t World::SimTimeNow(void)
-{ return sim_time; }
-
 void World::Log( Model* mod )
 {
   LogEntry( sim_time, mod);

Modified: code/stage/trunk/webstage/webstage.cc
===================================================================
--- code/stage/trunk/webstage/webstage.cc       2010-03-12 04:55:07 UTC (rev 
8586)
+++ code/stage/trunk/webstage/webstage.cc       2010-03-12 08:06:06 UTC (rev 
8587)
@@ -249,25 +249,25 @@
                  std::vector<double> ranges;
                        
                  ModelRanger* ranger = (ModelRanger*)mod;              
-                     
-                 if(ranger){                                   
-                        for(unsigned int i=0;i<ranger->sensors.size();i++){
-                               //char str[10];
-                               //sprintf(str,"size:%d",ranger->sensors.size());
-                               //puts(str);
-                               //puts("in the ranger loop");
-                               websim::Pose pos;
-                               Pose rpos;
-                               rpos = ranger->sensors[i].pose;
+                       
+                       const std::vector<ModelRanger::Sensor>& sensors = 
ranger->GetSensors();
+      
+                       FOR_EACH( it, sensors )
+                               {                               //char str[10];
+                                       
//sprintf(str,"size:%d",ranger->sensors.size());
+                                       //puts(str);
+                                       //puts("in the ranger loop");
+                                       websim::Pose pos;
+                                       Pose rpos;
+                                       rpos = it->pose;
                                pos.x = rpos.x;
                                pos.y = rpos.y;
                                pos.z = rpos.z;
                                pos.a = rpos.a;
                                p.push_back(pos);
 
-                               ranges.push_back(ranger->sensors[i].range);     
                                
+                               ranges.push_back(it->range);                    
                
                         }
-                 }
                        
                  WebSim::GetRangerData(name, t, p, ranges, format, response, 
xmlparent);
 

Modified: code/stage/trunk/worlds/benchmark/expand_pioneer.cc
===================================================================
--- code/stage/trunk/worlds/benchmark/expand_pioneer.cc 2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/worlds/benchmark/expand_pioneer.cc 2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -63,9 +63,11 @@
   // compute the vector sum of the sonar ranges              
   double dx=0, dy=0;
   
-  FOR_EACH( it, rgr->sensors )
+       const std::vector<ModelRanger::Sensor>& sensors = rgr->GetSensors();
+
+  FOR_EACH( it, sensors )
         {
-               ModelRanger::Sensor& s = *it;
+               const ModelRanger::Sensor& s = *it;
                dx += s.range * cos( s.pose.a );
                dy += s.range * sin( s.pose.a );
                
@@ -83,12 +85,12 @@
   //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed );
   
   // if the front is clear, drive forwards
-  if( (rgr->sensors[3].range > SAFE_DIST) && // forwards
-               (rgr->sensors[4].range > SAFE_DIST) &&
-               (rgr->sensors[5].range > SAFE_DIST/2.0) && //
-               (rgr->sensors[6].range > SAFE_DIST/4.0) && 
-               (rgr->sensors[2].range > SAFE_DIST/2.0) && 
-               (rgr->sensors[1].range > SAFE_DIST/4.0) && 
+  if( (sensors[3].range > SAFE_DIST) && // forwards
+               (sensors[4].range > SAFE_DIST) &&
+               (sensors[5].range > SAFE_DIST/2.0) && //
+               (sensors[6].range > SAFE_DIST/4.0) && 
+               (sensors[2].range > SAFE_DIST/2.0) && 
+               (sensors[1].range > SAFE_DIST/4.0) && 
                (fabs( resultant_angle ) < SAFE_ANGLE) )
         {
                forward_speed = VSPEED;

Modified: code/stage/trunk/worlds/benchmark/expand_swarm.cc
===================================================================
--- code/stage/trunk/worlds/benchmark/expand_swarm.cc   2010-03-12 04:55:07 UTC 
(rev 8586)
+++ code/stage/trunk/worlds/benchmark/expand_swarm.cc   2010-03-12 08:06:06 UTC 
(rev 8587)
@@ -60,10 +60,12 @@
 {      
   // compute the vector sum of the sonar ranges              
   double dx=0, dy=0;
-  
-  FOR_EACH( it, rgr->sensors )
+       
+       const std::vector<ModelRanger::Sensor>& sensors = rgr->GetSensors();
+
+  FOR_EACH( it, sensors )
         {
-               ModelRanger::Sensor& s = *it;
+               const ModelRanger::Sensor& s = *it;
                dx += s.range * cos( s.pose.a );
                dy += s.range * sin( s.pose.a );
                
@@ -81,15 +83,15 @@
   //printf( "resultant %.2f turn_speed %.2f\n", resultant_angle, turn_speed );
 
   // if the front is clear, drive forwards
-  if( (rgr->sensors[0].range > SAFE_DIST) &&
+  if( (sensors[0].range > SAFE_DIST) &&
 
-               (rgr->sensors[1].range > SAFE_DIST/1.5) &&
-               (rgr->sensors[2].range > SAFE_DIST/3.0) && 
-               (rgr->sensors[3].range > SAFE_DIST/5.0) && 
+               (sensors[1].range > SAFE_DIST/1.5) &&
+               (sensors[2].range > SAFE_DIST/3.0) && 
+               (sensors[3].range > SAFE_DIST/5.0) && 
 
-               (rgr->sensors[9].range > SAFE_DIST/5.0) && 
-               (rgr->sensors[10].range > SAFE_DIST/3.0) && 
-               (rgr->sensors[11].range > SAFE_DIST/1.5) && 
+               (sensors[9].range > SAFE_DIST/5.0) && 
+               (sensors[10].range > SAFE_DIST/3.0) && 
+               (sensors[11].range > SAFE_DIST/1.5) && 
                (fabs( resultant_angle ) < SAFE_ANGLE) )
         {
                forward_speed = VSPEED;


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

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

Reply via email to