Open Matheus-de-Sousa opened 2 years ago
Objetivo: descrição da pista através de dados do encoders ou outros sensores no Braia, porém utilizando alguma abordagem que possua algum algoritmo de inteligência artificial.
Inicialmente pesquisei algumas referências de projetos de seguidor de linha que utilizaram alguma abordagem de mapeamento com algoritmos de inteligência artificial, porém encontrei pouca coisa e na maioria das vezes as implementações eram feitas dentro de um ambiente simulado. Para mapeamento tem aquelas abordagens muito utilizadas no campo de robótica como SLAM ("Localização e Mapeamento Simultâneo") que utiliza uma grande quantidade de dados a partir de sensores (geralmente câmeras, sensores lasers ou LIDARs) para gerar um mapa 2D ou 3D do local onde agente está inserido e ao mesmo tempo localizá-lo nesse mapa; outra abordagem é utilizar algoritmos puramente de mapeamento como _rtapmapping ou _elevationmapping.
Desvantagens dessa abordagem: são algoritmos complexos que envolve utilização de odometria e aplicação do algoritmo SLAM.
Vantagens: no ROS (Robot Operating System) há bibliotecas prontas com essas aplicações, necessitam de poucas adaptações para cada projeto, nesse caso teríamos um plataforma de simulação legal para testar, mas também descobrir uma forma de comunicar o robô diretamente com ROS.
Descobri que o esp32 tem aporte para o micro-ROS [1], com isso podemos enviar informações do próprio robô para o ROS e através do RVIZ, que a plataforma de visualização padrão do ROS, podemos gerar um mapa da pista. Para isso podemos utilizar os dados dos encoders e de uma câmera estéreo como esp cam [2] aplicados em algoritmos de odometria, para utilizar esses dados de "movimento" para estimar a posição do robô durante o tempo. Achei algumas pesquisadores que realizarm isso para robótica móvel diferencial, como [3] que utiliza um SLAM dinâmico com RGB-D e Encoders, e também esse vídeo onde ele demonstra o robô funcionando em tempo real e gerando um mapa no RVIZ [4].
Outra forma seria melhorar nosso algoritmo de mapeamento, trazendo algum conceito de odometria para auxiliar e tornar mais eficiente a identificação dos estados da pista.
Dificuldades com as simulação: acredito que esse mapa gerada no RVIZ não considera a física do ambiente. Então teríamos que modificá-lo para atender objetivos, como por exemplo, a sintonização de PID na issue #46 , porém não consegui, até agora, identificar alternativas para isso;
Encontrei algumas simulações de seguidores de linha utilizando ROS com diversos ambientes de simulação, como GAZEBO, Webots e V-Rep (CoppeliaSIM), adicionei eles na referência caso alguém queira ver. Em todos eles a pista tem que ser construído ou modificada manualmente, sendo bem complicado transferir o formato de pistas de competições para esse ambientes virtuais de forma automática. Estou tentando procurar um jeito de escrever um código que retira as informações de uma imagem com OpenCV e mande para um script de descrição do mundo no ROS, porém não conseguir pensar em um método viável ainda.
A ideia de utilizar o OpenCV é retirar informações da pista e talvez das marcações laterais, tanto para controle quanto para classificação do estado da pista, identificando os ângulos e caso seja maior que um valor estabelecido, classificá-lo como curva.
Imagem com ideia de classificação de ângulo:
Ideia de controle do carrinho a partir dos frames da câmera:
Minhas principais referências são esses dois modelos [1] e [2], o segundo em especial utiliza redes neurais profundas mais PID para criar um seguidor de linha que também desvia de objetos.
Imagem com a descrição da etapa de processamento do video com esp cam:
Diagrama do projeto com conceito de fusão de dados:
Verificar se a issue será continuada em um período breve, caso contrário mover para Backlog.
Mapeamento da pista utilizando uma câmera