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


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 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.

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

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