Projeto de condução autónoma usando Jetson Nano com visão por computador. A deteção de linhas na pista é feita com um modelo de segmentação U-Net treinado com imagens reais e máscaras geradas por OpenCV. O sistema converte a saída segmentada em ângulos de direção, permitindo ao carro seguir linhas de forma robusta e explicável.
Objetivo: Permitir que o carro siga linhas (curvas e retas) usando uma rede de segmentação que aprende a reconhecer as linhas tal como um humano faria.
-
Imagens capturadas diretamente com a câmara do JetCar em múltiplos cenários:
- Curvas apertadas
- Retas
- Condições variadas de luz e sombras
-
Para cada imagem foi criada uma máscara binária:
- Filtragem de cores (HSV)
- Canny edges
- Morfologia para reduzir ruído
- Generalização: Aprende a reconhecer linhas mesmo sob variações (luz, sombras, desgaste do piso).
- Explicabilidade: Saída visível (máscara), fácil de auditar.
- Flexibilidade: Podemos mudar a lógica de controlo sem re-treinar o modelo.
- O modelo prevê a máscara (linha navegável).
- Procuramos o ponto mais próximo no fundo da imagem.
- Se não houver ponto (linha desapareceu), usamos o último ponto conhecido (ghost point).
- Calculamos o ângulo entre o centro do carro e o ponto.
- Suavizamos o ângulo com histórico e convertemos para direção do volante.
Nota:
- Treinar o ângulo diretamente seria opaco e menos flexível.
- Técnicas como Hough falham facilmente com ruído ou linhas gastas.
- Captura de imagens com Nano
- Criação de máscaras com OpenCV
- Treino do modelo U-Net
- Exportação do modelo para ONNX e conversão para TensorRT (.engine)
- Leitura da câmara com GStreamer
- Preprocessamento da imagem
- Inferência TensorRT → máscara
- Cálculo do ponto alvo e ângulo
- Aplicação de ângulo e velocidade
- Epoch 5:
- Epoch 10:
- Epoch 15:
- Carrega o motor TensorRT (
unet_model.engine) - Captura frames da câmara
- Faz inferência → máscara binária
- Calcula ponto alvo e ângulo
- Aplica comando ao Nano