[TOC] # Velocidade nas curvas Para deduzir as equações que dterminam o comportamento do Robô, começamos tentando determinar a *velocidade máxima que o robô pode atingir nas curvas sem derrapar*. Para isso, usamos a solução clássica, que considera que a força centrípeta deve ser menor ou igual ao atrito. ![](https://i.imgur.com/3gqA8fA.png) Podemos notar que nesta equação a velocidade nas curvas depende de alguns fatores: * massa do robô * Fat do robô * Raio da curva > OBS. Optou-se por não se considerar "Fat = µN = µmg" Pois acreditamos que em nossos experimentos é mais fácil medir a Fat diretamente A massa pode ser obtida com uma balança e a Fat pode ser medida experimentalmente, porém o *raio da curva* deve ser calculado levando em consideração os dados capturados pelo *encoders* durante o mapeamente ## Determinação do raio nas curvas Para desenvolver essas relações consideramos que para cada trecho teremos registrado o número de tics de cada encoder. Podemos chamar esses numeros de tics de *Ne* e *Ni*. Além disso, a envergadura do robô(L) também será relevante para as contas. Temos então que: Ni = número de tics do encoder no lado interno a curva Ne = numero de tics no encoder no lado externo a curva L = envergadura do robô (distância entre as rodas) Uma vez que consideremos estes valores como conhecidos há duas maneiras de deduzir o raio de uma curva ![](https://i.imgur.com/vwRofHL.png) onde: * V = velocidade linear do robô * W = velocidade angular do robô * wi = velocidade angular da roda interna * we = velocidade angular da roda interna **ou:** ![](https://i.imgur.com/ywYo0w7.png) # Distância mínima para frenagem Considerando que o robô sempre acelera o máximo possível nas retas e que ele possui uma velocidade limitada nas curvas, é facil perceber que o robô precisará desacelerar ao final de trechos retos. Porém, para otimizar a velocidade média do robô, essa desaceleração deve ser feita no último momento possível. <br/> Para determinar o último momento possível, basta descobrir qual é a distânica mínima necessária para que o robô desacelere até a velocidade desejada. Pdemos deduzir esta **"distância necessária"** através da equação de torricelli ![](https://i.imgur.com/tta9Nhc.png) onde: * Va = velocidade atual do robô (na reta) * Vd = velocidade desejada do robô (na curva) * a = aceleração * ΔS = "distânicia necessária" Uma vez obtida essa relação podemos observar que Va e Vd são conhecidas: * Va -> velocidade instantânea medida pelo encoder durante a corrida * Vd -> velocidade pré-definida para a curva, determinada durante o mapeamento Para determinar a aceleração máxima possível de se atingir sem derrapagem serão necessários experimentos para determinar qual é a desaceleração máxima que conseguimos atingir com o motor. Em outras palavras: o quão rápido conseguimos parar o nosso motor Caso sejamos capazes de frear o motor abrutamente, o único limitante da aceleração passa a ser a força de atrito: ![](https://i.imgur.com/BCuTlA2.png) onde **m** é a massa do robô # Comportamento nas "ondinhas" Uma otimização que podemos fazer no futuro é determinar um comportamento específico para o robô durante as "ondinhas". As ondinhas são um dos únicos casos em que o robô sai de uma curva em uma direção imediatamente para uma outra curva em outra direção, sem trechos retos entre elas. Isso faz com que as rodas precisem mudar bruscamente de velocidade para inverter a direção da curva, o que pode prejudicar nosso controle. Por isso a maioria dos seguidores de linha passam pelas ondinhas com uma velocidade excepcionalmente lenta Uma proposta de otimização para esse tipo de trecho seria fazer com que o robô realize um tracado que não necessariamente segue a linha, mas que ainda assim mantem partes do robô sobre a linha, obedecendo assim as regras da competição. Dessa maneira o raio das curvas fica atenuado, diminuindo o problema da mudança brusca de velocidade nas rodas ![](https://i.imgur.com/0XTGVwd.png) **Questões que devem ser levadas em consideração para a implementação dessa otimização:** * Uma vez fora da pista, como o robô identifica que está no traçado correto * Como o mapeamento identifica que um techo é uma ondinha? * Como o código interpreta um conjunto de trechos como um único trecho, de maneira a ser capaz de planejar um comportamento contínuo para todo o cojunto de trechos da ondinha * Como abordar o problema para os tipos diferentes de ondinha (ondinha com entrada/saida perpendicular e ondinha com entrada/saida tangencial) ![](https://i.imgur.com/nOy8fth.png)