Decisao desvio » Histórico » Versão 7
Ebert Melo, 24/08/2021 12:48 h
| 1 | 1 | Ebert Melo | h1. Decisao desvio |
|---|---|---|---|
| 2 | |||
| 3 | 2 | Ebert Melo | É apenas uma função criada para fins de teste e retorna sempre 1 (Girar para a esquerda). Porém, encontra-se implementada no arquivo turn.py com o nome rotate(). |
| 4 | |||
| 5 | 7 | Ebert Melo | A função rotate() primeiramente obtém a imagem tirada pela câmera, por meio da biblioteca picamera, e a salva no path '/home/pi/image.jpg'. Depois, duas funções são chamadas: xy() e edge(). A primeira utiliza a imagem salva para detectar o obstáculo e retornar as coordenadas (x,y) do centro do objeto. Já a segunda, utiliza a imagem para detectar as bordas laterais mais internas à pista e retornar seus coeficientes de reta em forma de lista (1º termo é o coef. angular e o 2º, coef. linear), junto de um valor j, sendo j = 1 para linha central, j = 2 para borda direita, j = 3 para borda esquerda e j = 0 para nenhuma borda detectada. |
| 6 | 1 | Ebert Melo | |
| 7 | 7 | Ebert Melo | Se o retorno da função xy() for (0,0), então o robô não detectou obstáculo e retorna 0 (Andar). Caso contrário, analisa-se o valor de j: para j = 1, faz-se a análise das duas bordas, enquanto que para j=2 ou j=3, faz a análise de uma só borda. |
| 8 | |||
| 9 | 1 | Ebert Melo | Antes de prosseguir, é preciso saber que as coordenadas cartesianas utilizadas são diferentes das usuais: o eixo y é invertido de forma que o ponto (0,0) está no canto superior esquerdo da imagem. Então, é feita uma mudança de eixos (x', y') = (y, x) em ambas as retas, de modo que trocar os eixos é equivalente a girar o gráfico 90º à esquerda, transformando-o nos eixos cartesianos usuais. |
| 10 | 7 | Ebert Melo | |
| 11 | 4 | Ebert Melo | !mudança_de_eixos.png! |
| 12 | 1 | Ebert Melo | |
| 13 | Em seguida, é calculado x_linha_left e x_linha_right colocando o valor de x' como y do centro nas equações das retas depois de convertidas nos eixos x' e y'. |x - x_linha_left| = d_left e |x - x_linha_right| = d_right , serão as distâncias das bordas laterais até o centro do obstáculo. |
||
| 14 | 7 | Ebert Melo | |
| 15 | !d_left-d_right.png! |
||
| 16 | |||
| 17 | Também é calculado os ângulos agudos de inclinação das retas (ang_left e ang_right) usando a função math.atan() |
||
| 18 | |||
| 19 | !ang_left-ang_right.png! |
||
| 20 | |||
| 21 | Após tais valores terem sido calculados, é analisado se a diferença entre os ângulos é maior que uma fase constante de 10º |