Parallax Forums
  HomeLog InRegisterCommunity CalendarSearch the ForumHelp
   
Parallax Forums > Public Forums > Propeller Chip > Kalman Filter (Working) Small bug  Forum Quick Jump
 
New Topic Post Reply Printable Version
173 posts in this thread.
Viewing Page :
 1  2  3  4  5  6  7 
[ << Previous Thread | Next Thread >> ] | Show Newest Post First ]

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/22/2007 3:18 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
Hello PropellerHeads,
I'm working on a balancing robot but I ran into a small snag.
 
I'm using a 5DOF Accelerometer/Gyro combo from spark fun and sending it's values through a Kalman filter. It's working like a champ except for a small problem.
 
From time to time my q_bias shoots way off beat and it pulls all my other values down with it. I have a graph below that shows my problem. In the graph 180-200 = 2 seconds and the color are explained below. As you can see the angle from the kalman filter (blue line in graph covered up by purple line) is holding tight to the actual angle. Then at 260 seconds (random time) my values go crazy and it's driving me crazy!   roll   Something is throwing my calculations way off base. If it was only a small amount I wouldn’t care but some times it throws my angle 100's of degrees off.
 
Red = q_bias
Green = angle_erro
Blue = Angle
Yellow = Ignore (PID Control Output)
Purple = Kalman_Update Atan2(xaxis, zaxis)
Grey = xRate
 
 
 
What I know so far. If I don't call the state_update method I don't get the crazy spikes but that kinda makes that entire float math stuff a waste of time. I've checked my values being read from the ADC and they are correct. You can see this from the purple line in the graph above.
 
I don't know what could be causing this problem. I've been beating me head over it for some time now. I fear that my eyes have become null to the code and I'm over looking something small like a Float Gotcha.
 
Any way ... I've attached my IMU code. I ported the tilt.c kalman functions from rotomotion's Autopilot software as you’ll no doubtable guess after a few seconds of looking at it.
 
Thanks for looking and thanks for any help in advance.
 
Once I get this all up and running I'll post a nice full write up of the entire bot.
 
Good Day and Happy Holidays.
Jason
  Wood
 
 
 
 
I UPDATED THIS POST WITH THE LATEST AND GREATEST WORKING FILTER!
 
 
 

Post Edited (JWood) : 12/23/2007 5:25:51 PM GMT



File Attachment :
IMU.spin   32KB (application/octet-stream)
This file has been downloaded 1477 time(s).
Back to Top
 

Perry
Registered Member

Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Jan 2007
Total Posts : 89
 
   Posted 12/22/2007 4:06 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
How confident are you about getting a 10 Hz update rate.
would the Clock object not be a better way of insuring this

Perry
Back to Top
 

Beau Schwabe (Parallax)
IC Layout Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Aug 2004
Total Posts : 3967
 
   Posted 12/22/2007 4:08 PM (GMT -7)    Quote This PostAlert An Admin About This Post.

My suspicion is that when the Counter rolls over from $FFFF_FFFF to $0000_0000, it may be causing the "glitch" that you are experiencing. Referencing the counter as an absolute value might solve your problem.


Beau Schwabe

IC Layout Engineer
Parallax, Inc.

Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/22/2007 4:32 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
Thanks for the suggestion Beau.
 
I tried using the ABS of the counter like this.
 
    dt := fMath.FDiv(fMath.FSub(fMath.FFloat(||cnt), fMath.FFloat(lastTime)), 80000000.0)
    lastTime := ||cnt
 
That gave me an even more unique problem.
 
I attached an image of me messing with the sensor and then when the glitch happening.
 
Not exactly what I was looking for. ;)
 

It repeated like that for some time before stabilizing again. But that does shows me it just may be my problem. Let me look a little farther.

 

Thanks!


Image Attachment :
Image Preview
Abs.bmp
  668KB (image/bmp)
This image has been viewed 1307 time(s).
Back to Top
 

deSilva
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Jun 2007
Total Posts : 2972
 
   Posted 12/22/2007 4:33 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
Yes, Beau, its line 318:

    dt := fMath.FDiv(fMath.FSub(fMath.FFloat(cnt), fMath.FFloat(lastTime)), 40000000.0)
should read

    dt := fMath.FDiv(fMath.FFloat(cnt-lastTime), 40000000.0)


This here is handled correctly:
pidCalcTime := cnt - (clkfreq/10)
  kalmanCalcTime := cnt - (clkfreq/100_000)

..... on line 334, although I have my doubts that all those FloatToStrings can be computetd in 100 ms....

I cannot find kalmanCalcTime, though....
Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/22/2007 4:49 PM (GMT -7)    Quote This PostAlert An Admin About This Post.

deSilva!

Something so small!

 

dt := fMath.FDiv(fMath.FFloat(cnt-lastTime), 40000000.0)

Tell me ... what difference is it to turn two int's into floats and subtract them apposed to subtracting two int's and turning them into floats? That is, other than the obvious waste of instructions.

It's been running from when you posted this till now and hasn't glitches once.

Thanks a bunch!

Back to Top
 

deSilva
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Jun 2007
Total Posts : 2972
 
   Posted 12/22/2007 5:08 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
I had a drawing for that, I do not find at the moment, but will post when it turns up again... I think I burried it in a PowerPoint file...
The trick with handling the overflow of values is computing
newValue - oldValue
The difference is ALWAYS positive when newValue > oldValue, independent of an overflow (the drawing was meant to demonstrate this).

This is sometimes confusing, that a<b should be something different than a-x < a-x. But it is when signed numbers are consideredm, and < works on signed numbers....

You are aware of this, because you utilize it in another place..

When you convert to floating values too early however this effect gets lost, as FLOAT also consideres the correct sign.
Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/22/2007 5:18 PM (GMT -7)    Quote This PostAlert An Admin About This Post.

yes deSilva I was aware of this after reading the FloatMath documentation. Now that you mention it I do remember reading about it always being positive. I'll pull out the documents and go over them again.

I don't know why I missed that ... Like I said ... I read the code too much and I was no longer able to be bias towards it.

Thanks you VERY much. It's still working perfect.

Now on to the PID control loops.

Back to Top
 

Beau Schwabe (Parallax)
IC Layout Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Aug 2004
Total Posts : 3967
 
   Posted 12/23/2007 12:00 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
JWood,

Glad that you got it working.


Beau Schwabe

IC Layout Engineer
Parallax, Inc.

Back to Top
 

Fred Hawkins
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Jun 2007
Total Posts : 996
 
   Posted 12/23/2007 5:40 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Jwood, can you post the corrected code so your first post doesn't mislead?
Back to Top
 

JohnBF
Registered Member

Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Dec 2006
Total Posts : 101
 
   Posted 12/23/2007 5:42 AM (GMT -7)    Quote This PostAlert An Admin About This Post.

I built a propeller robot that balances using a Ping))) sensor to determine tilt. See my post at: 

http://forums.parallax.com/forums/default.aspx?f=25&m=185266

I added an accelerometer and rate gyro but so far I have been unsuccessful in finding a way to to integrate them and overcome their particular combination of noise/drift. If your spin Kalman filter winds up as a an object in the Object Exchange I'd be thrilled.

Jason, for my project, a very simple version of the PID routine works just fine, so I'm sure that won't hold you up very long. Please post more when the project is done!

/John 

Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/23/2007 10:00 AM (GMT -7)    Quote This PostAlert An Admin About This Post.

JohnBF,

A kalman filter is designed for just that. It takes noisy measurements to get a nice smooth angle out of it. It also tracks the bias of your gyro so when it starts walking you don't have to worry about it. I've attached a graph of the working filter. In that graph the Red, Green and Blue bars are the X,Y,Z axis data from the accelerometer in static G Forces. Grey bar is the bias gyro rate after going through the filter. Yellow bar is the filtered tilt angle and purple is the Atan2 angle from the Y and Z axis. This is 20 seconds of measurements and you can see I was sawing the robot from side to side.

 

I've attached the kalman object in its fully working glory (FINALLY!!!!!! THANKS SO MUCH deSilva). I tried to put in some good comments so you can use what ever setup to match what I have. Depending on the mounting of your accelerometer and gyro you may need to use different axis.

 

I started out using radiants but switched to degree trying to figure out my bug. It could easily be turned back into radiants if you wanted to.

 

I'm going to add a few more comments and look at speeding it up before I post it on object exchange. I wanted to add GPS to object making it much more of an IMU. I plan on tracking both pitch and yawn being that my gyro does have two axis to work with. This way I can account for lateral G forces while cornering fast or on an incline.

 

All,

can I update my first post to remove the code posted?

 

 

UPDATE

 

I see now that I can! Thanks

 

Jason

  Wood

 

 

Post Edited (JWood) : 12/23/2007 5:27:13 PM GMT


Image Attachment :
Image Preview
working.bmp
  784KB (image/bmp)
This image has been viewed 1778 time(s).

File Attachment :
IMU.spin   32KB (application/octet-stream)
This file has been downloaded 1038 time(s).
Back to Top
 

JohnBF
Registered Member

Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Dec 2006
Total Posts : 101
 
   Posted 12/23/2007 10:49 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Very nicely done. Great comments. Thanks! /John
Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/23/2007 3:47 PM (GMT -7)    Quote This PostAlert An Admin About This Post.

Thanks John,

 

I've read your posts on your ping))) balances bot. That’s good stuff and very encouraging! I'm hopping to finish my bot over this nice long holiday week off!

 

Got any advice for tuning my PID? My first stab at it resulted in a very unbalanced state.

 

I just started reading about control theory and P, PI, PID control loops were the first topic. Then I found a nice little PID object in SPIN. That sealed the deal to use it. I understand how, why and what to use it for … Just not really how to tune it.

 

P is the proportional part of the Process Variable.

 

ID are both in units of Time but are they directly relational to my update speed? If I put 1.0 and 1.0 for ID would that mean I'm expecting an update every second?

 

I guess I'm looking more for a good site that explains how to tune a PID. Some quick Google searching got me a site that showed me a little and want's me to buy some software. I want a book to fully understand how a PID works and how to tune it.

Back to Top
 

Fred Hawkins
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Jun 2007
Total Posts : 996
 
   Posted 12/23/2007 3:48 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
Jason, tell us about your graphing arrangement (they are quite nicely done).
Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/23/2007 4:15 PM (GMT -7)    Quote This PostAlert An Admin About This Post.

I'm a software programming by profession and I don't like paying for software. So many times I write my own.

I'm writing a software package that will allowing any type of graphing to exist in the same space. They can also react off of events from one another. So for instance you could be graphing the input from the Parallax USB Oscilloscope and fire events based on rising/falling peaks and apply that to a liner filter on inputs from a serial stream.

I'm only writing some proof of concepts but I've got a decently working tool. As of right now it can do serial graphing and the Parallax USB Oscilloscope graphing. It still has a LONG way to go.

If you would like to download and try it you can from here jtw.programmer.googlepages.com/mathGraphing.zip. Top Toolbar button is a serial graph and bottom is an oscope graph. It will insert a graph and you can move it by clicking on it and dragging it. You also change its settings and connect it to the serial port by clicking on the graph. That brings up settings in the pain to the right. Holding down the middle mouse button allows you to pan and scrolling the wheel zooms in and out.

 Let me know what you think and if this is worth making stable.

 

Back to Top
 

JohnBF
Registered Member

Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Dec 2006
Total Posts : 101
 
   Posted 12/23/2007 4:26 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
Jason,

I don't know much theory about tuning a PID routine; some of the things I've read have some theory and then they tend to say, but in the end a lot of it is trial and error. I've just gotten right to the trial and error part. My experience with each new version has been something like this...

I generally start with just the P constant set to 1 and D and I turned off (set to 0). As I try bringing bring up P to bigger numbers the bot will sort of balance, but with big swings forward and back - it goes too far forward then recovers and goes too far back, but I usually find a number so that it keeps from falling for 10 or 15 seconds. Then I start bringing up D. This tends to abbreviate the overreactions, but it makes the bot more jerky. It will stay upright for longer, then suddenly slam down. Also, the motors tend to reverse abruptly, so I worry about damaging the motors, and sometimes the wheels skid from the reversals. But usually adding D gets the bot to stay up longer. Then adding I kind of smooths things out.

At this stage I've usually got the bot balancing maybe 80% as good as it gets, but I usually get it a little better with small random changes that have no logic, just random trials.

I've been busy and travelling for work, so I haven't worked on the balancing bot for a couple of months, but your Kalman routine inspired me, so I will get back to it in a few days. When I left off I was experimenting with motors. The servos work nicely and are really simple to use, but the torque and RPMs are very limited. I tried some bigger, faster gearhead DC motors from other projects (mostly from Banebots), but the results have not been good - I'm not sure but I think that these motors have more latency - more play in the gears than the little servos, and this is a real problem for balancing bots.

The really nice balancing bots you see on the web (like nBot) seem to use Pittman motors which list for high prices but I guess some folks know how to get them for more affordable prices. I'm still working on that.

Anyway, good luck and I look forward to seeing your progress.

/John
Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 12/23/2007 5:57 PM (GMT -7)    Quote This PostAlert An Admin About This Post.
John,
Thats a great start. It's way more than I had before and sound right up my path. Trial and error. ;)
Back to Top
 

simonl
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2006
Total Posts : 787
 
   Posted 1/14/2008 3:04 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Hi Jason,

This is excellent work - thank you for sharing :-)

In your code you have:
gearBox       : "motion"
PID           : "PID"

I'm assuming the PID object is the one by Andy Lindsay?

I wonder if you'd mind sharing your 'motion.spin' too, so I can test ?


Cheers,
Simon
-------------------------------
You'll always have as many take-offs as landings, the trick is to be sure you can take-off again ;-)
BTW: I type as I'm thinking, so please don't take any offense at my writing style :-)

Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 1/14/2008 8:22 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Thanks Simon!
 
I found a few bugs in the Kalman code and a few people have pointed some out as well. So I'll be releasing a 1.0 in Object exchange here this week with correct stack space.
 
Yes I'm using the PID object from Andy Lindsay and it's awesome.
 
As for "motion" it's home brewed. I glued a disk with Black/White strips every 15 degrees to both wheels and I'm bouncing IR light off to tell RPM of each wheel. I'm passing that info through a PID per wheel and adjusting PWM accordingly. This gives a much better reaction times to my balance PID loops.
 
I'll post it tonight when I get home. I'm sure there is 100 better way to encode wheel movement but what I've done is cheap and easy. Only drawback is it requires a COG to watch the pulses from the IR transistors.
Back to Top
 

simonl
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2006
Total Posts : 787
 
   Posted 1/14/2008 8:33 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
OK Jason, I'll await the updated version :-)

In the meantime; I've hooked-up the IMU & MCP3208 as shown in the code, but I'm not getting the sorts of readings I'd expected (e.g. after a short while I get an 'angle' reading of 1110704109 - not quite in the 0-359deg I was expecting! And the bias and rate readings are equally nonsense :-()

I'm sure it must be something I've missed or not done right! Do you have any ideas what I've (not) done?

Also; what's the reasoning behind connecting MCP channel 6 to VDD/3.3V - is it as a reference point?


Cheers,
Simon
-------------------------------
You'll always have as many take-offs as landings, the trick is to be sure you can take-off again ;-)
BTW: I type as I'm thinking, so please don't take any offense at my writing style :-)

Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 1/14/2008 8:51 AM (GMT -7)    Quote This PostAlert An Admin About This Post.

simon,

insanity lead me to hook up VDD to channel 6. It isn't needed and I removed it from my lastest that I'm about to release.

Your problem may be a bug in the code.

Try this:

changed:
    yAxis0 := tiltReadings[supply] / 2 - 55  
to:
    yAxis0 := MCP.in(supply) / 2 - 55
 
I've jared my 5DOF maybe alittle to hard to many times so my Axis 0'ing is a little off. Thats my -55 I've commented that in the future release.
 
I've had other people claim success using this code.
 
Try and use the MCP3208 and read the values from your 5DOF directly. Just to make sure all is working.
 
I'm going to try and make this Object and Abstracted as possable. So you don't need to make any code change to the Object when you get it. Just throw a few variables at it and it run.
 
Let me know if this helps any.
Back to Top
 

simonl
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2006
Total Posts : 787
 
   Posted 1/14/2008 8:54 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
OK, will do. I'll try it again tonight. (I should've thought of getting the raw MCP readings before I posted - oops!)

Many thanks for the reply.


Cheers,
Simon
-------------------------------
You'll always have as many take-offs as landings, the trick is to be sure you can take-off again ;-)
BTW: I type as I'm thinking, so please don't take any offense at my writing style :-)

Back to Top
 

JWood
Software Engineer



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2007
Total Posts : 56
 
   Posted 1/14/2008 8:58 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Very good Simon.
 
I'll be on tonight to give you more of a hand if you need it.
 
Let use know how it goes.
 
Good Day
Jason
   Wood
Back to Top
 

simonl
Registered Member



Email Address Not AvailablePersonal Homepage Not AvailablePrivate Messaging Not AvailableAIM Not AvailableICQ Not AvailableY! Not AvailableMSN Not Available
Date Joined Apr 2006
Total Posts : 787
 
   Posted 1/17/2008 7:11 AM (GMT -7)    Quote This PostAlert An Admin About This Post.
Hi Jason,

Not having much luck I'm afraid :-(

I've created a test harness to see the raw data from the IMU to MCP3208 (see attached spin archive). I'm getting readings in the range of about 1500 to 2500 (see attached graph) - except for yRateRaw, which appears to be faulty (I think it's my soldering, as the readings change significantly when I gently press on the edge i=of the IMU!). Is this range what you'd expect?

As you'll see in the attached, I'm taking the readings at 50Hz, with each channel being a 10-point average read sequentially. I'm hoping that'll be good enough to run into the Kalman Filter for use in an autopilot?

I'd appreciate any help you can provide.


Cheers,
Simon
-------------------------------
You'll always have as many take-offs as landings, the trick is to be sure you can take-off again ;-)
BTW: I type as I'm thinking, so please don't take any offense at my writing style :-)


Image Attachment :
Image Preview
SF_5-DOF_IMU-001.gif
  32KB (image/gif)
This image has been viewed 1171 time(s).

File Attachment :
SRL-MCP_Test-002 - Archive [Date 2008.01.17 Time 13.57].zip   12KB (application/x-zip-compressed)
This file has been downloaded 513 time(s).
Back to Top
 
[ << Previous Thread | Next Thread >> ]
New Topic Post Reply Printable Version
173 posts in this thread.
Viewing Page :
 1  2  3  4  5  6  7 
 
Forum Information
Currently it is Thursday, July 29, 2010 5:16 PM (GMT -7)
There are a total of 462,439 posts in 62,066 threads.
In the last 3 days there were 90 new threads and 802 reply posts. View Active Threads
Who's Online
This forum has 20143 registered members. Please welcome our newest member, ME01.
52 Guest(s), 9 Registered Member(s) are currently online.  Details
John Abshier, Rayman, kf4ixm, BradC, Sapieha, Gene Bonin, laser-vector, localroger, Nick McClick