@mare_crisium,
ach du Ärmster. Am Wochenende um 6:33 schon am PC hocken? Mir würde man dann eher nachsagen, dass ich durchgemacht hätte. Hatte ich eigendlich auch von dir angenommen
Jedenfalls hast du die Zeit gut genutzt und dich in C perfekt eingearbeitet um dann so viel Mathe und Vorschläge in das Programm zu bringen, dass mir die Ohren flattern.

Ja, das mit dem Datenrecorder wäre schon genau das Richtige. Nur würde ich diese Möglichkeit keinesfalls auslagern, sondern bewußt in der MotorPID()-Funktion integrieren. Dann kann auch auch nicht vergessen werden diese Datenrecorder-Funktion aufzurufen.
Etwa folgendermaßen:
Code:
       unsigned char  MotorPID (
         unsigned char  regler,
                  char  speed,
                  int   links,
                  int   rechts)
{
/* Speicher für den Datenrecorder */
static            int   x  [ANZ_REGLER], xalt [ANZ_REGLER];
static            int   x1 [ANZ_REGLER], x2 [ANZ_REGLER];
static            int   x3 [ANZ_REGLER], x4 [ANZ_REGLER];
static            int   drest [ANZ_REGLER];
static            int   isum [ANZ_REGLER];

/* Die lokalen Arbeitsvariablen */
                  int   x,                 xalt;
                  int   x1,                x2;
                  int   x3,                x4;
                  int   drest;
                  int   isum;
  .
  .

   /* Die lokalen Arbeitsvariablen mit den 'Recorderdaten' füttern. */
   x     = x [regler];
   xalt  = xalt [regler];
   x1    = x1 [regler];
   x2    = x2 [regler];
   x3    = x3 [regler];
   x4    = x4 [regler];
   drest = drest [regler];
   isum  = isum [regler];

   switch (regler)
   {
   case PID_LINIE:
      .
      .
      break;
   case PID_xxxx:
      .
      .
      break;
   case PID_yyyy:
      .
      .
      break;
   }
   .
   .

   /* Die lokalen Arbeitsvariablen in den 'Recorderdaten' sichern. */
   x [regler]     = x;
   xalt [regler]  = xalt;
   x1 [regler]    = x1;
   x2 [regler]    = x2;
   x3 [regler]    = x3;
   x4 [regler]    = x4;
   drest [regler] = drest;
   isum [regler]  = isum;
}
Das ist aber nur technischer Schnickschnack.

Zu den anderen Anmerkungen kann ich leider nichts sagen. Da ist mir die Mathematik zu weit weg, von meinem Hausgebrauch-Rechnen.
Ein Hinweis evl. zu der Halbierung des berechneten y-Korrekturwertes. Waste teilt hier, so wie ich es Verstanden hatte, ja den Gesamt-Korrekturwert doch nur auf beide Motoren auf. Da mir dies bei der 'Verfolgung der Zusammenhänge' in seinem Thread eigendlich recht einleuchtend vorkam, ist das doch dann die logische Konsequenz daraus. Warum also den Weg zur Ermittlung der Parameter schon so gestalten, dass man hinterher nicht mehr 'nur' durch 2 teilen muss?

Auch hätte ich Probleme beim Auslagern der endgültigen 'Einstellerei' der Motor-Leistung und den Motor-Richtungen. Wobei die Berechnung der linken/rechten Motorwerte wieder über 'Summen', 'Quotienten' und 'sonstig kompliziertem' ausserhalb erfolgen muss.
Das halte ich für kritisch, da ich es eher sehen würde, dass sich eine Funktion (von mir aus auch mit Hilfsfunktionen, die ich aber nie in meinem Hauptprogramm aufrufe) um ihren Kram komplett alleine kümmern soll.
Ich selbst würde die Parameter so halten, dass meine Wünsche da rein gehen. Hier also etwa: 'Mittlere Geschwindigkeit'; 'Absolute Anzahl Tiks links+Absolute Anzahl Tiks rechts'; oder 'Zielkoordinate X+Zielkoordinate Y'. Das Ganze sollte dann die Funktion 'von alleine' auflösen und sich dann die benötigten Messwerte holen, berechnen und irgendwie sinnvolle 'Summen' und 'Quotienten' bilden.

Natürlich kann man deinen Vorschlag ja auch in einer Funktion 'verpacken' und hätte dann meine Vorstellung erhalten. (Wie viel Wege führten nochmal nach Rom?)


Ob die Mittelwertbildung durch eine Anpassung an dem P-Regelwert überflüßig ist kann ich nicht beurteilen. Allerdings würde ich nicht so pauschal sagen, dass nur die Liniensensoren streuen. Auch die Odometriedaten sind nicht so richtig sauber.
Aber wenn ein neuer P-Wert das alles ausbügeln kann, dann nichts wie weg mit dem Mittelwert.

Tja, und bei dem Rest kann ich nur sagen: Der "Alzheimer"-Faktor ist bei mir auf alle Fälle > 1, wenn es um die ehemals im Studium gelernte Mathematik geht.

Einen schönen Rest-Sonntag wünsche ich noch.
Gruß Sternthaler