View unanswered posts | View active topics It is currently Tue Sep 30, 2014 1:57 pm






Reply to topic  [ 7 posts ] 
Taking balls in the order of the image in robotc for nxt 
Author Message
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Taking balls in the order of the image in robotc for nxt
My robot takes the balls to 1 and puts at 2, corresponding to the following image:

Image

I am using the following robot:

Image

With motors and sensors in the following ports:

Image

Motor A and B corresponds with the two wheels.
Motor C corresponds to the claws.


Last edited by lololol on Sat Jan 31, 2009 11:11 am, edited 5 times in total.



Wed Jan 14, 2009 7:30 am
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Re: Taking balls in the order of the image in robotc for nxt
I already have solved the ball nº 1, now is taking all the balls from 1 to 2.
If you see some words you don´t understand, is because they are in portuguese.

Next i will present some rules for the game:
- the ball 1 and ball 2 goes to margin 2
- the ball 1 must to margin 1
- the ball 1 and ball 3 goes to margin 2
- the ball 1 and ball 2 must return to margin 1
- the ball 4 and ball 5 must to margin 2
- the ball 4 must return to margin 1
- the ball 4 and ball 6 must return to margin 2
- the ball 6 must return to margin 1
- the ball 4 must return to margin 1
- the ball 4 and ball 6 goes to margin 2
- the ball 6 goes to margin 1
- the ball 6 and ball 7 must go to margin 2
- the ball 1 and ball 2 goes to margin 1
- the ball 1 and ball 8 goes to margin 2
- the ball 1 must return to margin 1
- the ball 1 and ball 2 goes to margin 2

End of game


Last edited by lololol on Fri Jan 30, 2009 7:52 pm, edited 4 times in total.



Wed Jan 14, 2009 7:56 am
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Re: Taking ball number 1
////////////////////////////////////////////////////////////////////
///////// move forward /////////
///////////////////////////////////////////////////////////////////
void moveFrente()
{
ClearTimer(T1);

while(time1[T1] < 3000)//the cicle is made in 1/3000=3 seconds
{
motor[motorA]=60;
motor[motorB]=60;
}
motor[motorA]=0;
motor[motorB]=0;
}

////////////////////////////////////////////////////////////////////
///////// move backward /////////
///////////////////////////////////////////////////////////////////
void moveTras()
{
ClearTimer(T1);

while(time1[T1] < 1000) //the cicle is made in 1/1000=1 second
{
motor[motorA]=-60;
motor[motorB]=-60;
}
motor[motorA]=0;
motor[motorB]=0;
}

//////////////////////////////////////////////////////////////////////
///////// turn left ////////////
//////////////////////////////////////////////////////////////////////
void viraEsquerda()
{

nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<810) //motor[A] gives a 180 degree
{
motor[motorA]=50;
}
motor[motorA]=0;
}

/////////////////////////////////////////////////////////////
///////// close claw /////////
/////////////////////////////////////////////////////////////
void fechaGarra()
{
motor[motorC]=-25;
}

/////////////////////////////////////////////////////////////
///////// open claw /////////
/////////////////////////////////////////////////////////////
void abreGarra()
{
motor[motorC]=25;
}

/////////////////////////////////////////////////////////////
///////// main /////////
/////////////////////////////////////////////////////////////
task main()
{
moveFrente();
fechaGarra();
wait1Msec(1000);
moveTras();
viraEsquerda();
moveFrente();
abreGarra();
wait1Msec(750);
PlaySound(soundUpwardTones);//listen a sound in the end
wait1Msec(1000);
}


Fri Jan 16, 2009 1:19 pm
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Taking ball nº1 with sincronized motors
////////////////////////////////////////////////////////////////////
///////// move forward /////////
///////////////////////////////////////////////////////////////////
void moveFrente()
{
ClearTimer(T1);

while(time1[T1] < 3000)//the cicle is made in 1/3000=3 seconds
{
nSyncedMotors = synchAB;//sintonize motors
motor[motorA]=50;
}
motor[motorA]=0;
}

////////////////////////////////////////////////////////////////////
///////// move backward /////////
///////////////////////////////////////////////////////////////////
void moveTras()
{
ClearTimer(T1);

while(time1[T1] < 1000) //the cicle is made in 1/1000=1 second
{
nSyncedMotors = synchAB;//sintonize motors
motor[motorA]=-50;
}
motor[motorA]=0;
}

//////////////////////////////////////////////////////////////////////
///////// turn left ////////////
//////////////////////////////////////////////////////////////////////
void viraEsquerda()
{
nSyncedTurnRatio = -5; // Rotate in place

nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<810) //motor[A] gives a 180 degree
{
motor[motorA]=50;
}
motor[motorA]=0;
}

/////////////////////////////////////////////////////////////
///////// close claw /////////
/////////////////////////////////////////////////////////////
void fechaGarra()
{
motor[motorC]=-25;
}

