To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.robotics.rcx.nqcOpen lugnet.robotics.rcx.nqc in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / RCX / NQC / 1497
1496  |  1498
Subject: 
Re: Problems with NQC and math operations
Newsgroups: 
lugnet.robotics.rcx.nqc
Date: 
Mon, 3 Feb 2003 08:31:13 GMT
Viewed: 
8371 times
  
In lugnet.robotics.rcx.nqc, Jeff Merrick writes:
> Hi-
> 
> I'm currently working on a project to get a dead-reckoning navigation system
> to work with NQC and the RCX.  Right now I have a compass sensor and a
> rotation sensor hooked up and the idea is that with an angle and a distance,
> I can get an x and y position.  Of course, this involves sines and cosines
> which NQC is incapable of doing.  So to solve this problem I used Taylor
> series polynomials to approximate sine and cosine...this seems to work fine,
> and I get values that are pretty close to what the actual values should be.
> I later ran into another problem which was that the robot was giving me
> incorrect x and y positions because in the middle of the operation, it would
> divide by a large number and then end up truncating the result to zero.
> This
> problem was solved by multiplying by 10000 before the operation and then
> dividing by 10000 at the end.  This is the point at which I ran into a
> really strange problem.  I would test to see if the robot was doing the
> operations correctly by simply replacing the places where I used variables
> with numbers where I knew what the correct result would be.  When I was
> convinced that it was doing the operations correctly, I just replaced the
> numbers I had used to test, with the variables again.  Logically, everything
> should work the same...but it didn't...it returned 0 every time...for some
> reason using variables in my expression doesn't work.  Here's a little bit
> of the code...
> Rotation is the rotation sensor value, Direction is the compass sensor value
> and current x and current y were both initialized as 0 (the robot assumes it
> starts at (0,0).
> 
>        D = abs(Rotation);
>         theta = Direction * 18/5;  //since the compass sensor uses 0-100 I
> have to convert to the standard 0-360
>         oldx = currentx;
>         oldy = currenty;
>         if (theta >= 0 && theta <= 90) //this is only the portion of the
> code if the robot is moving in the direction of the first quadrant
>         {
>              theta = 90 - theta;
>              currentx = (10000 * 3 * theta / 180 * D) / 10000;
>              currenty = (10000 * D - theta * theta * 125 * D/ 81)/10000;
> //(1 - (10 * (theta * theta))/64800) * D;
>          }
> 
> So if I simply replace theta with 51 and D with 15 the robot returns the
> correct value of
> 12 for current x and 8 for current y.
> 
> But when I use the variables...either point the robot in the right direction
> and right number of rotations, or even initialize them at 51 and 15...the
> robot returns 0 for currentx and currenty...
> 
> This really has me puzzled as I can't see any logical explanation for it...I
> hope I'm overlooking something simple...
> 
> Anybody have any idea what's going on here?
> Thanks for your help!
> 
> Jeff


Did you considered that the RCX has only integer variables. So, the allowed
operation range is -32768  32767. If at any stage of your operation you
exceed these limits, the result will be corrupted.

For the use of sine and cosine with integer variables have a look at:

http://www.restena.lu/convict/Jeunes/Math/Sine_Cosine.htm

See yah,

Claude



Message is in Reply To:
  Problems with NQC and math operations
 
Hi- I'm currently working on a project to get a dead-reckoning navigation system to work with NQC and the RCX. Right now I have a compass sensor and a rotation sensor hooked up and the idea is that with an angle and a distance, I can get an x and y (...) (24 years ago, 2-Feb-03, to lugnet.robotics.rcx.nqc)

6 Messages in This Thread:


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

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