Ich muss über 6 Laser wissen, wo sich ein Multirotor in einem rechteckigen Raum befindet, 2 auf jeder Achse.
Das Problem ist wie folgt:
Eingaben:
- Raum: Quadrat => 10 mal 10 Meter
- 6 Positionen des Lasers: Feste auf dem Rahmen
- 6 Orientierungen des Lasers: Feste auf dem Rahmen
- Die 6 Messungen der Laser
- Die Quaternion von der IMU meines Fluglotsen (PixHawk).
- Der Ursprung ist auf dem Schwerpunkt des Mehrrotors zentriert und so definiert, als ob die Wände senkrecht zu jeder Achse stehen (die Normale der Wand in X ist (-1,0,0)).
Ausgabe :
- Position in 3D (X, Y, Z)
- Winkelposition (Quaternion)
Da ich die Winkelposition des Multi-Rotors erhalten habe, habe ich die Laserpositionen und -orientierungen über das Quaternion gedreht, dann über die 6 Messungen extrapoliert und die 3 Wände erhalten. (Die Ausrichtung der Wände ist trivial, dann reicht nur ein Punkt aus, um ihre Position zu bestimmen.
Leider habe ich festgestellt, dass die Giermessung (Rotation um z) vom PixHawk unzuverlässig ist . Dann sollte ich das Gieren von den Lasern messen, aber es gelingt mir nicht, es zu tun. Wenn das 2D-Problem einfach ist, bin ich in 3D verloren.
Weiß jemand, ob es irgendwo [ Algorithmus zum Erkennen der XYZ-Position und der Quaternion aus 6 Messungen ] gibt? Oder wie geht man dieses Problem richtig an?
Die Frage: Wie könnte ich das Gieren aus 2 Messungen von 2 Lasern erhalten, bei denen ich die ursprüngliche Position, Ausrichtung und das Nick- und Rollverhalten kenne?
HINWEIS: Grüne Zeiger sind die Ursprungsposition, rote Zeiger sind die "Endposition", können jedoch (aufgrund von Gieren) um den roten Kreis gedreht werden.