Está en la página 1de 8

PRACTICA ASÍNCRONA ROBÓTICA

ROBÓTICA MÓVIL
PRACTICA 1
Integrante 1 Crespo Torrico Emanuel B.
Integrante 2

Minefield Challenge 1
Para completar este desafío, programe el robot para que maniobre con seguridad a
través de un campo minado. Siga el curso delineado por la flecha azul, evitando las
minas (vasos amarillos).

Código usado:
#pragma config(Sensor, S1, Colision, sensorTouch)
#pragma config(Sensor, S2, Giroscopio, sensorI2CHiTechnicGyro)
#pragma config(Sensor, S3, Luz, sensorLightActive)
#pragma config(Sensor, S4, Ultrasonido, sensorSONAR)
#pragma config(Motor, motorA, Garra, tmotorNXT, PIDControl, encoder)
#pragma config(Motor, motorB, MotorDer, tmotorNXT, PIDControl,
driveRight, encoder)
#pragma config(Motor, motorC, MotorIzq, tmotorNXT, PIDControl,
driveLeft, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//

//////////////////////////////////////////////
/// Mueve adelante al robot a una distancia determinada en cm
///////////
void mover_distancia(float distancia, int velocidad=50)
{
nMotorEncoder[MotorDer]=0;
nMotorEncoder[MotorIzq]=0;
nMotorPIDSpeedCtrl[MotorDer] = mtrSpeedReg;
nSyncedMotors = synchBC;
nSyncedTurnRatio = 100;
float recorrido=0;
PRACTICA ASÍNCRONA ROBÓTICA

motor[MotorDer] = velocidad;
while (recorrido<distancia)
{
recorrido=(nMotorEncoder[MotorDer]*2*PI*2.74)/360;
}
motor[MotorDer] =0;
motor[MotorIzq] =0;
}

/////////////////////////////////////////////////
/// Gira al robot sobre su propio eje un determinado angulo
/// angulo en grados
/// velocidad 0 a 100
/// angulo >0 -> giro horario -> derecha
/// angulo <0 -> giro antihorario -> izquierda
////////////////////////////////////////////////
void girar(int angulo,int velocidad=20)
{
int anterior=SensorValue(Giroscopio);
int angulo1=angulo;
nMotorPIDSpeedCtrl[MotorDer] = mtrSpeedReg;
nSyncedMotors = synchBC;
nSyncedTurnRatio = -100;
int grados=0;
angulo=angulo*10;
anterior=anterior+angulo;
angulo=anterior;
if(angulo1>=0)// sentido horario
{
angulo = angulo - 45;
motor[MotorDer] = -velocidad;
grados=SensorValue(Giroscopio);
while (grados<angulo)
{
grados=SensorValue(Giroscopio);
}
motor[MotorDer] = 0;
motor[MotorIzq] = 0;
return;
}
else // sentido antihorario
{
angulo = angulo + 35;
motor[MotorDer] = velocidad;
grados=SensorValue(Giroscopio);
while (grados>angulo)
{
grados=SensorValue(Giroscopio);
}
motor[MotorDer] = 0;
motor[MotorIzq] = 0;
return;
}
}
//////////////////////////////////////////////

task main()
{
mover_distancia(30, 35);
PRACTICA ASÍNCRONA ROBÓTICA

girar(45,50);
mover_distancia(50,35);
girar(-38,50);
mover_distancia(70,35);
girar(-45,50);
mover_distancia(50,35);
girar(50,50);
mover_distancia(30,35);
girar(96,50);
mover_distancia(85,35);
girar(96,50);
mover_distancia(40,35);
girar(45,50);
mover_distancia(50,35);
girar(-35,50);
mover_distancia(60,35);
girar(-45,50);
mover_distancia(50,35);
girar(50,50);
mover_distancia(80,35);
}
Capturas de pantalla que muestren el proceso de movimiento del robot y su finalización, incluya
el link del video grabado en STREAM o en cualquier otra plataforma.
PRACTICA ASÍNCRONA ROBÓTICA
PRACTICA ASÍNCRONA ROBÓTICA
PRACTICA ASÍNCRONA ROBÓTICA
PRACTICA ASÍNCRONA ROBÓTICA
PRACTICA ASÍNCRONA ROBÓTICA

También podría gustarte