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
Este documento foi desenvolvido em parceria com a equipe JUSTICE FTC TEAM #21036
- Conecte a Limelight ao laptop com um cabo USB
- Configure até 10 pipelines de visão com a interface da Web integrada da Limelight.
- Cada pipeline tem um “tipo”. Por exemplo, você pode configurar a pipeline 0 para ser uma pipeline “AprilTag”
- Você pode escrever suas próprias pipelines definindo o tipo de pipeline como “Python Snapscript”
- Os tipos de pipeline incorporadas podem rastrear peças de jogo coloridas, executar redes neurais e localizar o robô em 3D com base em um mapa de campo carregado. Cada 3A vem com um mapa de campo INTO THE DEEP integrado
- Depois de testar as pipelines no laptop, você pode conectar a Limelight à Porta USB 3.0 do Hub de Controle.
- Confira os exemplos de programação da FTC para obter dados de resultados da sua LL no código do robô.
Aqui está um guia de introdução mais detalhado:
Montagem e CAD
- Use pelo menos 2 parafusos M3 ou M4 para montar a LL3A nas Extrusões da REV ou GoBilda usando os orifícios de montagem rosqueados.
- Você também pode usar fita VHB ou abraçadeiras para prender o Limelight
- CAD: Vá para a página de downloads.
Atualizando o LimelightOS
Informações:
Instruções de atualização (Windows)
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão excluídos durante a atualização.
-
Faça o download dos drivers USB mais recentes, da imagem do Limelight OS e da ferramenta Balena Flash na página de downloads.
-
Mantenha pressionado o botão azul de configuração no seu Limelight. -Enquanto o mantém pressionado, passe um cabo USB->USB-C do laptop para o seu Limelight. Seu Limelight será ligado automaticamente.
-
Depois de ter ligado o seu LL ao seu laptop, pode soltar o botão azul de configuração
-
Seu Limelight está agora em modo flash, e seus LEDs não piscarão.
-
Execute o “Balena Etcher” como administrador.
-
Pode levar até 20 segundos para que o computador reconheça a câmera.
-
Selecione a imagem .zip mais recente em sua pasta de downloads
-
Selecione um dispositivo “Compute Module” no menu “Drives”.
-
Clique em “Flash”.
-
Quando a atualização estiver concluída, remova o cabo USB do limelight.
Instruções de atualização (Avançadas) (macOS e Linux)
Salve seus pipelines antes de atualizar o LimelightOS. Eles serão excluídos durante a atualização.
- Faça o download da imagem do Limelight OS e da ferramenta Balena Flash na página de downloads.
- Crie você mesmo o driver de inicialização USB
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 em execução, sua câmera será enumerada corretamente no macOS e no Linux
- Você precisa executar o rpiboot sempre que quiser fazer o flash.
- Mantenha pressionado o botão de configuração na Limelight e, enquanto o mantém pressionado, passe um cabo USB -> USB-C do laptop para a Limelight.
- Sua limelight será ligada automaticamente.
- Execute o “Balena Etcher”.
- Pode levar até 20 segundos para que o computador reconheça a câmera.
- Selecione a imagem .zip mais recente em sua pasta de downloads
- Selecione um dispositivo “Compute Module” no menu “Drives”.
- Clique em “Flash”.
- Após a conclusão do flash, remova o cabo USB da limelight.
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
- Atualize o SO do Control Hub, o aplicativo DriverStation, o aplicativo RobotController e o SDK para as versões mais recentes.
- Conecte a Limelight ao ControlHub e aguarde até que a luz verde de status da Limelight comece a piscar
- Conecte o ControlHub à rede WiFi do robô
- No aplicativo FTC DriverStation, clique em “Configure Robot” (Configurar robô)
- Se você não tiver uma configuração ativa, talvez seja necessário criar uma nova.
- Clique no botão “scan”.
- Você deverá ver um “Dispositivo Ethernet” aparecer.
- Você pode editar o nome desse dispositivo para “limelight” para maior clareza.
- Agora você pode inicializar um objeto Limelight3A em seu código usando o mapa de hardware.
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.
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.
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.
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.
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.
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
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
- Inicialize sua Limelight3A usando o mesmo nome que você usou durante a etapa de configuração do Control Hub.
- Chame pipelineSwitch() para selecionar um dos 10 pipelines que você configurou usando a interface da Web
- 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();
.
.
- Chame getLatestResult() nos seus loops autónomos e de teleoperação para obter o último objeto LLResult
- 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
- 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());
}
}
- 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
- Baixe e faça backup de todos os pipelines para o seu laptop de programação.
- Baixe uma cópia da imagem mais recente da Limelight para seu laptop de programação.
- Registre uma lista de seus pipelines e seus índices.
- Alvo duplo baixo
- Alvo duplo alto Carga
- Adicione alívios de tensão ao cabo USB da Limelight.
- Considere a possibilidade de colar todas as conexões com cola quente.
Lista de verificação antes da partida
- Verifique o cabo USB da sua Limelight.
- Verifique se há parafusos soltos no robô. Você pode usar um marcador permanente para ver se há mudanças na rotação dos parafusos.