Revision: 8592
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8592&view=rev
Author:   rtv
Date:     2010-03-18 01:31:15 +0000 (Thu, 18 Mar 2010)

Log Message:
-----------
broken queuing in fasr2

Modified Paths:
--------------
    code/stage/trunk/examples/ctrl/astar/findpath.cpp
    code/stage/trunk/examples/ctrl/fasr.cc
    code/stage/trunk/examples/ctrl/fasr2.cc
    code/stage/trunk/worlds/fasr2.world

Modified: code/stage/trunk/examples/ctrl/astar/findpath.cpp
===================================================================
--- code/stage/trunk/examples/ctrl/astar/findpath.cpp   2010-03-16 05:14:09 UTC 
(rev 8591)
+++ code/stage/trunk/examples/ctrl/astar/findpath.cpp   2010-03-18 01:31:15 UTC 
(rev 8592)
@@ -111,7 +111,8 @@
 // AddSuccessor to give the successors to the AStar class. The A* specific 
initialisation
 // is done for each node internally, so here you just set the state 
information that
 // is specific to the application
-bool MapSearchNode::GetSuccessors( AStarSearch<MapSearchNode> *astarsearch, 
MapSearchNode *parent_node )
+bool MapSearchNode::GetSuccessors( AStarSearch<MapSearchNode> *astarsearch, 
+                                                                               
          MapSearchNode *parent_node )
 {
 
        int parent_x = -1; 
@@ -123,12 +124,11 @@
                parent_y = parent_node->y;
        }
        
-
        MapSearchNode NewNode;
 
        // push each possible move except allowing the search to go backwards
 
