Subject:
|
Re: Problems with NQC and math operations
|
Newsgroups:
|
lugnet.robotics.rcx.nqc
|
Date:
|
Mon, 3 Feb 2003 08:31:13 GMT
|
Viewed:
|
5237 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 (...) (22 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
|
|
|
|