WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Algorithmus, um aus 3D-Punktwolke Steigung zu berechnen

 

Nummi
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2021, 13:51     Titel: Algorithmus, um aus 3D-Punktwolke Steigung zu berechnen
  Antworten mit Zitat      
Hallo zusammen
Ich arbeite zur Zeit an folgendem Problem:
Ich habe durch einen LiDAR-Sensor Daten generiert, die nun eine 3D-Punktwolke bilden. Die Form ist ähnlich wie ein Trichter (siehe Abb)
Nun will ich anhand dieser Punktwolke die Steigung innerhalb des Trichters mit Hilfe eines Algorithmus berechnen. Das Ziel ist, dass man eine neue Punktwolke einlesen kann und der Algorithmus auch an dieser die Steigung bestimmen kann.
Ich habe leider relativ wenig Erfahrung in diesem Gebiet und um jeden Hinweis sehr dankbar.

Freundliche Grüsse
IG

Screenshot 2021-12-01 134931.png
 Beschreibung:
So sehen die Daten etwa aus. Gesucht ist die Steigung des Trichters in der Mitte

Download
 Dateiname:  Screenshot 2021-12-01 134931.png
 Dateigröße:  119.15 KB
 Heruntergeladen:  191 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2021, 15:35     Titel:
  Antworten mit Zitat      
Hallo,

ich hätte erst mal ein paar Fragen:
wie liegen die Daten denn vor? Als Matrix mit 3 Spalten oder irgendwie anders?
Sind die Daten auf einem regelmäßigen Gitter von x- und y-Werten aufgezeichnet?
Wenn du einen Beispieldatensatz zur Verfügung stellen kannst, wäre das hilfreich.

Die Steigung muss ja je nach Richtung nicht gleich sein, oder gehst du davon aus, dass sie das ist? Willst du dann eine bestimmte Richtung herausgreifen, z.B. y = Zentrum das Trichters festhalten und dann die x-z - Kurve als Querschnitt betrachten? Geht natürlich auch mit x und y vertauscht, oder (etwas komplizierter) in jeder anderen Richtung.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nummi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2021, 15:49     Titel:
  Antworten mit Zitat      
Hallo Harald
Die Daten liegen als txt-File vor mit drei Spalten (x-, y-, z-Werte). Diese habe ich in Matlab eingelesen und mittels "ptCloud" eine Punktwolke generiert. Die txt-Datei habe ich dir beigelegt.

Die Steigung ist in der Tat nicht in alle Richtungen gleich. Ich sollte aber die Steigungen in sämtliche Richtungen auslesen können. (Richtungen können auch grob unterteilt werden, z.B. mit Winkelangaben)

Grüsse
IG

PS: so habe ich die Punktwolke aus den vorhandenen Daten generiert:

Code:

dat1 = load('Messung_4_Rotation.txt');
ptCloud = pointCloud(dat1);
ptCloud
pcshow(ptCloud)
daspect([1 1 4])


Messung_4_Rotation.txt
 Beschreibung:

Download
 Dateiname:  Messung_4_Rotation.txt
 Dateigröße:  216.56 KB
 Heruntergeladen:  199 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2021, 16:41     Titel:
  Antworten mit Zitat      
Hallo,

die Unterteilung nach Winkeln ist recht gut möglich, da die Daten sehr schön im Abstand von 5 Grad aufgezeichnet sind, wie man an uWinkel sieht.
Code:
M = readmatrix("Messung_4_Rotation.txt");
winkel = round(atan2d(M(:,2), M(:,1)), 2);
uWinkel = unique(winkel);
r = round(sqrt(M(:,1).^2 + M(:,2).^2),2);

Ich habe mal einen Querschnitt herausgezogen.
Code:
plot(r(winkel == 0), M(winkel == 0,3), "bo")
hold on
plot(-r(winkel == 180), M(winkel == 180,3), "bo")
hold off

Wenn du reinzoomst, siehst du, dass es aus dem Trichter hinauslaufend je zwei Messungen gibt.
Zudem gibt es für den Mittelpunkt insgesamt 37 Messungen:
Code:
sum(M(:,1) == 0 & M(:,2) == 0)

die zwischen -2188 und -2196 liegen.
Code:
unique(M(M(:,1) == 0 & M(:,2) == 0, 3))


Bei Winkel 90 und -90 besteht zwar kein Problem mit doppelten Messungen. Da sieht es aber so aus, als ob der Trichtertiefpunkt gar nicht im Zentrum liegt. Zudem erscheint mir der Trichter da fast schon parabelförmig, also Steigung 0 im Tiefpunkt. Ist es da sinnvoll, eine Steigung zu berechnen?

Wenn man sich mal auf Punkte festgelegt hat, mit denen man die Steigung berechnen möchte, würde ich dz/dr als Näherung berechnen.

Eine Iteration in 5-Grad-Schritten sollte dann auch machbar sein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nummi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2021, 11:09     Titel:
  Antworten mit Zitat      
Das mit den zwei Messungen bei 0°, bzw. 180° ist ein Fehler meinerseits, es sollte nur eine Messung sein.
Es kann durchaus sein, dass eine Parabel entsteht. Die Steigung, die mich interessiert ist jene, die von der oberen Kante beginnt (siehe Abb). Mein Gedanke ist, dass ich von der Kante nach unten eine gewisse Anzahl an Messpunkte nehme und mit diesen die Steigung berechne. Die Frage ist aber noch, wie es diese Kante von selbst erkennen soll. Schlussendlich sollte ich eine Punktwolke einlesen können, den Algorithmus laufen lassen und so an die gewünschte Steigung kommen.

Gruss IG

Screenshot 2021-12-02 110407.png
 Beschreibung:

Download
 Dateiname:  Screenshot 2021-12-02 110407.png
 Dateigröße:  23.94 KB
 Heruntergeladen:  188 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.12.2021, 15:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
jene, die von der oberen Kante beginnt (siehe Abb)

Das ist für mich noch nicht recht eindeutig. Über dieser Kante gibt es ja noch eine, warum nicht diese? Was, wenn es gar keine solche Kante gibt?

Zitat:
Die Frage ist aber noch, wie es diese Kante von selbst erkennen soll.

Allerdings, zumal diese Kante für mich nicht mal eindeutig ist.

Zitat:
Das mit den zwei Messungen bei 0°, bzw. 180° ist ein Fehler meinerseits, es sollte nur eine Messung sein.

Bei weiteren Fragen dann bitte auch den korrigierten Datensatz zur Verfügung stellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.