@workwind
Source-Code der aktuellen NIBOLIB V2.9 -> copro.c: das selbe gilt auch für
mfguint8_t copro_setPositionParameters(int8_t ki, int8_t kp, int8_t kd) {
return 1;
}
Hero_123
Hallo
Erstmal vielen Dank für das rege Interesse.
Alle copro_xyz Aufrufe, die die Regler Parameter (ki, kp, kp) betreffen halte ich für akademisch (hier hat sich wohl ein Regelungstechniker ausgetobt!).
Für den normalen Anwender total überzogen. Hier würde vielleicht ein Set von evtl 12 Parameter , die der normale Anwender ausprobieren kann, völlig ausreichend.
Alle Möglichkeiten (2^10 * 2^10 * 2^10) auszuprobieren ist völlig unsinnig, auch wenn etliche Werte total unsinnig sind, aber schon der Rest würde einen enormen Zeitaufwand bedeuten!
Für mein Vorhaben habe ich folgende Daten ermittelt:
Drehung 15 Grad: ticks_links: 5; ticks_rechts: 4
Drehung 30 Grad: ticks_links: 8; ticks_rechts: 7
Vor 4,5 cm: ticks_links: 13; ticks_rechts: 10
Programmcode:
int8_t gotoPositionRel(int16_t left, int16_t right, uint16_t speed, int8_t deltaL, int8_t deltaR)
{
int16_t ctl, ctr;
int16_t i=0;
char text [20];
copro_setTargetRel(left, right, speed);
left += copro_ticks_l;
right += copro_ticks_r;
while(1)
{
copro_update();
i+=1;
ctl = copro_ticks_l;
ctr = copro_ticks_r;
if (i < 200)
{
if ((abs(left - ctl) <= deltaL) && (abs(right - ctr) <= deltaR))
{
// textout (0,56," ",0); // Zeile löschen
// sprintf (text,"i%d TL%d TR%d", i, ctl, ctr);
// textout (0,56, text,0);
return 0;
}
delay(5);
}
else
{
// textout (0,56," ",0); // Zeile löschen
// sprintf (text,"i%d TL%d TR%d", i, ctl, ctr);
// textout (0,56, text,0);
return 1;
}
}
}
....
main ()
....
// DrehLi, Vor, DrehRe
j = gotoPositionRel(-tld, trd, vl,dL,dR);
GetXY ();
j = gotoPositionRel(tl, tr, vl,dL,dR);
GetXY ();
j = gotoPositionRel(tld, -trd, vl,dL,dR);
Die "Unschärfe" wird über deltaL, deltaR vorgegeben.
Bei zu kleinen Werten wird ein EndlosLoop erzeugt. Darum die AbbruchVar i.
Wahrscheinlich sind aber meine Ansprüche zu hoch. Ich muß nochmal testen, wenn ich meine Anforderungen etwas zurückdrehe und dann das Verhalten im Parcour teste.
Die Variablen tl, tr, tld, trd können über eine IR-Fernbedienungen leicht eingestellt werden (so ist nicht jedesmal eine Neuprogrammierung notwendig!)
mfg
Lesezeichen