Helmert-Transformation mit 3D Koordinaten (Geodäsie/Vermessung)

uter, Saturday, 19.01.2019, 13:43 (vor 2135 Tagen)

Liebe Geo-Forum Mitglieder,

ich habe mit VB ein Programm geschrieben bei dem ich meinen Tachymeter mit einem Laptop verbinden und über die RS232-Schnittstelle den GSI String der Messung direkt auslese und die Koordinaten daraus ableite. Das klappt alles soweit.

Nun würde ich gerne eine Freie Stationierung in mein Programm implementieren und brauche dazu Eure Hilfe bzw. einen kleinen Denkanstoss.

3 Passpunkt Koordinaten lade ich aus einer xyz Koordinatendatei und diese 3 Koordinaten messe ich dann mit meinem Tachy an. Ich habe also 3 Koordinaten im Startssystem und 3 Koordinaten im Zielsystem.

Ich würde gerne die 7-Parameter Helmert transformation

V = t + T · v

v , V sind die Ortsvektoren der Punkte im Start- und Zielsystem.
t ist der Translationsvektor (= Verschiebungsvektor).
T ist die Transformationsmatrix.

wie hier beschrieben

http://www.in-dubio-pro-geo.de/index.php?file=guide/contp#spatial

verwenden.


Das Studium ist schon etwas her und wir haben die Matrizen damals glaub ich einfach durch Matlab gejagt und haben damit die 7 unbekannten bestimmt. Dies kann ich mit VB nicht machen. Wie gehe ich nun also vor um das ganze zu programmieren ?

Soll ich die Matrizen jeweils nach einer Unbekannten also tx , ty , tz , m , εx , εy , εz umformen und dann wieder in die Formel V = t + T · v einsetzen? (ich würde auch ohne die unbekannt m auskommen da Maßstab im Ziel-/Starsystem der selbe ist)

Das Ganze sollte dann auch noch flexibel sein mit Bezug auf die Anzahl der Punkte im Start- und Zielsystem. Also es sollte dann auch noch mit 4,5... identischen Punkten im Start-/Zielsystem funktionieren (und am besten gleich noch die Verbesserungen anzeigen).

Ist mein oben beschriebener Ansatz richtig ? oder gibt es evtl. eine einfachere/bessere Lösung um an die Unbekannten zu kommen?

Für Eure Hilfe oder einen kleinen Denkanstoss bin ich sehr Dankbar !

Schöne Grüsse

David

Avatar

Helmert-Transformation mit 3D Koordinaten

MichaeL ⌂, Bad Vilbel, Saturday, 19.01.2019, 16:27 (vor 2135 Tagen) @ uter

Hallo,

im Prinzip kannst Du es so machen, wie in Matlab. Eine Matrix ist ja nichts anderes als ein Array. Also nur eine strukturierte Art zur Datenspeicherung. Für die benötigten Matrizenoperationen findest Du im Netz zielführende Algorithmen. Ein direktes Verfahren findest Du u.a. im folgenden Artikel im Abschnitt 2. Hierfür müsstest Du einen Algorithmus haben, der Singulärwertzerlegung eine 4x4 Matrix ermöglicht.

Viele Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
Transformation, Koordinaten, Matrix, Helmert-Transformation, Singulärwertzerlegung

Helmert-Transformation mit 3D Koordinaten

uter, Saturday, 19.01.2019, 17:39 (vor 2134 Tagen) @ MichaeL

Hallo Michael,

Vielen Dank für die schnelle Antwort! Werd mir das ganze in ruhe durchlesen :) und versuchen umzusetzen.

Avatar

Helmert-Transformation mit 3D Koordinaten

MichaeL ⌂, Bad Vilbel, Saturday, 19.01.2019, 17:45 (vor 2134 Tagen) @ uter

Hi,

kein Problem. Wie gesagt, nur die Gleichungen im Abschnitt 2 sind für Dich wichtig. Wenn Fragen sind, meld' Dich.

Viele Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Helmert-Transformation mit 3D Koordinaten

rafl, Monday, 21.01.2019, 13:22 (vor 2133 Tagen) @ uter

