Simulador interactiu que calcula les trajectòries cúbiques, la dinàmica i mostra el moviment del braç robòtic amb el camí de l’efector final.
Aquest mètode (Polinomi de 3r grau) genera una trajectòria suau entre un punt inicial (\(q_0\)) i un punt final (\(q_f\)), garantint sempre que la velocitat inicial i final siguin zero per evitar moviments bruscos.
Suposem que volem moure la nostra articulació (per exemple, l'angle d'un motor) segons aquests paràmetres:
Nota: Per simplificar, assumim temps inicial \( t_0 = 0 \text{ s} \), velocitat inicial \( \dot{q}_0 = 0 \) i velocitat final \( \dot{q}_f = 0 \).
El polinomi de tercer grau té quatre coeficients (\(a_0, a_1, a_2, a_3\)) que hem de trobar:
Les seves derivades (Velocitat i Acceleració) són:
Apliquem les quatre condicions (posició i velocitat a \(t=0\) i \(t=t_f\)) per crear un sistema de 4 equacions:
Amb \(a_0=10\), \(a_1=0\), \(q_f=70\) i \(t_f=3\), simplifiquem i resolem per \(a_2\) i \(a_3\):
Substituint tots els coeficients trobats:
L'equació de la trajectòria de l'articulació és:
Aquesta funció dóna la posició de l'articulació (en graus) per a qualsevol instant \(t\) entre 0 i 3 segons. El controlador utilitzarà aquesta funció per calcular el moment \(\boldsymbol{\tau}\) necessari a cada pas de temps (utilitzant la dinàmica).
No connectat
#include <Servo.h>
Servo s1, s2;
void setup() {
Serial.begin(115200);
s1.attach(9); // pin servo 1
s2.attach(10); // pin servo 2
}
void loop() {
if (Serial.available()) {
String line = Serial.readStringUntil('\n');
int commaIndex = line.indexOf(',');
if (commaIndex > 0) {
int q1 = line.substring(0, commaIndex).toInt();
int q2 = line.substring(commaIndex + 1).toInt();
s1.write(q1);
s2.write(q2);
}
}
}