/////////////////////////////////////////////////////////////
///////// open claw /////////
/////////////////////////////////////////////////////////////
void abreGarra()
{
motor[motorC]=25;
}

/////////////////////////////////////////////////////////////
///////// main /////////
/////////////////////////////////////////////////////////////
task main()
{
moveFrente();
wait1Msec(1000);
fechaGarra();
wait1Msec(1000);
moveTras();
wait1Msec(1000);
viraEsquerda();
wait1Msec(1000);
moveFrente();
wait1Msec(1000);
abreGarra();
wait1Msec(750);
PlaySound(soundUpwardTones);//listen a sound in the end
wait1Msec(1000);
}


Thu Jan 22, 2009 7:37 pm
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Check if the ball is in the section 1
//*!!Sensor, S1, touchSensor, sensorTouch, , !!*//
const tSensors touchSensor = (tSensors) S1; //sensorTouch

//////////////////////////////////////////////////////////////////////
///////// program to verefy if ball is in the place ////////
//////////////////////////////////////////////////////////////////////

//see if touch sensor have been pressed //
void sensorToquePressionado()
{
while(true) //the condition of this cycle will always be checked
{
if(SensorValue(touchSensor) == 1)
{
motor[motorC]=-30;
}
else
{
motor[motorC]=30;
}

}

}

/////////////////////////////////////////////////////////////
///////// close claw /////////
/////////////////////////////////////////////////////////////
void fechaGarra()
{
motor[motorC]=-25;
}

/////////////////////////////////////////////////////////////
///////// main /////////
/////////////////////////////////////////////////////////////
task main()
{
fechaGarra();
wait1Msec(1000);
sensorToquePressionado();
}


Thu Jan 22, 2009 7:43 pm
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Cheking and Taking the ball nº1
//*!!Sensor, S1, touchSensor, sensorTouch, , !!*//
const tSensors touchSensor = (tSensors) S1; //sensorTouch

////////////////////////////////////////////////////////////////////
///////// move forward/////////
////////////////////////////////////////////////////////////////////
void moveInicio()
{
ClearTimer(T1);

while(time1[T1] < 2000)
{
nSyncedMotors = synchAB;
motor[motorA]=55;
}
motor[motorA]=0;
}

////////////////////////////////////////////////////////////////////
///////// move forward /////////
////////////////////////////////////////////////////////////////////

void moveFim()
{
ClearTimer(T1);

while(time1[T1] < 2000)
{
nSyncedMotors = synchAB;
motor[motorA]=50;
}
motor[motorA]=0;
}

////////////////////////////////////////////////////////////////////
///////// move backward/////////
////////////////////////////////////////////////////////////////////

void moveTras1casa()
{
ClearTimer(T1);

while(time1[T1] < 1000)
{
nSyncedMotors = synchAB;
motor[motorA]=-50;
}
motor[motorA]=0;
}

void move2casasTras()
{
ClearTimer(T1);

while(time1[T1] < 2000)
{
nSyncedMotors = synchAB;
motor[motorA]=-50;
}
motor[motorA]=0;
}

///////////////////////////////////////////////////////////////////////////
///////// Turn////////////
///////////////////////////////////////////////////////////////////////////
void viraEsquerda180()
{
nSyncedTurnRatio = -5; // Rotate in place

nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<810)
{
motor[motorA]=50;
}
motor[motorA]=0;

}

///////////////////////////////////////////////////////////////////////
////////turn///////////
///////////////////////////////////////////////////////////////////////
void viraEsquerda90()
{
nSyncedTurnRatio = -5; // Rotate in place

nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<400)
{
motor[motorA]=50;
}
motor[motorA]=0;
}

////////////////////////////////////////////////////////////////////
///////// Turn/////////
////////////////////////////////////////////////////////////////////
void move1casa()
{
ClearTimer(T1);

while(time1[T1] < 1000)
{
nSyncedMotors = synchAB;
motor[motorA]=55;
}
motor[motorA]=0;
}

/////////////////////////////////////////////////////////////
///////// close claw /////////
/////////////////////////////////////////////////////////////
void fechaGarra()
{
motor[motorC]=-25;
}

/////////////////////////////////////////////////////////////
///////// open claw /////////
/////////////////////////////////////////////////////////////
void abreGarra()
{
motor[motorC]=25;
}


