Hallo,

ich habe ein kleines Problem, das auf den ersten Blick zwar trivial aussieht, für mich jedoch artet es immer mehr ins Philosophische aus, je länger ich drüber nachdenke. Vielleicht hat ja einer von euch eine Idee, wie man das ganze angehen könnte.

Ich mache derzeit für meinen Hexapod die inverse Kinematik in C neu. Ich betrachte in meinen Überlegungen stets nur ein Bein. Der Roboter soll programmtechnisch durch seinen Mittelpunkt (der sich irgendwo im 3D-Raum befindet), dem Punkt, an dem das Bein den Boden berührt, und durch 3 Winkel, die die Drehungen des Roboterkörpers im Raum angeben, bestimmt werden.
Nehmen wir an, der Roboter befindet sich mit seinem Mittelpunkt im Ursprung des Koordinatensystems, der Bodenpunkt befindet sich irgendwo im 1. Quadranten. Der Roboter ist weiters in allen drei Achsen geneigt. Die Drehwinkel sind bekannt, sie werden ja durch die Steuerung/den Benutzer vorgegeben.
Weiters bekannt ist der Montagepunkt des Beines am Roboterkörper, wenn sich dieser im Ursprung befindet und keinerlei Drehung aufweist, also quasi die Standardposition bei Programmstart.

Da sich mit geneigtem Roboterkörper schwer rechnen lässt, ist mein Ansatz, die Drehungen des Körpers "auszudrehen" also den Körper in den jeweiligen Achsen um die jeweiligen (negativen) Winkel wieder in Ruhelage zu bringen. Der Bodenpunkt muss dabei natürlich mitgedreht werden, die relative Lage dieses Punktes zum Körper soll ja nicht verändert werden. Danach bräuchte ich den Montagepunkt des Roboters, der ja nun mit dem Standard-Montagepunkt gleichbedeutend ist, in den Nullpunkt zu schieben, den "verdrehten" Bodenpunkt mitzuschieben, und die Gelenkswinkel zu bestimmen.

Aber: wie annulliere ich nun die Drehwinkel des Körpers? Sprich, mit welcher Achse fange ich an? Ich weiß ja nicht, in welcher Reihenfolge die Drehungen erfolgt sind, sodass ich sie durch Umkehrung wieder rückgängig machen könnte.
Andererseits könnte ich ja so tun, als würde ich mir den Befestigungspunkt des Beines ausrechnen, indem ich zuerst um die x-, dann um die y- und schließlich um die z-Achse drehe, um danach den Punkt durch Umkehrung wieder zurückzubewegen. Da ja die Rotation des Bodenpunktes von der des Körpers abhängt, müsste diese Reihenfolge auch für den Bodenpunkt gelten. Dann müsste aber auch jede andere beliebige Folge gültig sein, und doch bringt jede dieser Möglichkeiten ein anderes Ergebnis zutage.

Wo liegt der Haken, wo hab ich was entscheidendes übersehen?

Danke fürs lesen und noch einen angenehmen Abend,
ikarus_177