Inicio Rápido de Programación FTC
En FTC, puedes usar Android Studio, OnBot Java y Blockly para interactuar con tu Limelight.
La mayoría de las aplicaciones requieren menos de 10 líneas de código. Aquí tienes una visión general rápida del proceso.
Uso Básico
- Inicializa tu Limelight3A usando el mismo nombre que utilizaste durante el paso de Configuración del Control Hub.
- Llama a pipelineSwitch() para seleccionar una de las 10 tuberías que configuraste usando la interfaz web.
- Llama a start() para iniciar el sondeo de resultados en segundo plano a 100 sondeos 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);
/*
* Inicia el sondeo de datos.
*/
limelight.start();
.
.
- Llama a getLatestResult() en tus bucles autónomos y teleoperados para obtener el último objeto LLResult.
- Utiliza getTx(), getTy(), y getBotpose() de LLResult para guiar tu robot.
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());
.
.
Uso Avanzado
- Los casos de uso avanzados pueden requerir el uso de getColorResults(), getFiducialResults(), etc. de LLResult.
// imprime algunos datos para cada objetivo detectado
if (result.isValid()) {
// Accede a los resultados fiduciales
List<LLResultTypes.FiducialResult> fiducialResults = result.getFiducialResults();
for (LLResultTypes.FiducialResult fr : fiducialResults) {
telemetry.addData("Fiducial", "ID: %d, Familia: %s, X: %.2f, Y: %.2f", fr.getFiducialId(), fr.getFamily(),fr.getTargetXDegrees(), fr.getTargetYDegrees());
}
// Accede a los resultados de color
List<LLResultTypes.ColorResult> colorResults = result.getColorResults();
for (LLResultTypes.ColorResult cr : colorResults) {
telemetry.addData("Color", "X: %.2f, Y: %.2f", cr.getTargetXDegrees(), cr.getTargetYDegrees());
}
}
- Para una máxima precisión de localización 3D, llama a updateRobotOrientation() y usa getBotPose_MT2(). MegaTag2 es un localizador de robot fusionado con IMU que utiliza el imu para resolver el problema de ambigüedad que es fundamental para todos los objetivos planares como los AprilTags.
while (opModeIsActive()) {
YawPitchRollAngles orientation = imu.getRobotYawPitchRollAngles();
telemetry.addData("Yaw (Z)", "%.2f Grados. (Rumbo)", 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 más información, consulta la página de Programación FTC