/////////////////////////////////////////////////////////////
///////// main /////////
/////////////////////////////////////////////////////////////
task main()
{
moveInicio();//move forward
fechaGarra();
wait1Msec(1000);

///------------------------verefy ball-------------------------------///

while(true)
{
if(SensorValue(touchSensor) == 1)
{
//if catch ball is true

motor[motorC]=-30;//
//--------------------------------
moveTras1casa();
wait1Msec(750);
viraEsquerda180();
wait1Msec(750);
//-------------------
moveFim();
wait1Msec(750);
abreGarra();
wait1Msec(750);
PlaySound(soundBeepBeep);
wait1Msec(750);
//-------------------put's ready to the next ball
move2casasTras();
wait1Msec(750);
viraEsquerda90();
wait1Msec(750);

move1casa();
wait1Msec(750);
viraEsquerda90();
wait1Msec(750);
//--
move1casa();
wait1Msec(750);
}
else
{
//

motor[motorC]=30;//
}
}
///---------------------------------------------------------------///
}


Mon Jan 26, 2009 1:55 pm
Profile
Rookie

Joined: Sat Jan 10, 2009 6:26 pm
Posts: 14
Post Taking ball number 1 following lines.
Now i will do something more difficult, follow a red line and stop at a black line, joining together with the code already done:


//*!!Sensor, S1, touchSensor, sensorTouch, , !!*//
//*!!Sensor, S3, lightSensor, sensorLightActive, , !!*//

const tSensors touchSensor = (tSensors) S1; //sensorTouch

const tSensors lightSensor = (tSensors) S3; //sensorLightActive //*!!!!*//

///////////////////////////////////////////////////////////////////
///////// //////////
///////////////////////////////////////////////////////////////////

void moveFim()//
{

time1(T1) = 0;

while(time1(T1) < 10000)//10 seconds
{
nxtDisplayTextLine(2, "Value is %d", SensorValue[lightSensor]);

if(SensorValue(lightSensor) > 48 && SensorValue(lightSensor) < 57) //red
{
motor[motorA] = 50; //motor A is run at a 75 power level
motor[motorB] = 0; //motor B is run at a 0 power level
}

else
{
if(SensorValue(lightSensor) >= 57)//white
{
motor[motorA] = 0; //motor A is run at a 0 power level
motor[motorB] = 50; //motor A is run at a 75 power level
}

else//black
{
motor[motorA] = 0;
motor[motorB] = 0;
}
}

}
motor[motorA] = 0;
motor[motorB] = 0;
}


void fechaGarra()
{
motor[motorC]=-35;
}

void abreGarra()
{
motor[motorC]=20;
}

void andaTras1casa()
{
ClearTimer(T1);
while(time1[T1] < 1000)
{
motor[motorA]=-50;
motor[motorB]=-50;
}
motor[motorA]=0;
motor[motorB]=0;
}

void viraEsquerda90()
{
nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<135)
{
motor[motorA]=30;
motor[motorB]=-30;
}
motor[motorA]=0;
motor[motorB]=0;
}
/*void viraEsquerda180()
{
nMotorEncoder[motorA]=0;
while(nMotorEncoder[motorA]<270)
{
motor[motorA]=30;
motor[motorB]=-30;
}
motor[motorA]=0;
motor[motorB]=0;
}*/

void viraDireita180()
{
nMotorEncoder[motorB]=0;
while(nMotorEncoder[motorB]<270)
{
motor[motorB]=30;
motor[motorA]=-30;
}
motor[motorB]=0;
motor[motorA]=0;
}

void move1casa()
{
ClearTimer(T1);

while(time1[T1] < 1600)
{
motor[motorA]=50;
motor[motorB]=50;
}
motor[motorA]=0;
motor[motorB]=0;
}
/////////////////////////////////////////////////////////////
///////// main /////////
/////////////////////////////////////////////////////////////
task main()
{
moveFim();//
wait1Msec(1000);
fechaGarra();
wait1Msec(1000);
///------------------------verefy ball-------------------------------///
while(true)
{
if(SensorValue(touchSensor) == 1)
{
//

motor[motorC]=-30;//

nxtDisplayCenteredTextLine(0,"Policia margem 2");//print a message
wait1Msec(2000);

//--------------------------------
andaTras1casa();
wait1Msec(1000);
viraDireita180();
wait1Msec(1000);
moveFim();
wait1Msec(1000);
abreGarra();
wait1Msec(1000);
PlaySound(soundBeepBeep);
wait1Msec(750);
//-------------------puts ready to the next ball
andaTras1casa();
wait1Msec(1000);
viraEsquerda90();
wait1Msec(1000);
move1casa();
wait1Msec(1000);
viraEsquerda90();
wait1Msec(1000);
}

else
{
//

motor[motorC]=30;
nxtDisplayCenteredTextLine(0,"Nao tem ninguem");
wait1Msec(2000);
}
}
}


From here you can do the rest to all the balls, following the rules. But be careful, this is not Arfificial Inteligence.
In Arfificial Inteligence you have to have a robot reconizing you´re environement. To do that you have to create an Algorithm or something else, example:
- Table Agent in a array
- A* Algorithm
- DepthFirstSearch
- DepthLimitedSearch
- ...


Sat Jan 31, 2009 11:18 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 7 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


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.