Codigo do seguidor de linha V2 2020.2
Dependencies: mbed
Diff: main.cpp
- Revision:
- 5:b07a3cfe017d
- Parent:
- 4:af8cfbac17bb
--- a/main.cpp Fri Oct 02 20:00:39 2020 -0300 +++ b/main.cpp Sat Oct 03 19:12:04 2020 +0000 @@ -70,10 +70,14 @@ correcaoPD = PID_Sensores(erroSensores); //Calcula a correção do PD angular velocidadeEsquerda = velocidadeAtual + correcaoPD; //Ajusta a inicialmente a velocidade das rodas para manter na linha velocidadeDireita = velocidadeAtual - correcaoPD; - velocidadeRealDireita = retornaVelDireita(); //velocidade em /m/s + velocidadeRealDireita = retornaVelDireita(); //velocidade em /m/s velocidadeRealEsquerda = retornaVelEsquerda(); - velocidadeEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas - velocidadeDireita = PID_rodaDireita(velocidadeDireita,velocidadeRealDireita); + velocidadeEsquerda = transformaPWM(velocidadeEsquerda); //Converte velocidade PWM em m/s + velocidadeDireita = transformaPWM(velocidadeDireita); + correcaoEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas + correcaoDireita = PID_rodaDireita(velocidadeDireita,velocidadeRealDireita); + velocidadeEsquerda += correcaoEsquerda; + velocidadeDireita += correcaoDireita; ControleMotores(velocidadeEsquerda,velocidadeDireita); //Muda a velocidade das rodas para as velocidades calculadas anteriormente estadoAsaDireita = LerAsaDireita(); estadoAsaEsquerda = LerAsaEsquerda(); @@ -81,7 +85,8 @@ mapeamento(estadoAsaEsquerda,estadoAsaDireita); //faz o mapeamento da pista if (estadoAsaDireita && !estadoAsaEsquerda){ contadorAsaDireita++; //Faz as contagens das marcacoes a direita - if(contadorAsaDireita >=2){//ARRUMAR UM JEITO DE DAR UM TEMPO ENTRE A LEITURA E O SEGUIDOR PARAR PARA ELE PASSAR TODO PELA LINHA DE CHAGADA + if(contadorAsaDireita >=2){ //ARRUMAR UM JEITO DE DAR UM TEMPO ENTRE A LEITURA E O SEGUIDOR PARAR PARA ELE PASSAR TODO PELA LINHA DE CHAGADA + Aceleracao(0,0); ParadaFinal(); //Para o seguidor na segunda marcacao } } @@ -100,7 +105,7 @@ novaVelocidade = VelocidadeBateria(VELOCIDADE DO MAPA); } Acelerando(float novaVelocidade); //Acelera ou desacelera o robo - */ + */ LerSensoresFrontais(); //Leitura dos sensores frontais erroSensores = CalculaErro(); //Calcula o arco do erro dos sensores correcaoPD = PID_Sensores(erroSensores); //Calcula a correção do PD angular @@ -108,10 +113,12 @@ velocidadeDireita = velocidadeAtual - correcaoPD; velocidadeRealDireita = retornaVelDireita(); velocidadeRealEsquerda = retornaVelEsquerda(); + velocidadeEsquerda = transformaPWM(velocidadeEsquerda); //Converte velocidade PWM em m/s + velocidadeDireita = transformaPWM(velocidadeDireita); correcaoEsquerda = PID_rodaEsquerda(velocidadeEsquerda,velocidadeRealEsquerda); //Faz o ajusta final da velocidade das rodas correcaoDireita = PID_rodaDireita(velocidadeDireita,velocidadeRealDireita); + velocidadeEsquerda += correcaoEsquerda; velocidadeDireita += correcaoDireita; - velocidadeEsquerda += correcaoEsquerda; ControleMotores(velocidadeEsquerda,velocidadeDireita); //Muda a velocidade das rodas para as velocidades calculadas anteriormente estadoAsaDireita = LerAsaDireita(); estadoAsaEsquerda = LerAsaEsquerda(); @@ -122,7 +129,7 @@ if(estadoAsaDireita && !estadoAsaEsquerda){ //Leu somente a asa esquerda contadorAsaDireita++; //Faz as contagens das marcacoes a direita if(contadorAsaDireita >=2){ - Desacelerando(0); + Aceleracao(0,0); ParadaFinal(); //Para o seguidor na segunda marcacao } }