4.8 PID(proportional–integral–derivative)
PID înseamnă Proporțional, Integral, Derivat. Practic se ia valoarea de stare dorită și se compară cu valoarea reală, apoi aplicăm factorii de diferență (eroare) care produc o valoare de ieșire proporțională.
Exemple din viața reală:
Exempul 1: Termostatul care controlează centrala termică pentru menține o anumită temperatură a mediului ambiant.

Exemplul 2. Pilotul automat al mașinii(cruise control) care menține acceași viteză chiar dacă mașina ruleayă pe un drum drept sau dacă mașina urcă sau coboară o pantă.

FOLOSIREA PID PENTRU A CORECTA MIȘCAREA ROBOTULUI
Dacă robotul construit de noi va parcurge distanța dintre punctul A și B, iar noi de dorim să parcurgă această distanță să fie parcursă într-un anumit interva de timp, robotul trebuie să facă anumite corecții bazate pe relația dintre distanță vs. timp și bazate pe relația dintre viteză vs. timp. În funcție de aceste relații viteza robotului va fi mărită sau micșorată.
Un alt exemplu ar fi ridicarea glisierei care ne dorim să atingă un anumit nivel. Motorul va fi comandat astfel încât să ridice glisiera până la nivelul dorit
Puterea motorului va fi dată de un set funcții care vor returna valori în funcție de diferanța dintre cât de sus este ridicată glisiera și cât de sus ne-am fi dorit să fie înălțată la momentul respectiv.
Exemplu pentru controlul unui braț robotic cu ajutorul PID.
PID (Proporțional-Integral-Derivativ) este un algoritm de control utilizat pe scară largă în inginerie pentru a regla ieșirile unui sistem bazat pe feedback. În contextul FTC (First Tech Challenge), controlul PID este adesea utilizat pentru a asigura precizia mișcării robotului, cum ar fi menținerea unei viteze constante a motoarelor, controlul poziției sau orientării robotului, sau stabilizarea unui braț robotic.
Componentele Controlului PID
- Proporțional (P): Componenta proporțională ajustează ieșirea proporțional cu eroarea curentă. Eroarea este diferența dintre valoarea dorită (setpoint) și valoarea curentă (feedback). Dacă eroarea este mare, corecția este mare.Formula: P=kp×errorP = k_p \times errorP=kp×error
- Integral (I): Componenta integrală se ocupă de eroarea acumulată în timp. Ajută la eliminarea erorilor reziduale care nu sunt corectate doar de componenta proporțională.Formula: I=ki×∑errorI = k_i \times \sum errorI=ki×∑error
- Derivativ (D): Componenta derivativă se bazează pe rata de schimbare a erorii. Ajută la reducerea oscilărilor și la stabilizarea răspunsului sistemului.Formula: D=kd×d(error)dtD = k_d \times \frac{d(error)}{dt}D=kd×dtd(error)
Implementarea PID în FTC
FTC oferă diferite moduri de a implementa controlul PID, fie prin utilizarea metodelor oferite de SDK-ul FTC, fie prin implementarea propriului algoritm PID.
Utilizarea Motor Control API cu PID
Motoarele DC în FTC au suport integrat pentru controlul PID prin modurile de funcționare RUN_USING_ENCODER
și RUN_TO_POSITION
. Iată un exemplu de utilizare a controlului PID pentru a conduce un motor la o anumită poziție:
public class MotorPIDControlOpMode extends LinearOpMode {
private DcMotor motor;
@Override
public void runOpMode() {
// Inițializarea motorului
motor = hardwareMap.get(DcMotor.class, "motor");
// Setarea motorului pentru a folosi encodere și control PID intern
motor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
waitForStart();
// Setarea poziției țintă
motor.setTargetPosition(1000); // Poziția țintă în tichete de encoder
motor.setPower(1.0); // Puterea motorului
// Așteaptă până când motorul ajunge la poziția țintă
while (opModeIsActive() && motor.isBusy()) {
telemetry.addData("Target Position", motor.getTargetPosition());
telemetry.addData("Current Position", motor.getCurrentPosition());
telemetry.update();
}
// Oprește motorul
motor.setPower(0);
}
}
Implementarea unui Algoritm PID Personalizat
Dacă dorești un control mai fin sau mai complex, poți implementa propriul algoritm PID. Iată un exemplu simplu de control PID personalizat pentru un motor:
public class CustomPIDOpMode extends LinearOpMode {
private DcMotor motor;
private double kP = 0.1;
private double kI = 0.01;
private double kD = 0.005;
private double integral = 0;
private double lastError = 0;
@Override
public void runOpMode() {
// Inițializarea motorului
motor = hardwareMap.get(DcMotor.class, "motor");
waitForStart();
int targetPosition = 1000;
motor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
motor.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
while (opModeIsActive()) {
int currentPosition = motor.getCurrentPosition();
double error = targetPosition - currentPosition;
integral += error;
double derivative = error - lastError;
lastError = error;
double power = (kP * error) + (kI * integral) + (kD * derivative);
motor.setPower(power);
telemetry.addData("Target Position", targetPosition);
telemetry.addData("Current Position", currentPosition);
telemetry.addData("Power", power);
telemetry.update();
// Condiție de oprire
if (Math.abs(error) < 5) {
motor.setPower(0);
break;
}
}
}
}
Ajustarea Parametrilor PID
Ajustarea corectă a parametrilor PID (kP
, kI
, kD
) este esențială pentru un control precis. Procesul de ajustare, cunoscut sub numele de tuning, implică modificarea acestor parametri pentru a obține răspunsul dorit al sistemului:
- kP (Proporțional): Începe cu ajustarea acestui parametru. Creșterea
kP
va face sistemul să răspundă mai rapid, dar prea mare poate cauza oscilații. - kI (Integral): Adaugă acest parametru pentru a elimina eroarea reziduală. Dacă este prea mare, poate cauza instabilitate și oscilații.
- kD (Derivativ): Ajustează acest parametru pentru a reduce oscilațiile și a stabiliza sistemul. Dacă este prea mare, poate face sistemul lent și nefuncțional.
Utilizarea Telemetriei
În timpul testării și ajustării controlului PID, utilizarea telemetriei este esențială pentru a monitoriza valorile erorii, ale puterii și ale poziției.
telemetry.addData("Error", error);
telemetry.addData("Integral", integral);
telemetry.addData("Derivative", derivative);
telemetry.addData("Power", power);
telemetry.update();
Concluzie
Controlul PID este un instrument puternic în programarea roboților FTC, permițând un control precis și robust al mișcărilor și al pozițiilor. Prin utilizarea API-urilor integrate sau a unei implementări personalizate, controlul PID poate îmbunătăți semnificativ performanța robotului în competiții. Ajustarea corectă a parametrilor PID și monitorizarea telemetriei sunt esențiale pentru obținerea unui comportament optim al robotului.