Autonomous NXT Ballshooter W/ NXTcam

Introduction: Autonomous NXT Ballshooter W/ NXTcam

This is my robot that is programmed to hunt and kill its sworn enemy a red plastic cup it is the ballshooter build from the mindstorms NXT 2.0 set but with a little add on the NXTcam from Mindsensors.com it is a special camera for the Mindstorms brick that can return x,y coordinates and area of a pre-programmed color in this case it is Red. The program tells the robot to find the biggest red object and give me its coordinates, through that it determines whether the cup is to the left or right of the robot and moves accordingly. Once the robot has decided it is on target it adjusts for distance by backing up or going forwards. It can give a relative distance (But in no way accurate) by the objects area then once its lined  up and at the correct distance it checks to see if the object has moved again then if it hasn't it fires!

I also intend to comment my code and post it soon.

Toy Challenge

Participated in the
Toy Challenge

Make It Move Challenge

Participated in the
Make It Move Challenge

Microcontroller Contest

Participated in the
Microcontroller Contest

Be the First to Share

    Recommendations

    • Toys & Games Contest

      Toys & Games Contest
    • Big vs Small Challenge

      Big vs Small Challenge
    • Fix It Challenge

      Fix It Challenge

    2 Comments

    import java.awt.Point;
    import java.awt.Rectangle;
    import lejos.nxt.Button;
    import lejos.nxt.LCD;
    import lejos.nxt.Motor;
    import lejos.nxt.SensorPort;
    import lejos.nxt.Sound;
    import lejos.nxt.addon.NXTCam;


    public class follow {


     public static void main(String[] args)throws Exception {

      int objnum = 0;
      Point LOC;
      int objA = 0;
      int width = 0;
      int height = 0;
      NXTCam cam = new NXTCam(SensorPort.S2);
      Sound.beep();
      int X0 = 0;
      int dis1 = 0;
      float dis = 0;
      long start = 0;
      long total = 0;
      Motor.A.setSpeed(200);

    0
    Longboarding_Robot
    Longboarding_Robot

    Reply 9 years ago on Introduction

    Motor.B.setSpeed(200);
    int shots = 0;
    cam.sendCommand('A');
    cam.sendCommand('E');
    start = System.currentTimeMillis();
    while(!Button.ESCAPE.isPressed()){
    Rectangle rect = cam.getRectangle(0);
    objnum = cam.getNumberOfObjects();
    if (objnum != 0){
    width = rect.width;
    height = rect.height;
    objA = width * height;
    LCD.drawString("x: ", 0, 0);
    LOC = rect.getLocation();
    X0 = (int) (LOC.x * 1);
    LCD.drawInt(X0, 4, 0);
    LCD.drawString("A: ", 0, 1);
    LCD.drawInt(objA, 4, 1);
    if (shots <= 6){
    LCD.drawInt(7-shots,0 , 2);
    LCD.drawString("out of 7 shots left", 2, 2);
    }
    else{
    LCD.drawString("out of ammo", 0, 2);
    }
    LCD.drawString("Aprox. ",0, 4);
    dis = objA / 100;
    dis1 = (int) (dis * 1);
    LCD.drawInt(dis1,8,4);
    LCD.drawString("in. away",0,5);
    if (1==1){
    if (X0 == 0) {
    Motor.B.stop();
    Motor.A.stop();
    Sound.beep();
    }
    else if (X0 < 90 && X0 > 75) {
    Motor.B.stop();
    Motor.A.stop();
    if (objA < 1400 && objA > 1200){
    Motor.B.stop();
    Motor.A.stop();

    total = System.currentTimeMillis()-start;
    if (total>1000){
    if (shots <= 6){
    Sound.beep();
    Sound.beep();
    start = System.currentTimeMillis();
    Motor.C.rotateTo(360);
    shots = shots + 1;
    Motor.C.resetTachoCount();
    }
    }
    }
    else if (objA > 1200 || objA < 1000){
    start = System.currentTimeMillis();
    if (objA > 1200){

    Motor.B.backward();
    Motor.A.backward();
    }
    else if (objA < 900){

    Motor.A.forward();
    Motor.B.forward();
    }
    }
    }
    else if (X0 > 90) {
    start = System.currentTimeMillis();
    Motor.B.backward();
    Motor.A.forward();
    }
    else if (X0 < 75) {
    start = System.currentTimeMillis();
    Motor.B.forward();
    Motor.A.backward();
    }

    Thread.sleep(100);
    LCD.clear();
    }
    }
    }
    }
    }