Hallo David,

wenn dein Tachymeter horizontiert ist und die Stehachse parallel zur Z-Achse verläuft, ist es doch am einfachsten, wenn du das Problem getrennt nach Lage und Höhe betrachtest. Für die Lage nimmst du einfach die Formeln für eine 2D Helmerttransformation, die in jeder geodätischen Formelsammlung stehen und für die Höhe berechnest du dir über die trigonometrische Höhenberechnung rückwärts die Standpunkthöhe (gemittelt aus den Höhen, die sich von jedem Anschlussspunkt ergeben).

Da hast du keine Probleme mit Matrizen, Quaternionen und Inversionsalgorithmen.

Oder hast du ein Koordinatensystem, bei dem die Z-Achse nicht senkrecht verläuft und du auch die Rotationen um die X- und Y-Achse brauchst?

Schöne Grüße Rafl

Helmert-Transformation mit 3D Koordinaten

uter, Tuesday, 22.01.2019, 17:05 (vor 2131 Tagen) @ rafl

Hi Rafl,

Danke für deine Antwort ! Also habe am anfang auch Gedacht es mit der 2D Transformation zu machen und wenn der Tachy sauber horizontiert ist funktioniert das auch gut. Danke nochmal für den Hinweis mit der Z-Achse hat mich auf jedenfall nochmal zu nachdenken gebracht. Also für Messungen wie Bauaufnahmen etc. wäre diese Methode vollkommen ausreichend denk ich und auf jeden fall einfacher in meinem Code umzusetzen. Gute Alternative! Aber wie sieht es aus wenn ich genaue Messungen über etwas längere Distanzen benötige und ich habe zB einen Stehachsfehler und/oder der Tachy ist nicht perfekt horizontiert? Kann nicht so recht abschätzen wie stark sich dass dann auswirkt.

Würde es deshalb gerne nochmal mit der 3D Helmert Transformation versuchen, bevor ich auf diese Alternative zurückgreife, auch wenn es keine einfache Kost für mich ist :).

Michael ich habe mich etwas in die Dokumente eingelesen welche Du mir empfohlen hast. Einzelne Bereiche versteh ich glaub. Also die Rotation mit Quaternionen und warum man das macht. in diesem Ytube video wird das auch nochmal gut erklärt:

https://www.youtube.com/watch?v=C5g62Cy6WLA

Und die Singulärwertzerlegung hab ich so grob glaub auch verstanden :).

In deinem Dokument in Abschnitt 2 ist mir bis zur symetrischen Matrix N auch alles klar. Aber bei "..zum grössten Eigenwert gehörenden Eigenvektor der symetrischen Matrix N" komm ich nicht so ganz weiter. Wie komme ich über N zu meinen Unbekannten der Quaternion q0, q1, q2 und q3? Muss ich die Singulärwertzerlegung auf die Matrix N anwenden ? Und was beschreiben dann die daraus entstandenen 3 Matrizen ? Und was beschreibt in der äquivalenten Rotationsmatrix R das I ?

Wie gesagt ist bei mir alles schon etwas her und ich bin auch jemand der bei so komplexen Sachen immer alles Schritt für Schritt mit Beispielwerten für XYZ-Koordinaten durchgehen muss bis ichs dann kapiert habe. Sollte ich mich noch etwas mehr mit der Singulärwertzerlegung und was dabei rauskommt beschäftigen ?

Für Eure Hilfe bin ich sehr Dankbar!

Schöne Grüsse

David

Avatar

Helmert-Transformation mit 3D Koordinaten

MichaeL ⌂, Bad Vilbel, Tuesday, 22.01.2019, 20:31 (vor 2131 Tagen) @ uter

Hej David,

In deinem Dokument in Abschnitt 2 ist mir bis zur symetrischen Matrix N auch alles klar. Aber bei "..zum grössten Eigenwert gehörenden Eigenvektor der symetrischen Matrix N" komm ich nicht so ganz weiter. Wie komme ich über N zu meinen Unbekannten der Quaternion q0, q1, q2 und q3?

