Trabalho prático 4 - O projeto final
O TP4 teve como foco as preparações para a competição. Focamos em fazer melhorias no nosso robô, com relação aos TPs anteriores, além de adicionar um mecanismo para manipular os blocos coloridos da competição.
A competição
Na competição, o nosso robô falhou miseravelmente em coletar blocos. Basicamente, ele foi capaz de sair da base e de não coletar blocos pretos, resultando na maravilhosa pontuação de 0 pontos. Na análise do robô Auto-System que segue, explicaremos o que ele deveria fazer e os problemas que impediram seu funcionamento
Esse é um comportamento relativamente simples, e não gerou muitos problemas:
while(analogRead(ldr_st)<850){} \ \o loop sai depois que o valor do LDR sobe drasticamente
Aqui começam os problemas. A calibração funcionou como esperado, mas após a partida o robô apontava para a borda esquerda do campo ao invés de apontar para a frente.
''void orientacao(){
lcd.clear();//
lcd.print("Mapeando...");//
//
motorR->setSpeed(Gspeed);//
motorL->setSpeed(Gspeed);//
//
int Ttotal = 4*deg90;//
int ctrl = 0;//
int cont = 0;//
//
motorR->run(FORWARD);//
motorL->run(BACKWARD);//
//
while(ctrl == 0){//
//
cont = analogRead(ldr_dif);//
lcd.clear();//
lcd.print(cont);//
//
if(cont > tha){//
//
delay(20);//
cont = analogRead(ldr_dif);//
//
if(cont > tha){//
//
ctrl+=1;//
//
}//
}else if(cont <thb){//
//
delay(20);//
cont = analogRead(ldr_dif);//
//
if(cont < thb){//
//
ctrl+=1;//
//
}//
} //
}//
//
halt();//
//
}''
Verificamos que as funções avanco() e rotacao() causaram os problemas de alinhamento.
Feita a calibragem corretamente, o robô guardou na memória alguns valores relativos à luminosidade do ambiente, além de alguns valores remetentes à cor preta. o Auto-System pisca constantemente o LED colorido nas cores verde, azul e vermelho, guardando os valores. Quando encontra um bloco, o led da cor correspondente refletirá a luz da mesma cor com mais intensidade. Compara-se os valores do LDR para cada LED que se acendeu; se algum valor estiver muito diferente dos outros, é computada a presença de um bloco da cor correspondente.
Infelizmente, nosso robô não teve a chance de identificar um bloco, pois estava puxando para a esquerda e constantemente batendo nas paredes.
Adicionamos um motor novo ao robô para a competição. A coleta de blocos seria feita com uma garra simples, que segura o bloco prensando-o contra uma peça estática. Nenhum bloco foi coletado no dia da competição.
Todo o processo da competição foi envelopado num loop, que inicia num tempo t0 = millis() e termina em t0 + 60000
O principal problema do Auto-System foi a Rotação. Não conseguimos fazer com que o robô girasse na angulação correta na competição. Consideramos que esse controle da rotação não funcionou por causa da odometria. As rodas giram muito devagar para que o shaft-encoding funcionasse direito, e não conseguimos programar uma solução para manter a velocidade das rodas constante.