Limelight 3A

A Limelight 3A é um sistema de processamento de imagem plug-and-play, sem-código para equipes de FIRST Tech Challenge. Tendo base nas fundações da Limelight 3 para FRC, ela traz rastreamento de AprilTag de alta performance, rastreamento de objetos de jogo, e localização de robô no campo inteiro para equipes de todos os níveis de experiência.

Configuração para FIRST Tech Challenge

Nesse Capítulo vamos aprender a configurar a Limelight 3A para a utilização na FIRST Tech Challenge.

Configuração para FIRST Tech Challenge

Configuração


Este documento foi desenvolvido em parceria com a equipe JUSTICE FTC TEAM #21036

Captura de tela 2024-09-13 183914.png

A Limelight 3A para FTC foi projetada para tornar o processamento de imagem mais fácil do que nunca. Aqui está uma rápida visão geral deste processo:

Aqui está um guia de introdução mais detalhado:

Montagem e CAD

LL3ADrawingSmall-8695da1c46886679b11e7795b839e3ee.png

Atualizando o LimelightOS

Informações:

As Limelights são fornecidas com uma imagem pré-instalada. Você provavelmente pode pular esta etapa por enquanto.

Instruções de atualização (Windows)

AVISO!
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão excluídos durante a atualização.

Instruções de atualização (Avançadas) (macOS e Linux)

AVISO!
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão excluídos durante a atualização.
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 .

Fiação do robô

Quando estiver pronto para usar a LL no robô, passe um cabo USBC para USBA da LL3A para a porta USB 3.0 do Hub de Controle. A Limelight 3A não é compatível com o Google Coral. Ainda é possível usar pipelines de deteção e classificação neurais definindo o mecanismo de tempo de execução da rede neural como “cpu”

Configuração do hub de controle

Configuração para FIRST Tech Challenge

Configuração do Pipeline da FIRST Tech Challenge


Este documento foi desenvolvido em parceria com a equipe JUSTICE FTC TEAM #21036

O LimelightOS armazena até 10 pipelines de visão únicos. Um pipeline é como um pequeno programa que pega uma imagem, processa a imagem e fornece um objeto de resultados para ser usado no código do robô. Os pipelines funcionam entre 10 fps (Redes Neurais da CPU) e 90 fps (Rastreamento de Objetos Baseado em Cores).

Para começar a ajustar os pipelines, ligue a Limelight ao seu computador e acesse http://limelight.local:5801 no seu navegador Web. Também pode acessar diretamente em http://172.28.0.1:5801 no Windows e http://172.29.0.1:5801 no Mac/ChromeOS/Linux.

Se você for um utilizador avançado e tiver alterado o índice USB ou o nome do anfitrião da sua LL, pode acessar à interface web em http://172.28.(usb_index).1:5801, http://172.29.(usb_index).1:5801, ou http://(hostname).local:5801

Se tiver baixado o Limelight Hardware Manager, você pode utilizar o botão “scan” para encontrar o endereço IP da sua Limelight.

Informações: Para editar vários pipelines, é necessário primeiro marcar a caixa de seleção “Ignore NetworkTables Index” na interface da Web. Isto diz à câmera para ignorar qualquer código que lhe diga para alterar as pipelines

Aba de Entrada


A Aba de Entrada aloja controles para alterar a imagem bruta da câmara antes de ser passada pelo pipeline de processamento.

Tipo de pipeline

Controla o tipo de pipeline desejado (AprilTags, Neural Networks, Python, etc.)

Imagem de origem

Controla a origem da imagem que é passada através do pipeline. Mude para “Snapshot” para testar os pipelines de visão em Snapshots armazenados.

ezgif-6-7097f31428.gif

Resolução + Zoom

Controla a resolução da câmera e do pipeline de visão. Recomendamos a utilização do pipeline de 320x240, a menos que esteja a utilizar a funcionalidade 3D.

Os pipelines de 320x240 são executados a 90 fps, enquanto os pipelines de 960x720 são executados a 22 fps. Em 2020, as opções de zoom de hardware 2x e 3x foram adicionadas a este campo. As opções de zoom não são digitais e utilizam 100% dos pixels reais do sensor.

Orientação

Controla a orientação do fluxo após todo o processamento. Isto não afeta de forma alguma os dados dos resultados.

ezgif-6-db3196b266.gif

Exposição

Controla a definição de exposição da câmara em intervalos de 0,01 milissegundos. O aumento da exposição aumentará o brilho efetivo da imagem. Também aumentará a desfocagem do movimento.

