User Tools

Site Tools


darwin_walk_toward_target

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
darwin_walk_toward_target [2017/11/19 17:57] – [Motivation and Audience] yuhanghedarwin_walk_toward_target [2017/11/20 16:12] (current) – [Motivation and Audience] yuhanghe
Line 22: Line 22:
  
 The rest of this tutorial is presented as follows: The rest of this tutorial is presented as follows:
-  * [[new_mode_demonstration#Programming | Programming]] +  * [[darwin_walk_toward_target#Programming | Programming]] 
-  * [[new_mode_demonstration#Demonstration | Demonstration]] +  * [[darwin_walk_toward_target#Demonstration | Demonstration]] 
-  * [[new_mode_demonstration#Final_Words | Final Words]]+  * [[darwin_walk_toward_target#Final_Words | Final Words]]
  
  
Line 60: Line 60:
         }         }
     }     }
-    +        ////////////////////////////// 
 +        ///Skipping Unmodified Codes// 
 +        //////////////////////////////
 // Line 267 Add // Line 267 Add
   else if(m_cur_mode == SPRINT)   else if(m_cur_mode == SPRINT)
Line 158: Line 160:
         //////////////////////////////         //////////////////////////////
 //Around Line 80 //Around Line 80
 +
     ColorFinder* green_finder = new ColorFinder(120, 45, 35, 0, 0.3, 40.0);     ColorFinder* green_finder = new ColorFinder(120, 45, 35, 0, 0.3, 40.0);
     ColorFinder* blue_finder = new ColorFinder(225, 15, 45, 0, 0.3, 50.0);     ColorFinder* blue_finder = new ColorFinder(225, 15, 45, 0, 0.3, 50.0);
Line 166: Line 169:
     BallFollower marker_follower = BallFollower();     BallFollower marker_follower = BallFollower();
     //created a new BallFollower object to follow target/marker     //created a new BallFollower object to follow target/marker
-   +    int _marker_found = 0; 
 +    //created a flag for marker 
 +        ////////////////////////////// 
 +        ///Skipping Unmodified Codes// 
 +        //////////////////////////////
 //inside while loop //inside while loop
 while(1) { while(1) {
  
-else if(StatusCheck::m_cur_mode == SPRINT) //under a new mode called Sprint +    int greenCount 0, blueCount 0; 
-    {+    //created 2 int to store filtered pixel counts
     Point2D green, blue, center;     Point2D green, blue, center;
     //created 3 objects of Point2D class     //created 3 objects of Point2D class
 +
 +else if(StatusCheck::m_cur_mode == SPRINT) //under a new mode called Sprint
 +    {
          
-    green = green_finder->GetPosition(LinuxCamera::GetInstance()->fbuffer->m_HSVFrame); +    green = green_finder->GetPosition(LinuxCamera::GetInstance()->fbuffer->m_HSVFrame, greenCount); 
-    blue = blue_finder->GetPosition(LinuxCamera::GetInstance()->fbuffer->m_HSVFrame);+    //using the modified GetPosition function that also return filtered pixel counts 
 +    blue = blue_finder->GetPosition(LinuxCamera::GetInstance()->fbuffer->m_HSVFrame, blueCount);
     //store position of green and blue color     //store position of green and blue color
          
Line 189: Line 200:
     //calculate center of blue and green         //calculate center of blue and green    
                  
-    marker_tracker.process(center); +    _marker_found = marker_tracker.SearchAndTracking(center); 
-    //use camera tracking+    //use camera tracking and raise the flag if marker is found 
 +    
     }     }
-//L317 Add+        ////////////////////////////// 
 +        ///Skipping Unmodified Codes// 
 +        ////////////////////////////// 
 +//around Line 350 Add
   case SPRINT:   case SPRINT:
   //implement new codes here to execute after pressing start button   //implement new codes here to execute after pressing start button
 +            if(Action::GetInstance()->IsRunning() == 0)
 +            {
 +                Head::GetInstance()->m_Joint.SetEnableHeadOnly(true, true);
 +                Walking::GetInstance()->m_Joint.SetEnableBodyWithoutHead(true, true);
 +                //Initialize walking module and head joints
 +                
 +                if(Walking::GetInstance()->IsRunning() == false && _ball_found != 1){
 +            Walking::GetInstance()->X_MOVE_AMPLITUDE = 30.0;
 +                //Set forward and back step length to 30cm
 +                
 +            Walking::GetInstance()->A_MOVE_AMPLITUDE = 0.0;
 +                //Set yaw step length to 0
 +               
 +            Walking::GetInstance()->Start();
 +            }
 +            
 +                if(_marker_found == 1)
 +                {
 +                marker_follower.Process(marker_tracker.ball_position);
 +                //use BallFollower object to start following marker
 +                
 +                        if(greenCount >= 10500 || blueCount >= 10500)
 +                        //pixel count can be used to approximate distance, but in this case, 
 +                        //this stop condition is sufficient                                 
 +                        {
 +                        Walking::GetInstance()->Stop();
 + fprintf(stderr, "stop\n");
 + while(Walking::GetInstance()->IsRunning() == true) usleep(1000000);
 +                        }
 +                 }
 +                 else
 +                 {
 +                 Walking::GetInstance()->X_MOVE_AMPLITUDE = 30.0;
 +                 Walking::GetInstance()->A_MOVE_AMPLITUDE = 0.0;
 +                       
 +             }
 </code> </code>
  
Line 205: Line 256:
 ===== Final Words ===== ===== Final Words =====
  
-This tutorial's objective was to demonstrate how to add a new mode to Darwin OP 2's demo program. Follow this tutorial to quickly implement and test new codes on Darwin OP 2.+This tutorial's objective was to demonstrate how to program Darwin OP 2 to walk toward target
 \\ \\
 \\ \\
darwin_walk_toward_target.1511143067.txt.gz · Last modified: by yuhanghe