Absender: Timo Sandmann
Datum: Fr, 25.01.2008 02:22:43
Hallo,ich wollte die Genauigkeit der Positionsbestimmung durch die Radencoder-Daten etwas verbessern, aber dabei fiel mir folgendes im Code (sensor.c :: sensor_update()) auf: Es wird aus den zurückgelegten Strecken der beiden Räder der Vektor (dessen Betrag im Code mit "deltaY" bezeichnet ist) zwischen alter und neuer Bot-Position berechnet und anschließend mit
x_enc += deltaY * cos(heading_enc*DEG2RAD); y_enc += deltaY * sin(heading_enc*DEG2RAD); die neue X- / Y-Position bestimmt.Die Sinus- / Kosinus-Zerlegung in die Komponenten ist klar, aber was ich dabei nicht verstehe:
Warum wird als Winkel die aktualisierte Blickrichtung des Bots benutzt?Für den Spezialfall, dass der Bot exakt geradeaus gefahren ist, stimmt die Richtung des Vektors natürlich mit der Bot-Richtung überein, das wird aber praktisch fast nie vorkommen, weil die Flanken der beiden Radencoder wohl selten gleichzeitig eintreffen. Im allgemeinen Fall ist der Bot eine Kurve gefahren und heading_enc ist der Winkel zwischen X-Achse und Bot-Blickrichtung am Ende der Kurve. Dann kann aber doch der Winkel zwischen dem Vektor und der X- Achse nicht gleich heading_enc sein, so wie es im Code steht, denn dann wäre die Kurve ja eine Gerade (oder eine "Schlangenlinie", die aber zwischen zwei Auswertungszeitpunkten mit den Encodern gar nicht messbar ist).
Oder anders gesagt: Für den Fall, dass der Bot eine Kurve gefahren ist, wird seine Blickrichtung am Ende der Kurve ungleich der Richtung des Vektors zwischen Kurvenanfang und Ende sein (wovon der Code aber ausgeht?), oder habe ich da einen Denkfehler? *verwirrt*
Viele Grüße, Timo