ezgif-6-3a0c00091b.gif

Regulagem de nível de preto

A regulagem de nível de preto é um controle avançado que pode afetar o brilho sem afetar a desfocagem do movimento. Mantenha-o o mais baixo possível.

ezgif-6-1f5744f576.gif

Ganho do sensor

Aumentar o ganho do sensor aumentará efetivamente o brilho da imagem, mas normalmente também adiciona ruído à imagem. Pode utilizar o Ganho do sensor e a regulagem do nível de preto para iluminar a imagem sem aumentar o tempo de exposição. Isso minimizará o desfoque de movimento para aplicações de rastreamento de alta velocidade.

ezgif-6-3a0c00091b.gif

Equilíbrio de vermelho, Equilíbrio de azul

Controla a intensidade dos componentes de cor vermelha e azul na sua imagem. Estes controlam coletivamente o equilíbrio de brancos do Limelight. Recomendamos deixá-los intocados

ezgif-7-6b3bf715a0.gif

Configuração detalhada do pipeline

Verifique os tipos específicos de pipeline clicando aqui.

Configuração para FIRST Tech Challenge

Início rápido da programação da FIRST Tech Challenge


Este documento foi desenvolvido em parceria com a equipe JUSTICE FTC TEAM #21036

Exemplo básico para FTC: Exemplo FTC

Na FTC, pode-se utilizar o Android Studio, OnBot Java e Blockly para interagir com o seu Limelight.

A maioria das aplicações requer menos de 10 linhas de código. Aqui está uma rápida visão geral do processo.

Uso básico

  1. Inicialize sua Limelight3A usando o mesmo nome que você usou durante a etapa de configuração do Control Hub.
  2. Chame pipelineSwitch() para selecionar um dos 10 pipelines que você configurou usando a interface da Web
  3. Chame start() para iniciar a sondagem de resultados em segundo plano a 100 sondagens por segundo.
                                                                                     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);

    /*
     * Starts polling for data.
     */
    limelight.start();
    .
    .
  1. Chame getLatestResult() nos seus loops autónomos e de teleoperação para obter o último objeto LLResult
  2. Utilize as funções getTx(), getTy() e getBotpose() do LLResult para guiar o seu robô.
  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());
            .
            .

Utilização avançada

  1. Em casos de uso avançados podem exigir o uso das funções do LLResult’s getColorResults(), getFiducialResults(), etc.
   // print some data for each detected target
if (result.isValid()) {
    // Access fiducial results
    List<LLResultTypes.FiducialResult> fiducialResults = result.getFiducialResults();
    for (LLResultTypes.FiducialResult fr : fiducialResults) {
        telemetry.addData("Fiducial", "ID: %d, Family: %s, X: %.2f, Y: %.2f", fr.getFiducialId(), fr.getFamily(),fr.getTargetXDegrees(), fr.getTargetYDegrees());
    }

    // Access color results
    List<LLResultTypes.ColorResult> colorResults = result.getColorResults();
    for (LLResultTypes.ColorResult cr : colorResults) {
        telemetry.addData("Color", "X: %.2f, Y: %.2f", cr.getTargetXDegrees(), cr.getTargetYDegrees());
    }
}
  1. Para obter a máxima precisão de localização 3D, chame updateRobotOrientation() e utilize getBotPose_MT2(). O MegaTag2 é um localizador de robôs fundido com IMU que utiliza a imu para resolver o problema de ambiguidade que é fundamental para todos os alvos planares, como os AprilTags.
       while (opModeIsActive()) {
    YawPitchRollAngles orientation = imu.getRobotYawPitchRollAngles();

    telemetry.addData("Yaw (Z)", "%.2f Deg. (Heading)", orientation.getYaw(AngleUnit.DEGREES));

    limelight.updateRobotOrientation(orientation.getYaw(AngleUnit.DEGREES));
    LLResult result = limelight.getLatestResult();
    if (result != null) {
        if (result.isValid()) {
            Pose3D botpose = result.getBotpose_MT2();
            .
            .

Para mais informações, consultar a página de programação FTC

Configuração para FIRST Tech Challenge

Melhores práticas da FIRST Tech Challenge


Este documento foi desenvolvido em parceria com a equipe JUSTICE FTC TEAM #21036

Lista de verificação da preparação do evento FTC

  1. Alvo duplo baixo
  2. Alvo duplo alto Carga

Lista de verificação antes da partida