Guia de Início Rápido do Limelight 3A

Especificações de Hardware
- Dimensões: 2.839in x 1.894in (72.11mm x 48.11mm)
- Espessura: 0.661in (16.80mm)
- Massa: 0.20 lb
- Montagem: 4x furos passantes #10, 4x M3, 6x furos roscados M4
- Entrada de Energia: 4.1V-5.75V via USB
- Consumo Máximo de Energia: 4W
- Sensor: OV5647 Color Rolling Shutter (640x480 @ 90FPS)
- Sem iluminação LED integrada
- Campo de Visão: H:54.5° V:42°
- Conectividade apenas USB-C (sem porta RJ45)
- Luz de Status: Verde (detecção de alvo)
- Otimizado para compatibilidade com FTC
Capacidades de Software (Limelight OS)
- Visão de alto desempenho Plug-and-Play. Nenhuma experiência necessária.
- Interface web auto-hospedada baseada em navegador para configuração de pipelines de visão
- Suporte para FTC (integração direta com Java) e FRC (interface NetworkTables)
- Exposição, ganho do sensor, resolução e taxa de quadros configuráveis
- Configure 10 Pipelines de Visão intercambiáveis:
- Pipelines Python Personalizados com OpenCV 4.10, numpy, etc.
- Rastreamento de AprilTag 2D, 3D e Localização do Robô
- Localização 3D Completa (GPS do Robô) com MegaTag1
- Localização 3D Completa de Alta Precisão (GPS do Robô) com Fusão de IMU Externo com MegaTag2
- 20fps @ 1280x960 (redução 2x), 50fps @ 640x480 (redução 2x)
- Visualizador 3D completo na interface web
- Pipelines de Color Blob a 90FPS
- Pipelines de Detecção Neural de Objetos (apenas inferência em CPU)
- Pipelines de Classificação Neural de Imagens (apenas inferência em CPU)
- Pipelines de Rastreamento de Código de Barras
- Interface integrada de Calibração de Intrínsecos Charuco
- Streaming MJPEG de baixa latência integrado
1. Montando o Limelight 3A
Montagem Roscada (Recomendada)
- Use pelo menos 2 parafusos M3 ou M4 para montar seu LL3A em canais Rev ou GoBilda usando os furos de montagem roscados
- Você também pode usar fita VHB ou abraçadeiras para fixar seu Limelight
Montagem com Furos Passantes
- Use parafusos #10-32 ou #10-24 de 1 1/4" com porcas autotravantes
- Alternativamente, use parafusos M4 de 28mm com porcas autotravantes
2. Conectando o Limelight 3A
Quando estiver pronto para usar seu Limelight no robô:
Para FTC
- Conecte um cabo USB-C para USB-A do seu Limelight 3A à porta USB 3.0 do seu Control Hub
- Conecte ao seu Control Hub plugando na porta USB 3.0 (porta azul)
Para FRC
- Conecte seu Limelight 3A à porta USB do seu roboRIO
- Use um cabo USB-C para USB-A
O Limelight 3A não suporta Google Coral. Você ainda pode usar pipelines de detecção e classificação neural configurando o motor de execução da rede neural para "CPU".
3. Acessando a Interface Web
Após conectar seu Limelight 3A ao computador via USB:
- Aguarde a luz de status verde ficar ativa (cerca de 15-20 segundos)
- Use um destes métodos para acessar a interface web:
- Método 1: Abra o aplicativo Limelight Hardware Manager, procure por Limelights e clique duas vezes no seu Limelight 3A quando aparecer
- Método 2: Abra um navegador web e navegue para
http://limelight.local:5801
Uma vez conectado, você terá acesso a:
- Aba Settings - Configure número da equipe, hostname e outras configurações do sistema
- Abas Vision Pipeline - Configure e ajuste seus pipelines de processamento de visão
- Aba Camera & Crosshair - Ajuste configurações da câmera e parâmetros da mira
- Aba 3D Visualization - Visualize detecção de AprilTag e localização em tempo real
Toda configuração é feita através desta interface web. As alterações são salvas automaticamente no seu Limelight.
4. Atualizando o LimelightOS
Os Limelights são enviados com uma imagem pré-instalada. Você provavelmente pode pular esta etapa por enquanto.
Instruções de Atualização (Windows)
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão deletados durante a atualização.
- Baixe os drivers USB mais recentes, a imagem do Limelight OS e a ferramenta Balena Flash da Página de Downloads
- Reinicie sua máquina após instalar os drivers
- Segure o botão azul de configuração no seu Limelight
- Enquanto segura, conecte um cabo USB->USB-C do seu laptop ao seu Limelight (seu Limelight ligará automaticamente)
- Após plugar seu LL no laptop, você pode soltar o botão azul de configuração
- Seu Limelight agora está em modo flash, e seus LEDs não piscarão
- Execute o "Balena Etcher" como administrador
- Pode levar até 20 segundos para sua máquina reconhecer a câmera
- Selecione a imagem .zip mais recente na sua pasta de downloads
- Selecione um dispositivo "Compute Module" no menu "Drives"
- Clique em "Flash"
- Quando o flash estiver completo, remova o cabo USB do seu Limelight
Instruções de Atualização (Avançado) (macOS & Linux)
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão deletados durante a atualização.
Estamos trabalhando para simplificar dramaticamente o processo de atualização no macOS e Linux
- Baixe a imagem do Limelight OS e a ferramenta Balena Flash da Página de Downloads
- Compile o driver USB Boot você mesmo:
brew install libusb
brew install pkg-config
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
make
cd mass-storage-gadget64
sudo ../rpiboot -d .
# Enquanto o rpiboot estiver rodando, sua câmera será enumerada corretamente no macOS e Linux
# Você precisa executar o rpiboot toda vez que quiser fazer flash.
- Segure o botão azul de configuração no seu Limelight
- Enquanto segura, conecte um cabo USB->USB-C do seu laptop ao seu Limelight (seu Limelight ligará automaticamente)
- Após plugar seu LL no laptop, você pode soltar o botão azul de configuração
- Seu Limelight agora está em modo flash, e seus LEDs não piscarão
- Execute o "Balena Etcher"
- Pode levar até 20 segundos para sua máquina reconhecer a câmera
- Selecione a imagem .zip mais recente na sua pasta de downloads
- Selecione um dispositivo "Compute Module" no menu "Drives"
- Clique em "Flash"
- Quando o flash estiver completo, remova o cabo USB do seu Limelight
5. Processo de Configuração
Para FTC
- Conecte seu Limelight ao laptop com um cabo USB
- Acesse a interface web conforme descrito na seção 3
- Vá para a aba Settings e defina o número da sua equipe, depois clique em "Restart Vision Client"
- Configure seus pipelines conforme desejado (AprilTag, Redes Neurais, Python Personalizado, etc.)
- Quando estiver pronto para competição, plugue seu Limelight 3A na porta USB 3.0 do seu Control Hub
- No App FTC DriverStation, clique em "Configure Robot"
- Se você não tiver uma configuração ativa, pode ser necessário criar uma nova
- Clique no botão "scan"
- Você deve ver um "Ethernet Device" aparecer
- Você pode editar o nome deste dispositivo para "limelight" para maior clareza
- Agora você pode inicializar um objeto Limelight3A no seu código usando o hardware map
Para FRC
- Conecte seu Limelight 3A ao laptop, aguarde a atividade da luz de status
- Acesse a interface web conforme descrito na seção 3
- Na aba Settings, defina o número da sua equipe e clique em "Restart Vision Client"
- Configure seus pipelines conforme desejado
- Quando estiver pronto, plugue seu Limelight 3A na porta USB do seu roboRIO
- Abra seu dashboard preferido para verificar se seu 3A está enviando dados para o NetworkTables do seu roboRIO
- Adicione Port Forwarding para habilitar edição de pipeline ao vivo enquanto conectado à rede do seu robô:
- Java
- CPP
// (robotIP):5801 agora apontará para o stream da interface web do Limelight3A (id 0):
// (robotIP):5800 agora apontará para o stream de vídeo do Limelight3A (id 0):
PortForwarder.getInstance().add(5801, "172.29.0.1", 5801);
PortForwarder.getInstance().add(5802, "172.29.0.1", 5802);
PortForwarder.getInstance().add(5803, "172.29.0.1", 5803);
PortForwarder.getInstance().add(5804, "172.29.0.1", 5804);
PortForwarder.getInstance().add(5805, "172.29.0.1", 5805);
PortForwarder.getInstance().add(5806, "172.29.0.1", 5806);
PortForwarder.getInstance().add(5807, "172.29.0.1", 5807);
PortForwarder.getInstance().add(5808, "172.29.0.1", 5808);
PortForwarder.getInstance().add(5809, "172.29.0.1", 5809);
// (robotIP):5811 agora apontará para o stream da interface web do Limelight3A (id 1):
// (robotIP):5810 agora apontará para o stream de vídeo do Limelight3A (id 1):
PortForwarder.getInstance().add(5811, "172.29.1.1", 5801);
PortForwarder.getInstance().add(5812, "172.29.1.1", 5802);
PortForwarder.getInstance().add(5813, "172.29.1.1", 5803);
PortForwarder.getInstance().add(5814, "172.29.1.1", 5804);
PortForwarder.getInstance().add(5815, "172.29.1.1", 5805);
PortForwarder.getInstance().add(5816, "172.29.1.1", 5806);
PortForwarder.getInstance().add(5817, "172.29.1.1", 5807);
PortForwarder.getInstance().add(5818, "172.29.1.1", 5808);
PortForwarder.getInstance().add(5819, "172.29.1.1", 5809);
// (robotIP):5801 agora apontará para o stream da interface web do Limelight3A (id 0):
// (robotIP):5800 agora apontará para o stream de vídeo do Limelight3A (id 0):
wpi::PortForwarder::GetInstance().Add(5801,"172.29.0.1",5801);
wpi::PortForwarder::GetInstance().Add(5802,"172.29.0.1",5802);
wpi::PortForwarder::GetInstance().Add(5803,"172.29.0.1",5803);
wpi::PortForwarder::GetInstance().Add(5804,"172.29.0.1",5804);
wpi::PortForwarder::GetInstance().Add(5805,"172.29.0.1",5805);
wpi::PortForwarder::GetInstance().Add(5806,"172.29.0.1",5806);
wpi::PortForwarder::GetInstance().Add(5807,"172.29.0.1",5807);
wpi::PortForwarder::GetInstance().Add(5808,"172.29.0.1",5808);
wpi::PortForwarder::GetInstance().Add(5809,"172.29.0.1",5809);
// (robotIP):5811 agora apontará para o stream da interface web do Limelight3A (id 1):
// (robotIP):5810 agora apontará para o stream de vídeo do Limelight3A (id 1):
wpi::PortForwarder::GetInstance().Add(5811,"172.29.1.1",5801);
wpi::PortForwarder::GetInstance().Add(5812,"172.29.1.1",5802);
wpi::PortForwarder::GetInstance().Add(5813,"172.29.1.1",5803);
wpi::PortForwarder::GetInstance().Add(5814,"172.29.1.1",5804);
wpi::PortForwarder::GetInstance().Add(5815,"172.29.1.1",5805);
wpi::PortForwarder::GetInstance().Add(5816,"172.29.1.1",5806);
wpi::PortForwarder::GetInstance().Add(5817,"172.29.1.1",5807);
wpi::PortForwarder::GetInstance().Add(5818,"172.29.1.1",5808);
wpi::PortForwarder::GetInstance().Add(5819,"172.29.1.1",5809);
6. Tipos de Pipeline Disponíveis
O Limelight 3A oferece os mesmos recursos de processamento de visão que outros modelos Limelight:
- Rastreamento de AprilTag e localização do robô
- Rastreamento de color blob
- Detecção neural de objetos (apenas CPU)
- Classificação neural
- Rastreamento de código de barras
- Pipelines Python personalizados
Cada 3A vem com um mapa de campo Into The Deep integrado para FTC.
7. Programação FTC
Exemplo Básico FTC: Exemplo FTC
A maioria das aplicações requer menos de 10 linhas de código:
public class Teleop extends LinearOpMode {
private Limelight3A limelight;
@Override
public void runOpMode() throws InterruptedException
{
limelight = hardwareMap.get(Limelight3A.class, "limelight");
telemetry.setMsTransmissionInterval(11);
limelight.pipelineSwitch(0);
/*
* Inicia a coleta de dados.
*/
limelight.start();
while (opModeIsActive()) {
LLResult result = limelight.getLatestResult();
if (result != null) {
if (result.isValid()) {
Pose3D botpose = result.getBotpose();
telemetry.addData("tx", result.getTx());
telemetry.addData("ty", result.getTy());
telemetry.addData("Botpose", botpose.toString());
}
}
}
}
}
Para máxima precisão de localização 3D, chame updateRobotOrientation() e use getBotPose_MT2():
while (opModeIsActive()) {
YawPitchRollAngles orientation = imu.getRobotYawPitchRollAngles();
limelight.updateRobotOrientation(orientation.getYaw(AngleUnit.DEGREES));
LLResult result = limelight.getLatestResult();
if (result != null) {
if (result.isValid()) {
Pose3D botpose = result.getBotpose_MT2();
// Use os dados do botpose
}
}
}
Para mais informações, veja a página de Programação FTC
8. Solução de Problemas
Indicadores da Luz de Status
- Luz Verde: Pisca lentamente (sem alvos), pisca rapidamente (alvos detectados)
Perguntas Frequentes
-
Por que meu Limelight parece tão quente? Para o Limelight funcionar o mais frio possível, ele necessariamente precisa parecer o mais quente possível/seguro ao toque. Seu gabinete é um dissipador de calor altamente condutivo que ajuda a manter a CPU em uma temperatura razoavelmente fria.
-
Por que a imagem parece tão granulada? Para minimizar a latência, vários filtros normalmente presentes em câmeras comerciais são ignorados. O stream também é comprimido para minimizar a taxa de bits. Na versão 2024.10.1, alteramos os valores padrão de balanço de cores para fazer as imagens parecerem mais naturais e vibrantes ao olho humano.
-
O que o Limelight oferece em relação ao OpenCV no Control Hub? Um algoritmo de localiza ção multi-tag pronto para uso, sem código, com fusão de sensor IMU do robô, redes neurais e muito mais.