es müsste sich schon eine Formel aufstellen lassen, mit der man jeden Motoren einzeln so ansteuern kann, sodas eine Bewegung in eine bestimmte Richtung mit einer bestimmten Geschwindigkeit sowei eine Rotation mit bestimmter Orientierung und Geschwindigkeit realisierbar ist.

Das einzige was fies ist, ist die Tatsache, das der Vorgegebene Geschwindigkeitsvektor (Richtung, nicht Betrag) sich bei Rotation zwar absolut gesehen nicht ändert, allerdings relativ zum Roboter eine gegenläufige Drehung mit gleicher Geschwindigkeit durchführt.

Man braucht also als eingabe die vektorielle Größe der Geschwindigkeit ( in <x,y> im Roboter-Koordinatensystem) und die skalare Größe der Winkelgeschwindigkeit (die man dann mit der Rad-Position in eine entsprechende Tangentialgeschwindigkeit umrechnen kann).
Für die Formel bin ich im Moment zu faul, die folgt wahrscheinlich wenn ich zuhause bin, und Lust drauf hab.

Letztendlich berechnet man dann 2 einzelne Bewegungen (die der Robotermitte, und seine Eigendrehung) und für beide entsprechend die Motor-Ansteuerung, und addiert diese dann.

Die Bewegung der Robotermitte ist als Vektor vorgegeben. diesen Vektor muss man eigentlich nur in seine Komponenten tangential zu den Rädern zerlegen, und schon hat man die Geschwindigkeiten für die einzelnen Räder, mit dem Rad-Radius ergibt sich der Rest dann leicht.

Die Eigendrehung des Bots wird durch eine Drehung aller Räder in die gleiche Richtung mit gleicher Geschwindigkeit realisiert (Orientierung durch Vorzeichen unserer Eingabegröße bestimmt).


Das einzige Problem das sich jetzt noch ergibt ist eines der Skalierung. Wenn der Bot nur in eine Richtung fährt, bzw sich nur um die eigene Achse dreht, kann er das jeweils mit Maximalgeschwindigkeit tun. Die Maximalgeschwindigkeit der Summe ist allerdings durch das am stärksten beanspruchte Rad bestimmt, man muss also sinnvoll skalieren (einfach das Rad mit der höchsten Geschwindigkeit bestimmen, und falls diese das Maximum übersteigt, einfach die Geschwindigkeit der anderen Räder mit Max/RadMax multiplizieren, und das Rad mit der höchsten Geschwindigkeit (RadMax) auf Max stellen.

Damit dürfte sich das Problem lösen lassen, wie gesagt, Formel wenn ich motiviert bin und sie jemand will...
Unter umständen lässt sich das ganze auch noch etwas eleganter lösen, aber das würde schon zu sehr in die Vektorrechnung auf Uni-Niveau gehen, und da müsste ich mich auch erstmal wieder einlesen.

Egal wie mans macht, rechenaufwändig wirds sicherlich.

MfG
Daniel