Forum: Mikrocontroller und Digitale Elektronik Berechnung von x,y,z Koordinaten (bei 3D Scanner)


von Malte (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche schon eine Weile anhand der Position zweier Servomotoren,
welche einen Distanzsensor in zwei Ebenen drehen können, und dem
Entfernungswert(l) des Distanzsensors die x,y, und z Koordinaten im
Verhältnis zu dem Sensor zu berechnen.
Wenn beide Servos Mittelstellung haben, dann müssten x,y = 0 und z die
direkt vom Sensor gelesene Entfernung sein.
Die Servos lassen sich von -70° bis 70° drehen und mit Werten von 1 bis
255 Positionieren.
Die Winkel müssten sich so berechnen lassen:
alpha = (140°/254)*servo1-70°
beta = (140°/254)*servo2-70°
Mit nur einem Servo (2D) müsste sich z wie folgt ausrechen lassen:
z = cos(alpha)*l
Aber beim 3D Raum stehe ich irgendwie auf dem Schlauch.
Zur Veranschaulichung habe ich mal ein Bild als Anhang beigefügt.
Weiß jemand Rat?

von Peter (Gast)


Lesenswert?

Hallo,

hilft Dir das weiter?

relativer Abstand vom Sensor zum Objekt:

x^2+y^2+z^2 = l^2

x, y, z in Polarkoordinaten:

x=l*sin(theta)*cos(phi),
y=l*sin(theta)*sin(phi),
z=r*sin(phi),

wobei theta der Winkel gegenüber der z-achse ist und phi der winkel zur
x-Achse.

Jetzt musst Du noch eine Funktion für die Winkel in Abhängigkeit von
der Servostellung finden.

Hoffentlich stimmt's.

Grüße,
Peter

von Peter (Gast)


Lesenswert?

ist schon ein fehler drin:

z=l*sin(phi) statt z=r*sin(phi)

grüße

von Malte (Gast)


Angehängte Dateien:

Lesenswert?

Danke für deine Antwort.
>wobei theta der Winkel gegenüber der z-achse ist und phi der winkel
zur
>x-Achse.
Dies verstehe ich nicht so ganz. Theta ist demnach der Winkel zwischen
Servo 1 und der z Achse, das wäre dann mein als alpha angegebener
Winkel und demnach müsste dann phi der Winkel von Servo2 mit der
x-Achse angeben?
Aber wenn ich z=l*sin(phi) lese und z=l bei alpha und beta = 0° gilt,
so müsste demnach in phi beide Winkel irgendwie enthalten sein?

von Peter (Gast)


Lesenswert?

Ja, dürfte ich einen Fehler gemacht haben:

die Höhe z ist ja nicht von Deinem beta abhängig (also auch nicht von
phi)

sonst dürfte es aber stimmen

von Malte (Gast)


Lesenswert?

So, nachdem ich mir einen weiteren halben Tag trotz Hilfe von Peter den
Kopf darüber zerbrochen hatte ohne eine Lösung zu finden, habe ich es
mal mit Vektorrechnung versucht. Und siehe da nach zwei Stunden
rechnete der AVR die richigen Werte aus. :-D

Ich nehme erstmal z = 1 an. Da (tan alpha) = x/z und (tan beta) = y/z,
habe ich das dann in einen Vektor geschrieben (tan alpha;tan beta;1)
Daraus berechne ich dann den Einheitsvektor und multipliziere diesen
danach mit l. So ergeben sich dann x,y und z. Die berechneten x,y,z
Werte stimmen mit denen wenn ich mit dem Lineal nachmesse überein g

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.