ROBOTC.net forums
http://robotc.net/forums/

Keeping track of movement
http://robotc.net/forums/viewtopic.php?f=1&t=10688
Page 1 of 1

Author:  jcfor3ver [ Sun Mar 15, 2015 6:26 pm ]
Post subject:  Keeping track of movement

Hi guys. I was wondering (in robotc) how you would go about keeping track of movement so my robot could then return to its original starting position. I am trying to create a robot that finds an object, grips it, and then returns to me. I was thinking of using a global variable and maybe a while loop that increments this variable until it finds the object?

However my main question is, how could I make it so the robot keeps track of its turns and what not?

Here is what I have so far (look in my MoveTask())

Code:
#pragma config(Sensor, S1,     soundSensor,    sensorSoundDBA)
#pragma config(Sensor, S3,     sonarSensor,    sensorNone)
#pragma config(Sensor, S4,     ,               sensorSONAR)
#pragma config(Motor,  motorA,          gripclaw,      tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorB,          rightMotor,    tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorC,          leftMotor,     tmotorNXT, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

/*--------------------------------------------------------------------------------------------------------*\
|*                                                                                                        *|
|*                                            - Gripper Bot -                                             *|
|*                                            ROBOTC on NXT                                               *|
|*                                                                                                        *|
|*  This program finds an object, grips it when a clap is heard, and returns the object                              *|
|*   back to its starting position.                                                                                                            *|
|*                                                                                                        *|
|*                                        ROBOT CONFIGURATION                                             *|
|*    NOTES:                                                                                              *|
|*    1)  The 1 second delay is needed to avoid obtaining inaccurate initial readings.                    *|
|*                                                                                                        *|
|*    MOTORS & SENSORS:                                                                                   *|
|*    [I/O Port]              [Name]              [Type]              [Description]                       *|
|*    Port C                  motorC              NXT                 Right motor                         *|
|*    Port B                  motorB              NXT                 Left motor                          *|
|*      Port A                            motorA                     NXT                           Rotate Sonar Sensor                           *| 
|*    Port 1                  soundSensor         Sound Sensor        Sound DbA                           *|
|*      Port 4                           sonarSensor               Sonar Sensor            Sonar                                                *|
\*--------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------GLOBAL VARIABLES-------------------------------------------*/
int detectflag = 0;                     // flag used to detect the object
int movecount = 0;                     // flag used to keep track of movement
int soundflag = 0;                     // flag used to detect clap
/*-----------------------------------------------------------------------*/
/* Movement Task - This task moves the robot until an object is detected.*/
/*                      - Moves between a certain distance                                  */
/*-----------------------------------------------------------------------*/
task MoveTask(){
   nMotorEncoder[motorB] = 0; // Initialize motor encoders
   nMotorEncoder[motorC] = 0;
   wait1Msec(300);

   while(detectflag == 0){       // While object is not detected
      soundflag = 0;                // Flag not set while moving
      // Foward
      motor[motorB] = 35;      // Motor B is run at a 35 power level
      motor[motorC] = 35;      // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      // Point Turn Left
      motor[motorB] = -35;      // Motor B is run at a 35 power level
      motor[motorC] = 35;       // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      // Point Turn Right
      motor[motorB] = 35;       // Motor B is run at a 35 power level
      motor[motorC] = -35;      // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      movecount++;      // Increment counter to keep track of distance
   }
   // Else the object is detected
   while(detectflag == 1){
      if(soundflag == 1){               // Clap heard?
         motor[motorA] = 45;            // Grip object
         wait1Msec(300);
         }else{
         // do nothing
      }
      // Turn Around
      motor[motorB] = -60;      // Motor B is run at a 35 power level
      motor[motorC] = 60;       // Motor C is run at a 35 power level
      wait1Msec(300);
      
      motor[motorB] = nMotorEncoderTarget[motorB];      // Bring robot back to start
      motor[motorC] = nMotorEncoderTarget[motorC];      // Bring robot back to start
      wait1Msec(300);
   }
   return;
}
/*-----------------------------------------------------------------------*/
/* Detect Task - This task sets a flag once an object is detected.          */
/*-----------------------------------------------------------------------*/
task DetectTask(){
   wait1Msec(500);                  // Initialize Sensor readings
   int distance_in_cm = 20;   // Create variable 'distance_in_cm' and initialize it to 20(cm).

   while(SensorValue[sonarSensor] > distance_in_cm)   // While readings are less than 'distance_in_cm':
   {
      detectflag = 0;          // No detection, so detect flag is null
   }
   detectflag = 1;             // Object detected, set detect flag
   return;
}
/*-----------------------------------------------------------------------*/
/* Sound Task - This task sets a flag once a clap/sound is detected  .   */
/*-----------------------------------------------------------------------*/
task SoundTask(){
   wait1Msec(500);                   // Initialize Sensor readings
   while(SensorValue(soundSensor) < 70)    // While the Sound Sensor is less than 70 (quiet):
   {
      soundflag = 0;                                    // No clap, so sound flag is null
   }
   soundflag = 1;                                       // Clap heard, set sound flag
   return;
}
/*-----------------------------------------------------------------------*/
/* Main Task - Runs the other tasks                                                       */
/*-----------------------------------------------------------------------*/
task main()
{
   wait1Msec(500);                   // Initialize Sensor readings
   StartTask(MoveTask);
   StartTask(DetectTask);
   StartTask(SoundTask);

   return;
}

Page 1 of 1 All times are UTC - 5 hours [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/