-       if( (GetMap( x-1, y ) < (unsigned int)9) 
+       if( (GetMap( x-1, y ) < 9) 
                && !((parent_x == x-1) && (parent_y == y))
          ) 
        {

Modified: code/stage/trunk/examples/ctrl/fasr.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr.cc      2010-03-16 05:14:09 UTC (rev 
8591)
+++ code/stage/trunk/examples/ctrl/fasr.cc      2010-03-18 01:31:15 UTC (rev 
8592)
@@ -11,7 +11,7 @@
 const double stopdist = 0.5;
 const int avoidduration = 10;
 const int workduration = 20;
-const int payload = 1;
+const unsigned int payload = 1;
 
 double have[4][4] = { 
   //  { -120, -180, 180, 180 }

Modified: code/stage/trunk/examples/ctrl/fasr2.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-16 05:14:09 UTC (rev 
8591)
+++ code/stage/trunk/examples/ctrl/fasr2.cc     2010-03-18 01:31:15 UTC (rev 
8592)
@@ -11,8 +11,8 @@
 const double avoidturn = 0.5;
 const double minfrontdistance = 0.7;  
 const double stopdist = 0.5;
-const int avoidduration = 10;
-const int PAYLOAD = 1;
+const unsigned int avoidduration = 10;
+const unsigned int PAYLOAD = 1;
 
 //const int TRAIL_LENGTH_MAX = 500;
 
@@ -25,8 +25,85 @@
 
 
 
-class Edge;
+// abstract base class
+class Queue
+{
+public:
+  Queue() {};  
+  virtual ~Queue() {}
+  
+  virtual int Clear() = 0;
+  virtual int Position( const char* id ) = 0;  
+  virtual int Join( const char* id ) = 0;
+  virtual int Leave( const char* id ) = 0;
+};
 
+// on-host implementation
+#include <list>
+
+class LocalQueue : public Queue
+{
+public:
+  std::list<std::string> list;
+  //pthread_mutex_t* mutex;
+  
+  LocalQueue() :
+        Queue(),
+        list()
+        //mutex( NULL )
+  {
+        //pthread_mutex_init( &mutex, NULL );
+  }    
+  
+  virtual int Clear() 
+  { 
+        list.clear(); 
+        return 0;
+  }
+  
+  virtual int Position( const char* id ) 
+  {
+        std::list<std::string>::iterator it( std::find( list.begin(), 
list.end(), std::string(id) ));    
+
+        if( it == list.end() )
+               return -1;
+        else
+               return std::distance( list.begin(), it );
+  }  
+
+  virtual int Join( const char* id )
+  {
+        list.push_back( id );
+        return 0;
+  }
+
+  virtual int Leave( const char* id )
+  {
+        list.erase( std::remove( list.begin(), list.end(), std::string(id)));
+        return 0;
+  }
+  
+  virtual void Print( const char* prefix )
+  {
+        printf( "%s queue:\n", prefix );
+        FOR_EACH( it, list )
+               printf( "\t%s\n", it->c_str() );
+  }            
+};
+
+
+class Node;
+
+class Edge
+{
+public:
+  Node* to;
+  double cost;
+  
+  Edge( Node* to, double cost=1.0 ) 
+        : to(to), cost(cost) {}  
+};
+
 class Node
 {
 public:
@@ -37,7 +114,11 @@
   Node( Pose pose )
         : pose(pose), value(0), edges() {}
   
-  ~Node();
+  ~Node() 
+  { 
+        FOR_EACH( it, edges )
+               { delete *it; }
+  }
   
   void AddEdge( Edge* edge ) 
   { 
@@ -48,17 +129,7 @@
   void Draw() const;
 }; 
 
-class Edge
-{
-public:
-  Node* to;
-  double cost;
-  
-  Edge( Node* to, double cost=1.0 ) 
-        : to(to), cost(cost) {}  
-};
 
-
 class Graph
 {
 public:
@@ -153,11 +224,6 @@
 };
 
 
-Node::~Node() 
-{ 
-  FOR_EACH( it, edges )
-        { delete *it; }
-}
 
 void Node::Draw() const
 {
@@ -166,9 +232,9 @@
   //snprintf( buf, 32, "%.0f", value );
   //Gl::draw_string( pose.x, pose.y+0.2, 0.1, buf );
 
-  glBegin( GL_POINTS );
-  glVertex2f( pose.x, pose.y );
-  glEnd();
+  //glBegin( GL_POINTS );
+  //glVertex2f( pose.x, pose.y );
+  //glEnd();
   
   glBegin( GL_LINES );
   FOR_EACH( it, edges )
@@ -238,6 +304,8 @@
   bool laser_sub;
   bool ranger_sub;
 
+  static std::vector<LocalQueue> queues;
+
 public:
 
   Robot( ModelPosition* pos, 
@@ -417,7 +485,7 @@
         
         unsigned int dist = 0;
         //FOR_EACH( it, path )
-        for( std::vector<point_t>::reverse_iterator rit = path.rbegin();
+        for( std::vector<point_t>::const_reverse_iterator rit = path.rbegin();
                        rit != path.rend();
                        ++rit )                 
         {      
@@ -802,10 +870,11 @@
         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 )
-        //  mode = MODE_QUEUE;
+        if( dest_dist < sourcegeom.size.x )
+               JoinQueue(0);
+        else
+               LeaveQueue(0);
 
-        
         if( dest_dist < sourcegeom.size.x/2.0 &&
                  pos->GetFlagCount() < PAYLOAD )
                {
@@ -871,13 +940,23 @@
   }
 
 
-  void Queue()
-  {
-        
+  void JoinQueue( unsigned int q )
+  {             
+        //puts( "joing queue" );
 
+        if( queues[q].Position( pos->Token() ) < 0 )
+               {
+                 queues[q].Join( pos->Token() );
+                 queues[q].Print( "q0");               
+               }
   }
 
 
+  void LeaveQueue( unsigned int q )
+  {
+        queues[q].Leave( pos->Token() );
+  }
+
   
   
   static int FlagIncr( Model* mod, Robot* robot )
@@ -901,6 +980,8 @@
 uint8_t* Robot::map_data( NULL );
 Model* Robot::map_model( NULL );
 
+std::vector<LocalQueue> Robot::queues(100);
+
 void split( const std::string& text, const std::string& separators, 
std::vector<std::string>& words)
 {
   int n = text.length();
@@ -918,6 +999,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 )
 {  

Modified: code/stage/trunk/worlds/fasr2.world
===================================================================
--- code/stage/trunk/worlds/fasr2.world 2010-03-16 05:14:09 UTC (rev 8591)
+++ code/stage/trunk/worlds/fasr2.world 2010-03-18 01:31:15 UTC (rev 8592)
@@ -23,9 +23,9 @@
 ( 
   size [ 1226.000 1080.000 ] 
 
-  center [ -36.643 -41.795 ] 
+  center [ -0.805 -1.069 ] 
   rotate [ 0 0 ]
-  scale 41.558 
+  scale 9.771 
   
   show_data 1
   show_flags 1


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