To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.roboticsOpen lugnet.robotics in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / 1266
1265  |  1267
Subject: 
Re: NQC Code
Newsgroups: 
lugnet.robotics
Date: 
Wed, 9 Dec 1998 19:01:12 GMT
Original-From: 
John Donaldson <jdonaldson@ghg+antispam+.net>
Viewed: 
955 times
  
Nancy,
  Sorry for not getting back sooner. Been outof town. Anyway, thanks for
the reply. This is what I am looking for. I am going to combine this
wirh another routine. Basicly

  1. Right Touch Sensor hits object.
   RCount += 1;
   IF RCount >= 2
   {
     RCount = 1;
   }

  2. Same for Left Touch Sensor

  IF RCount = 1 && LCount = 1
  // Stuck in Corner
  {
    RevMotor(AC);
    Sleep(500);
    FwdMotor(C);
    Sleep(500);
    Fwdmotor(A);
    RCount = 0;
    LCount = 0;
  }

  This way if one sensor countinues to hit then it is the same wall or
mabey a curved wall.
  If both sensors have a count of one (1) then means it first hit on
one side of the wall and then one the other side of the wall. With both
a count one (1), it reverses and the turns around.
  The timer function will also be used to backup the count by loking for
certain values too.

John D.

Nancy Evelyn Gold wrote:

John Donaldson wrote:

  I got two questions.

1. How do you use the timer() function under NQC?
2. What is best way to determine if bot is stuck in corner make it turn
180 deg to get out?

Based on the first question I would think you're on the right track.
Counting the number of turns in a given time period is key. It
impressed the hell out of the folks at the office when the rover
would back out of a corner and turn around.

The below code includes some crude semaphore code. The sound
was for debugging.

No rude comments, this was my first NQC code and the first C code
I've written in two years. :-)

--- Nancy

Some sample code:

#define FUTILE_INT      200
#define FUTILE          1
#define FUTILE_THRESH   4

task corner_detect
{
    while (true)
    {
        // I added the OR while playing with the code, not sure why
        //
        if ( (Timer(FUTILE) > FUTILE_INT) || (turns > FUTILE_THRESH) )
            {
            if (turns > FUTILE_THRESH)
                    {
                        while (lock_turn != 0) Sleep(1);
                        lock_turn = 1;
                        stall = 1;
                        PlaySound(3);
                        timed_reverse();
                        about_face();
                        lock_turn = 0;
                        stall = 0;
                    }
            turns = 0;
            ClearTimer(FUTILE);
            }
    }
}

--
Nancy Evelyn Gold (nancyg@sgi.com)
1993 BMW K1100LT "Chloe" - DoD# 1184 - BMWMOA
++ Only Open DVD Delivers! Just say no to DIVX. ++



Message is in Reply To:
  Re: NQC Code
 
(...) Based on the first question I would think you're on the right track. Counting the number of turns in a given time period is key. It impressed the hell out of the folks at the office when the rover would back out of a corner and turn around. (...) (25 years ago, 4-Dec-98, to lugnet.robotics)

5 Messages in This Thread:


Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR