View unanswered posts | View active topics It is currently Wed Oct 22, 2014 10:29 am






Reply to topic  [ 25 posts ]  Go to page 1, 2  Next
Bucket 'o' Bricks Brick Sorter 
Author Message
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Bucket 'o' Bricks Brick Sorter
Hey! I'm back! With that Super-Top-Secret project I mentioned! :eek: I'll be posting more information about it over the next couple of days because I don't have time to do it all at once. Everyone fine with that :?: Good.

I haven't taken any pics yet, so I won't be posting anything else about this until I do.

Here's the video to tide you over until then.



And again, I apologize for the video quality. Still testing out a new-ish camera, and I didn't really plan the video. I just did whatever came to mind while taping (SD-Carding?) it. :mrgreen:

program:
Code:
#pragma config(Sensor, S1, LightSens, sensorLightInactive)
#pragma config(Sensor, S2, ArmRst, sensorReflection)
#pragma config(Sensor, S3, ColorSens, sensorCOLORFULL)
#pragma config(Sensor, S4, HTIRL, sensorI2CCustom)
#pragma config(Motor, motorA, TmblrMtrSwtch, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorB, ArmMoveMtr, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorC, ArmTurnMtr, tmotorNormal, PIDControl, encoder)

#include "drivers/HTIRL-driver.h";

void initialize();
void InitializePF();
void ResetArmRot();
void ArmRotateToLoc(int DegreesToTurn);
void ArmLateralRst();
void ArmMoveToMarker(string DirectionToMove);
void ArmMoveToLoc(int LocToMoveTo);
void PneumSwtchMve(string ClawMovement);
void DispenseBrick4Scan();
void AlignBrick4Scan();
void TmblrMtrContr(string Direction);
void GetBlackOrGreenColor();
void RefillBrickQueue();

int BrickColor;

tPFmotor Tread1 = pfmotor_S4_C1_A;
tPFmotor Tread2AndLights = pfmotor_S4_C1_B;
tPFmotor DispenserMtr = pfmotor_S4_C2_A;
tPFmotor PneumSwtch = pfmotor_S4_C2_B;
tPFmotor BrickScannerDisp = pfmotor_S4_C3_A;
tPFmotor ColorScanAlign = pfmotor_S4_C3_B;

ePWMMotorCommand Tread1Fwd = MOTOR_FWD_PWM_4;
ePWMMotorCommand Tread2AndLightsFwd = MOTOR_FWD_PWM_7;
ePWMMotorCommand DispenserMtrDisp = MOTOR_FWD_PWM_7;
ePWMMotorCommand PneumClawUp = MOTOR_REV_PWM_7;
ePWMMotorCommand PneumClawDwn = MOTOR_FWD_PWM_7;
ePWMMotorCommand BrickScannerDispExt = MOTOR_FWD_PWM_3;
ePWMMotorCommand BrickScannerDispRtr = MOTOR_REV_PWM_3;
ePWMMotorCommand ColorScanAlignExt = MOTOR_REV_PWM_3;
ePWMMotorCommand ColorScanAlignRtr = MOTOR_FWD_PWM_3;

task main()
{
  bool DoneSorting = false;

  initialize();

  while(DoneSorting == false)
  {
    SetSensorType(ColorSens, sensorCOLORNONE);

    PFMotor(Tread2AndLights, Tread2AndLightsFwd);
    wait1Msec(400);
    if(SensorValue(LightSens) > 10)
    {
      RefillBrickQueue();
    }
    PFMotor(Tread1, Tread1Fwd);
    DispenseBrick4Scan();
    while(SensorValue(ColorSens) > 10);
    PFMotor(Tread2AndLights, MOTOR_BRAKE);
    PFMotor(Tread1, MOTOR_BRAKE);
    SetSensorType(ColorSens, sensorCOLORFULL);
    AlignBrick4Scan();
    BrickColor = SensorValue(ColorSens);
    if(BrickColor == 1 || BrickColor == 3) GetBlackOrGreenColor();

    PFMotor(Tread2AndLights, Tread2AndLightsFwd);
    wait1Msec(1000);
    PFMotor(Tread2AndLights, MOTOR_BRAKE);

    ArmMoveToLoc(BrickColor);
  }
}

void initialize()
{
  TmblrMtrContr("On");
  TmblrMtrContr("Off");
  InitializePF();
  PneumSwtchMve("Up");
  ArmLateralRst();
  ResetArmRot();
  PneumSwtchMve("Down");
  ArmMoveToMarker("Left");
}

void InitializePF()
{
  PFMotor(ColorScanAlign, ColorScanAlignRtr);
  wait1Msec(500);
  PFMotor(ColorScanAlign, MOTOR_BRAKE);

  PFMotor(BrickScannerDisp, BrickScannerDispRtr);
  wait1Msec(500);
  PFMotor(BrickScannerDisp, MOTOR_BRAKE);
}

void ResetArmRot()
{
  motor[ArmTurnMtr] = -50;
  while(SensorValue(ArmRst) != 100);
  motor[ArmTurnMtr] = 20;
  while(SensorValue(ArmRst) == 100);
  motor[ArmTurnMtr] = 0;
}

void ArmRotateToLoc(int DegreesToTurn)
{
  nMotorEncoder[ArmTurnMtr] = 0;
  nMotorEncoderTarget[ArmTurnMtr] = DegreesToTurn;
  motor[ArmTurnMtr] = 50;
  while(nMotorRunState[ArmTurnMtr] != runStateIdle);
  motor[ArmTurnMtr] = 0;
}

void ArmLateralRst()
{
  motor[ArmMoveMtr] = -30;
  while(SensorValue(ArmRst) <= 49);
  motor[ArmMoveMtr] = 0;
}

void ArmMoveToMarker(string DirectionToMove)
{
  if(DirectionToMove == "Left")
  {
    motor[ArmMoveMtr] = 50;
    wait1Msec(500);
    while(SensorValue(ArmRst) < 40);
    motor[ArmMoveMtr] = 0;
  }
  else
  {
    motor[ArmMoveMtr] = -50;
    wait1Msec(500);
    while(SensorValue(ArmRst) < 40);
    motor[ArmMoveMtr] = 0;
  }
}

void ArmMoveToLoc(int LocToMoveTo)
{
  switch (LocToMoveTo)
  {
    case 1:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1132);
      ArmMoveToMarker("Left");
      PneumSwtchMve("Down");
      wait1Msec(700);
      ArmMoveToMarker("Right");
      ResetArmRot();
    break;
    case 2:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1460);
      ArmMoveToMarker("Left");
      PneumSwtchMve("Down");
      wait1Msec(700);
      ArmMoveToMarker("Right");
      ResetArmRot();
    break;
    case 3:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1132);
      PneumSwtchMve("Down");
      wait1Msec(700);
      ResetArmRot();
    break;
    case 4:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1460);
      PneumSwtchMve("Down");
      wait1Msec(700);
      ResetArmRot();
    break;
    case 5:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1132);
      ArmMoveToMarker("Right");
      PneumSwtchMve("Down");
      wait1Msec(700);
      ArmMoveToMarker("Left");
      ResetArmRot();
    break;
    case 6:
      PneumSwtchMve("Up");
      wait1Msec(700);
      ArmRotateToLoc(1460);
      ArmMoveToMarker("Right");
      PneumSwtchMve("Down");
      wait1Msec(700);
      ArmMoveToMarker("Left");
      ResetArmRot();
    break;
  }
}

void PneumSwtchMve(string ClawMovement)
{
  if(ClawMovement == "Up")
  {
    PFMotor(PneumSwtch, PneumClawUp);
    wait1Msec(500);
    PFMotor(PneumSwtch, MOTOR_BRAKE);
  }
  else
  {
    PFMotor(PneumSwtch, PneumClawDwn);
    wait1Msec(500);
    PFMotor(PneumSwtch, MOTOR_BRAKE);
  }
}

void DispenseBrick4Scan()
{
  PFMotor(BrickScannerDisp, BrickScannerDispExt);
  wait1Msec(250);
  PFMotor(BrickScannerDisp, BrickScannerDispRtr);
  wait1Msec(250);
  PFMotor(BrickScannerDisp, MOTOR_BRAKE);
}

void AlignBrick4Scan()
{
  PFMotor(ColorScanAlign, ColorScanAlignExt);
  wait1Msec(250);
  PFMotor(ColorScanAlign, ColorScanAlignRtr);
  wait1Msec(250);
  PFMotor(ColorScanAlign, MOTOR_BRAKE);
}

void TmblrMtrContr(string Direction)
{
  if(Direction == "On")
  {
    motor[TmblrMtrSwtch] = -50;
    wait1Msec(500);
    motor[TmblrMtrSwtch] = 0;
  }
  else
  {
    motor[TmblrMtrSwtch] = 50;
    wait1Msec(500);
    motor[TmblrMtrSwtch] = 0;
  }
}

void GetBlackOrGreenColor()
{
  short RGB[4];

  getColorSensorData(ColorSens, colorAtoD,   &RGB);

  if((RGB[0]>=200&&RGB[0]<=300)&&(RGB[1]>=200&&RGB[1]<=300)&&(RGB[2]>=100&&RGB[2]<=199))
  {
    BrickColor = 1;
  }
  else if((RGB[0]>=400&&RGB[0]<=500)&&(RGB[1]>=400&&RGB[1]<=500)&&(RGB[2]>=200&&RGB[2]<=300))
  {
    BrickColor = 3;
  }
}

void RefillBrickQueue()
{
  bool DoneDispensing = false;

  PFMotor(Tread1, Tread1Fwd);
  TmblrMtrContr("On");
  PFMotor(DispenserMtr, DispenserMtrDisp);

  while(DoneDispensing == false)
  {
    if(SensorValue(LightSens) < 10)
    {
      wait1Msec(750);
      if(SensorValue(LightSens) < 10) DoneDispensing = true;
    }
  }
  TmblrMtrContr("Off");
  PFMotor(DispenserMtr, MOTOR_BRAKE);
}


More info coming as soon as I have some pics!

Comments, suggestions, LOLs?

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Fri Apr 27, 2012 9:13 am
Profile WWW
Moderator
Moderator
User avatar

Joined: Wed Mar 05, 2008 8:14 am
Posts: 3225
Location: Rotterdam, The Netherlands
Post Re: Bucket 'o' Bricks Brick Sorter
What an awesome display! This is the kind of thing you should take to a LEGO event to show off to the world. No seriously, well done.

Regarding the video, the quality of it is better than most I've seen out there. A few things though:
  • Try to keep the video length less than 10 minutes.
  • You can easily speed up the slow moving parts of the video x4 or x6, this makes it more interesting to watch, whilst still allowing people to follow what is going on.
  • Make a title thingy in your video with your name and the project and possibly date.

If you are using Windows, you can use Windows Live Movie Maker to do these things quite easily.

Fantastic job and thank you for using my drivers :)

I'm happy to write about it on the ROBOTC project blog, just a few questions, though:
  • What motivated you to make this?
  • How long did it take?
  • Do you have any plans for future improvements or modifications?
  • What is the average air speed of a laden swallow?

- Xander

_________________
| Professional Conduit of Reasonableness
| (Title bestowed upon on the 8th day of November, 2013)
| My Blog: I'd Rather Be Building Robots
| ROBOTC 3rd Party Driver Suite: [Project Page]


Sat Apr 28, 2012 1:07 am
Profile WWW
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
mightor wrote:
What an awesome display! This is the kind of thing you should take to a LEGO event to show off to the world. No seriously, well done.


Thanks you!!! :bigthumb: I would be taking it to BrickWorld Chicago this year, but I only have access to one NXT right now (my bros claimed the other one) and I gauged building something for the Sumo and the other events more fun. I do have 4 RCXs, but those could hardly compete with the robots there. Also, my supply of parts is somewhat limited.

mightor wrote:
Regarding the video, the quality of it is better than most I've seen out there. A few things though:
  • Try to keep the video length less than 10 minutes.
  • You can easily speed up the slow moving parts of the video x4 or x6, this makes it more interesting to watch, whilst still allowing people to follow what is going on.
  • Make a title thingy in your video with your name and the project and possibly date.

If you are using Windows, you can use Windows Live Movie Maker to do these things quite easily.


Yeah..... I was thinking of doing something like that, but I thought that it might take a bit to figure out, and as I said, I'm working on stuff for BrickWorld.

mightor wrote:
Fantastic job and thank you for using my drivers :)


Your welcome! :mrgreen:

mightor wrote:
I'm happy to write about it on the ROBOTC project blog, just a few questions, though:
  • 1. What motivated you to make this?
  • 2. How long did it take?
  • 3. Do you have any plans for future improvements or modifications?
  • 4. What is the average air speed of a laden swallow?


1. I wanted to build a robot that was interactive and would entertain smaller kids, and be mechanically interesting to older ones, and even adults. Here's what happened: I planned for it to be able to "learn" where the colors were supposed to go. You could tell it if it put the brick in the right or wrong area until it learned where they all belonged. But, mechanical glitches in the construction that I didn't have time to fix prevented that from happening. I probably would have made another console with the other NXT with the yes/no buttons, and it could make sounds and use the display to interact.

2. Well, if you count total time it's been built, about two months. But, now here's the catch: I've really only been working on it for about one month, because I got sick twice over the last two months, so in total I was out of it for about a month.

EDIT: I forgot that during that month I was also working on other stuff. Probably about a week was lost to messing with my Boe-Bot and Pololu 3Pi.

3. I plan to revisit the same kind of concept, but with no deadline so that I can work out any problems that come up.

4. The average airspeed of a laden swallow is 42.

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Sat Apr 28, 2012 9:48 am
Profile WWW
Expert

Joined: Thu Sep 29, 2011 11:09 pm
Posts: 184
Location: Michigan USA
Post Re: Bucket 'o' Bricks Brick Sorter
Extremely awesome!

I especially like the gripper's combination of the springs, and a pneumatic cylinder. Very cool way of grabbing, lifting, and keeping constant pressure on the brick!

The sequential operation is very nicely done.

Thanks for sharing, you have given me inspiration :bigthumb:

_________________
Matt


Mon Apr 30, 2012 12:21 am
Profile WWW
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
mattallen37 wrote:
Extremely awesome!

I especially like the gripper's combination of the springs, and a pneumatic cylinder. Very cool way of grabbing, lifting, and keeping constant pressure on the brick!

The sequential operation is very nicely done.

Thanks for sharing, you have given me inspiration :bigthumb:


Thank you, Matt!! :D I was wondering if anyone would notice the gripper thing. [brag]I don't know about you, but I've never seen anything use that kind of combination before.[/brag]

P.S. I haven't forgot about posting the info. Getting it apart is taking longer than expected. But fear not! There will be something new by tomorrow!

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Mon Apr 30, 2012 12:35 am
Profile WWW
Moderator
Moderator
User avatar

Joined: Wed Mar 05, 2008 8:14 am
Posts: 3225
Location: Rotterdam, The Netherlands
Post Re: Bucket 'o' Bricks Brick Sorter
The post has been written but there seems to be a permission issue with the blog. I'll let you know when the article is up on the ROBOTC Cool Projects blog.

- Xander

_________________
| Professional Conduit of Reasonableness
| (Title bestowed upon on the 8th day of November, 2013)
| My Blog: I'd Rather Be Building Robots
| ROBOTC 3rd Party Driver Suite: [Project Page]


Mon Apr 30, 2012 3:56 am
Profile WWW
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
EDIT: I changed the pics to a more forum-friendly size. If you click on one, (open it in a new tab) it links to the full-size version.

First of all, here's the link to the gallery: The assembly, and the dissassembly. Some of the pictures are out of order. I don't know why.

Overview
______________________________________________________________________________________________________________________

The entire thing: (just ignore all the backround stuff.)

Image

Here's where the brick gets scanned, picked, and placed:

Image

This part handles the brick aligning and dispensing:

Image

The Pneumatic Station:

Image

The arm, and dispenserys:

Image


Next up: The Pneumatic station in detail.

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Tue May 01, 2012 12:20 pm
Profile WWW
Site Admin
Site Admin

Joined: Wed Jan 24, 2007 10:44 am
Posts: 439
Location: Pittsburgh, PA
Post Re: Bucket 'o' Bricks Brick Sorter
This looks great! Thanks for giving letting us put it up on the blog, and thanks Xander for putting the blog together :bigthumb:

_________________
Vu Nguyen
Software Training Development Team | Webmaster
Need more support? Use the ROBOTC Ticketing system

Robotc.net| Robomatter Store | Robotics Academy | CS2N


Wed May 02, 2012 9:10 am
Profile
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
Thank you, and your welcome, vnguyen!!!! :mrgreen: :mrgreen:

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Wed May 02, 2012 3:39 pm
Profile WWW
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
The Pneumatic Station:
______________________________________________________________________________________________________________________

Pre P.S. I realize that most of the close-up pictures are blurry. But, when I took them, on the camera display they didn't look blurry. Please forgive me.

