4.4.16 FTC – teleoperare

FTC SDK

Perioada de teleoperare durează 2 minute. Cei doi driveri vor manevra robotul astfel încât să obțină cât mai multe puncte.

Programarea perioadei de Teleoperare este destul de simplă și constă în principal în setarea butoanelor de pe controler(joystick) astfel încât să acționeze motoarele și servomotoarele de pe robot. Un exemplu de program pentru perioadavde Teleoperare il puteți găsi în SkyStone SDK. Nu trebuie decât să copiați codul în folderul TeamCode, să-l modificați astfel încât să corespundă configurației robotului dumneavoastră(configurație,nume motoare etc.) și să-l rulați pe robot controler.

Configurația Robotului

Înainte de a începe codul TeleOp, trebuie să ne asigurăm că avem o configurație de bază pentru robot în fișierul TeamCode/src/main/java/org/firstinspires/ftc/teamcode/. Să presupunem că robotul nostru are două motoare de propulsie (drive motors).

Definirea Clasei de Configurație

Mai întâi, definim o clasă pentru configurarea hardware-ului robotului nostru.

RobotHardware.java

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.HardwareMap;

public class RobotHardware {
public DcMotor leftDrive = null;
public DcMotor rightDrive = null;

// Constructor
public RobotHardware() {}

// Inițializarea hardware-ului
public void init(HardwareMap hwMap) {
leftDrive = hwMap.get(DcMotor.class, "left_drive");
rightDrive = hwMap.get(DcMotor.class, "right_drive");

// Setarea direcției motoarelor
leftDrive.setDirection(DcMotor.Direction.FORWARD);
rightDrive.setDirection(DcMotor.Direction.REVERSE);

// Setarea puterii motoarelor la zero la început
leftDrive.setPower(0);
rightDrive.setPower(0);
}
}

Codul pentru TeleOp

Acum, să scriem codul pentru TeleOp. Vom crea o clasă care extinde OpMode și vom implementa logica pentru a controla robotul folosind gamepad-ul.

TeleOpMode.java

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;

@TeleOp(name="Basic TeleOp", group="TeleOp")
public class TeleOpMode extends OpMode {
// Declarația hardware-ului robotului
RobotHardware robot = new RobotHardware();

@Override
public void init() {
// Inițializarea hardware-ului robotului
robot.init(hardwareMap);
telemetry.addData("Status", "Initialized");
}

@Override
public void loop() {
// Citirea valorilor de la gamepad
double drive = -gamepad1.left_stick_y; // Valoarea pentru mișcarea înainte/înapoi
double turn = gamepad1.right_stick_x; // Valoarea pentru rotire

// Calcularea puterii pentru fiecare motor
double leftPower = drive + turn;
double rightPower = drive - turn;

// Setarea puterii motoarelor
robot.leftDrive.setPower(leftPower);
robot.rightDrive.setPower(rightPower);

// Afișarea valorilor puterii motoarelor pe telefon
telemetry.addData("Motors", "left (%.2f), right (%.2f)", leftPower, rightPower);
}

@Override
public void stop() {
// Oprirea motoarelor atunci când opmode-ul se oprește
robot.leftDrive.setPower(0);
robot.rightDrive.setPower(0);
}
}

Explicații

  1. RobotHardware.java:
    • Această clasă definește configurarea hardware-ului robotului. Aici inițializăm motoarele și setăm direcția acestora.
  2. TeleOpMode.java:
    • Clasa TeleOpMode extinde OpMode și implementează logica pentru controlul robotului în perioada TeleOp.
    • În metoda init(), inițializăm hardware-ul robotului și trimitem un mesaj de stare către driver station.
    • În metoda loop(), citim valorile de la gamepad pentru mișcarea înainte/înapoi și pentru rotire. Calculăm puterea pentru motoarele din stânga și din dreapta și setăm aceste valori. De asemenea, actualizăm telemetria pentru a afișa valorile curente ale puterii motoarelor.
    • În metoda stop(), oprim motoarele atunci când opmode-ul se oprește.

Configurarea Motoarelor în Driver Station

Asigură-te că ai configurat motoarele corect în aplicația FTC Robot Controller (Driver Station). Mergi la Settings -> Configure Robot și asigură-te că motoarele sunt mapate cu numele corecte (left_drive și right_drive).

Acest exemplu simplu de cod TeleOp ar trebui să te ajute să controlezi un robot de bază în competiția FTC. De aici, poți extinde codul pentru a adăuga mai multe funcționalități, cum ar fi brațe robotice, senzori și alte mecanisme.