Ir para o conteúdo principal

Início a Programação


O Limelight suporta os protocolos REST/HTTP, Websocket, Modbus e NetworkTables para dados de mira, dados de status e configuração ao vivo. Formatos de saída JSON, Protobuf e bruto estão disponíveis. Consulte a seção de APIs da documentação para obter mais informações.

Para equipes de FRC, o protocolo recomendado é o NetworkTables. O Limelight envia todos os dados de mira, incluindo um despejo completo em JSON, para o NetworkTables a 100hz. As equipes também podem definir controles, como ledMode, janela de corte e mais via NetworkTables. As equipes de FRC podem usar as bibliotecas Limelight Lib Java e C++ para começar com o Limelight em segundos. Limelight Lib é a maneira mais fácil de começar.

Biblioteca Limelight:

Java, CPPC++

Java

double tx = LimelightHelpers.getTX("");

C++

#include "LimelightHelpers.h"
double tx = LimelightHelpers::getTX("");
double ty = LimelightHelpers::getTY("");

Python

wip

NetworkTables

Java

import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.networktables.NetworkTable;
import edu.wpi.first.networktables.NetworkTableEntry;
import edu.wpi.first.networktables.NetworkTableInstance;
NetworkTable table = NetworkTableInstance.getDefault().getTable("limelight");
NetworkTableEntry tx = table.getEntry("tx");
NetworkTableEntry ty = table.getEntry("ty");
NetworkTableEntry ta = table.getEntry("ta");

//read valuesos periodicallyvalores periodicamente
double x = tx.getDouble(0.0);
double y = ty.getDouble(0.0);
double area = ta.getDouble(0.0);

//postManda too valor para a smart dashboard periodicallyperiodicamente
SmartDashboard.putNumber("LimelightX", x);
SmartDashboard.putNumber("LimelightY", y);
SmartDashboard.putNumber("LimelightArea", area);

C++

#include "frc/smartdashboard/Smartdashboard.h"
#include "networktables/NetworkTable.h"
#include "networktables/NetworkTableInstance.h"
#include "networktables/NetworkTableEntry.h"
#include "networktables/NetworkTableValue.h"
#include "wpi/span.h"

std::shared_ptr<nt::NetworkTable> table = nt::NetworkTableInstance::GetDefault().GetTable("limelight");
double targetOffsetAngle_Horizontal = table->GetNumber("tx",0.0);
double targetOffsetAngle_Vertical = table->GetNumber("ty",0.0);
double targetArea = table->GetNumber("ta",0.0);
double targetSkew = table->GetNumber("ts",0.0);

LabVIEW

Labview_10-7a12740da0d9ffa505ee79e94cdb9df0.png


Python

import cv2
import numpy as np

# runPipeline() isé calledchamado everytodo frame bypelo Limelight'sbackend backend.da Limelight
def runPipeline(image, llrobot):
    # convertconverte thea imagem de input imagepara too theespaço de cor do HSV color space
    img_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    # convertconverte theo hsv topara auma binaryimagem imagebinaria byremovendo removingqualquer any pixelspixel
    # thatque não sejam de acordo com os seguintes valores minimos e máximos do not fall within the following HSV Min/Max values
    img_threshold = cv2.inRange(img_hsv, (60, 70, 70), (85, 255, 255))

    # findache contourscontornos inna thenova newimagem binary imagebinaria
    contours, _ = cv2.findContours(img_threshold,
    cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    largestContour = np.array([[]])

    # initializeinicializa an emptyum array ofvazio valuespara tomandar senddevolta backao to the robotrobô
    llpython = [0,0,0,0,0,0,0,0]

    # ifse contoursos havecontornos beenforam detected,detectados, drawdesenhe themeles
    if len(contours) > 0:
        cv2.drawContours(image, contours, -1, 255, 2)
        # recordgrava theo largestmaior contourcontorno
        largestContour = max(contours, key=cv2.contourArea)

        # getpega thea unrotatedcaixa boundingdelimitadora boxnão thatrotacionada surroundsque theenvolve contouro contorno
        x,y,w,h = cv2.boundingRect(largestContour)

        # drawdesenha thea unrotatedcaixa boundingdelimitadora boxnão rotacionada
        cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,255),2)

        # recordgrave somealguns customdados datacustomizados topara sendmandar backdevolta toao the robotrobô
        llpython = [1,x,y,w,h,9,8,7]

    #return#retorna theo largestmaior contourcontor forpara thea LLmira crosshair,da theLL, modifieda image,imagem andmodificada, custome robotos datadados customizados
    return largestContour, image, llpython