Wenn Du die Singulärwertzerlegung auf die Matrix N anwendest, erhältst Du die Singulärwerte und die Singulärvektoren. Alternativ kannst Du auch eine Eigenwertzerlegung in diesem Fall durchführen und würdest die Eigenwerte und -vektoren bekommen. Zu jedem Eigenwert existier also ein Eigenvektor. Nun suchst Du den größten Eigenwert von N. Der korrespondierende Eigenvektor ist dann die Quaternion.

Hier mal ein Matlab-Code, der Dir sicher weiterhilft und auch in Octave lauffähig sein sollte.

%%
% Direkte Bestimmung der Transformationsparameter einer raeumlichen
% Helmert-Transformation mittels Quaternion zur Beschreibung
% der Rotationssequenz.
%
% Michael Loesler, 16.06.2018
 
clear all;
close all;
format long g;
clc;
 
%% Punkte im Startsystem
PunkteS = [
4157222.543 664789.307 4774952.099
4149043.336 688836.443 4778632.188
4172803.511 690340.078 4758129.701
4177148.376 642997.635 4760764.800
4137012.190 671808.029 4791128.215
4146292.729 666952.887 4783859.856
4138759.902 702670.738 4785552.196
];
 
%% Punkte im Zielsystem
PunkteZ = [
4157870.237 664818.678 4775416.524
4149691.049 688865.785 4779096.588
4173451.354 690369.375 4758594.075
4177796.064 643026.700 4761228.899
4137659.549 671837.337 4791592.531
4146940.228 666982.151 4784324.099
4139407.506 702700.227 4786016.645
];
 
%% Ermittlung des Schwerpunktes beider System
cX = mean(PunkteS);
cY = mean(PunkteZ);
 
%% Schwerpunktreduktion
X = PunkteS - (cX'*ones(1,size(PunkteS,1)))';
Y = PunkteZ - (cY'*ones(1,size(PunkteZ,1)))';
 
S = X'*Y;
 
Sxx = S(1,1);
Sxy = S(1,2);
Sxz = S(1,3);
 
Syx = S(2,1);
Syy = S(2,2);
Syz = S(2,3);
 
Szx = S(3,1);
Szy = S(3,2);
Szz = S(3,3);
 
N = [ Sxx+Syy+Szz      Syz-Szy         Szx-Sxz       Sxy-Syx
        Syz-Szy      Sxx-Syy-Szz       Sxy+Syx       Szx+Sxz
        Szx-Sxz        Sxy+Syx      -Sxx+Syy-Szz     Syz+Szy
        Sxy-Syx        Szx+Sxz         Syz+Szy    -Sxx-Syy+Szz];
 
% groesster positiver Eigenwert suchen und Eigenvektor nehmen == Rotationsquaternion
[V,D] = eig(N);
[maxD, idxD] = max(diag(D));
%% Quaternion der Drehung
q = V(:,idxD);
 
q0 = q(1);
qq = q(2:end);
 
Cq = [  0    -qq(3)  qq(2)
       qq(3)   0    -qq(1)
      -qq(2)  qq(1)   0   ];
 
%% Ableitung der Rotationsmatrix R
R = (q0^2 - qq'*qq)*eye(3) + 2*(qq*qq' + q0*Cq );
 
 
%% Maßstab
xTx = trace(X' * X);
m = maxD/xTx;
T = cY' - m*R*cX';
 
disp('Massstab');
disp(m);
 
disp('Translation');
disp(T);
 
disp('Rotationsmatrix');
disp(R);
 
disp('Quaternion');
disp(q);
 
disp('Omgea');
V = (m * R * PunkteS' + T * ones(1,size(PunkteS,1)))' - PunkteZ;
v = V(:);
disp(v'*v);


Viele Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
Matlab, Helmert-Transformation, Singulärwertzerlegung, Quaternion, Eigenwertzerlegung

Helmert-Transformation mit 3D Koordinaten

uter, Tuesday, 22.01.2019, 23:08 (vor 2131 Tagen) @ MichaeL

Lieber Micha,

Danke dir vielmals !!!

RSS-Feed dieser Diskussion