Este repositório contém o desenvolvimento do projeto semestral da disciplina de Laboratório de Algoritmos e Estruturas de Dados I (LAEDI) do CEFET-MG.
O objetivo principal do projeto é desenvolver algoritmos para processamento de perfis de imagens digitais (representados por vetores de inteiros) para auxiliar na navegação autônoma em uma pista em miniatura. O projeto é dividido em quatro partes progressivas.
O sistema simula a visão de um robô que percorre uma pista preta com bordas brancas e centro vermelho. A entrada de dados consiste em vetores numéricos que representam linhas de pixels da imagem capturada.
Para todas as etapas, utiliza-se o seguinte mapeamento de valores:
- 0 (Preto): Mapeado para
1 - 128 (Vermelho): Mapeado para
2 - 255 (Branco): Mapeado para
3
Objetivo: Identificar se uma linha da imagem contém a pista completa.
- Método: Busca de padrão utilizando Autômato Finito Determinístico (DFA) ou algoritmo KMP.
- Padrão Alvo: Sequência
1 3 2 3 1(Preto, Branco, Vermelho, Branco, Preto). - Saída: Indica se o padrão foi encontrado ou não na linha fornecida.
Objetivo: Determinar a geometria da pista (reta ou curva) analisando múltiplas linhas (
-
Método:
- Identificação do segmento da pista (região
2) em cada linha. - Cálculo do ponto médio do segmento:
$(p + q) / 2$ . - Análise da tendência de deslocamento dos pontos médios.
- Identificação do segmento da pista (região
- Condição: O padrão deve ser identificado em pelo menos 70% das linhas.
-
Classificações:
Curva a direitaCurva a esquerdaPista em linha reta
Objetivo: Detectar obstáculos físicos sobre a pista.
- Método: Análise da integridade da região central da pista.
- Lógica: Um obstáculo altera o padrão original (
1 3 2 3 1), dividindo a região vermelha (2) e criando novos segmentos (ex:1 3 2 3 2 3 1). - Saída:
Pista sem impedimentoPista com impedimento
Objetivo: Elaboração do relatório final de implementação.
- Formato: PDF (Máx. 5 páginas).
- Conteúdo Obrigatório:
- Introdução: Descrição dos problemas e soluções.
- Desenvolvimento: Estruturas de dados, funções principais e decisões de projeto.
- Conclusão: Análise de dificuldades e limitações.
- Referências: Bibliografia utilizada.
- Linguagem: C ou C++.
- Compilador:
gccoug++. - Ambiente de Execução: Sistema Linux.
- Restrições:
- Proibido uso de bibliotecas de terceiros para a lógica principal.
- Código deve compilar sem warnings.
- Identação e comentários explicativos são obrigatórios.
Para compilar o projeto, utilize o seguinte comando no terminal:
gcc main.c -o projeto.c -WallPara executar com um arquivo de entrada:
./projetoInstituição: Centro Federal de Educação Tecnológica de Minas Gerais (CEFET-MG) Disciplina: Laboratório de Algoritmos e Estruturas de Dados I Professora: Natália Batista
Desenvolvido por:
- Wescley Júnior
- Giovanni Estevam