The Pneumatic Station:

Image


Power is supplied to the motor via this

Image
which takes a Barrel-Jack power supply, in this case 12V 2A well regulated portable hard drive power supply. (Warning: overvolt motors at your own risk! :breakcomputer: ) puts it through a on-off switch, and then has a traditional LEGO electric plate from a broken RCX sensor port.


A converter cable is then connected to the power, and so to the PF-polarity switch pressure controller. Oh, also in this pic: the air release valve. Whoooooshhhh!

Image

The switch is "on" when the cylinder is retracted. As the air pressure builds, the pneumatic cylinder will eventually overcome the force of the rubber bands at ~30 PSI, and thus push forward and turn the switch off, thus deactivating the motor. At ~20 PSI, the rubber bands pull the cylinder back down, and the process is repeated.


A converter cable connects the output of the PF-Switch to a RC-Motor running two small pumps:

Image

Even though the pumps are small, since the motor is going at over 1000RPMs, it gets a lot of air out in a hurry. The performance is somewhat impeded with the switch, though. For some reason, it tends to flicker on and off rapidly, kind of like PWM. I don't know why. So, even now, it's not going full speed.


And, for your convenience, a conveniently placed air pressure meter placed at a convenient place so you can conveniently see the air pressure at your convenience!!! :lol:

Image


Air tanks. Can't have pneumatics without air tanks!

Image


The motorized pneumatic switch. It's really simple. Run the motor in one direction for half a second, run it in the other direction for half a second. With clutch gears, it's easy!!

Image


And now, the moment you've all been waiting for..... The Claw!!!! :biggrin: :biggrin: :biggrin:

Image

I think that the claw is the most unique thing about this. As you can see, it hinges on shock absorbers, which allows the cylinder to continue to move up after the claw is closed, thusly (as shown in the pic below) compressing the shocks, and raising the claw. I think that I'm the first person to do this. If any of you have seen it before, please tell me.

Image


And (of course) a narrated video showing it all in action.





Next up: The Arm.

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Wed May 02, 2012 4:37 pm
Profile WWW
Expert

Joined: Tue Feb 28, 2012 3:10 pm
Posts: 195
Post Re: Bucket 'o' Bricks Brick Sorter
I'm looking for an icon of me bowing down to the king, but don't see one. Picture it here.

_________________
Mike aka Spiked3
http://www.spiked3.com


Wed May 02, 2012 7:39 pm
Profile
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
How about this? Image

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Wed May 02, 2012 8:39 pm
Profile WWW
Expert

Joined: Tue Feb 28, 2012 3:10 pm
Posts: 195
Post Re: Bucket 'o' Bricks Brick Sorter
NeXT-Generation wrote:
How about this? Image

yeah, that's the one I was looking for :|

_________________
Mike aka Spiked3
http://www.spiked3.com


Wed May 02, 2012 10:49 pm
Profile
Senior Roboticist
User avatar

Joined: Wed Sep 28, 2011 10:13 pm
Posts: 630
Location: If I told you, I'd have to kill you.
Post Re: Bucket 'o' Bricks Brick Sorter
Spiked3 wrote:
NeXT-Generation wrote:
How about this? Image

yeah, that's the one I was looking for :|


Uh-huh. Confused, are ya? Here's the deal: That actually isn't included in this forum. :lol: I just used the
Code:
[img][/img]
tags to display the .gif image for a smilie from another forum. Like this:
Code:
[img]http://forums.thinkingwithportals.com/images/smilies/notworthy.gif[/img]


Since smilies are images, you can do this with any one you want, as long as you have the URL. :mrgreen:

Some more examples: Image, Image, and Image

_________________
A.K.A. inxt-generation
Self-proclaimed genius, and future world dominator.
My Brickshelf Folder
"Don't they teach recreational mathematics anymore?" - The Tenth Doctor
Bow down to Nikola Tesla, King of the Geek Gods.


Wed May 02, 2012 11:16 pm
Profile WWW
Expert

Joined: Thu Sep 29, 2011 11:09 pm
Posts: 184
Location: Michigan USA
Post Re: Bucket 'o' Bricks Brick Sorter
Thanks for the extra pictures! Looks great!

EDIT: And awesome video!

_________________
Matt


Wed May 02, 2012 11:38 pm
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 25 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  



Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.