Ich möchte ein Lidar betreiben und habe hier einen X4 Pro (ist wohl ähnlich dem X4 aber ohne Dateneingang). Er sendet einfach Daten bei Spannung. Im Web finde ich ein paar (wenig überzeugende) Beispiele. Die nutzen aber aus irgendeinem Grund immer einen ESP32. Ich kann mir die Daten in einem Terminal (128000 Baud) ansehen aber erkenne keine Struktur. Das DEVELOPMENT MANUAL ist mir dabei auch keine Hilfe. Irgendwie habe ich auch nur wenig Lust, die Berechnungen etc. neu zu erfinden aber ich komme nicht weiter. Hat jemand da vielleicht schon erfolgreich Gehirnschmalz reingesteckt?
Jürgen schrieb: > DLidar X4 Pro an Arduino Arduino ist ja Allround.. man kann meist den selben Code für einen mini Atmega oder für einen ESP32 kompilieren. Es bleibt Arduino.
Aber die größeren haben zwei UART in Hardware. Und darauf bauen die Bibliotheken auf. Aber das ist nicht, was ich brauche. Hier steht irgendwas von wegen "excludes AVR-based boards like Arduino UNO due to dependency on <map> library" und mit https://github.com/wtfiAndrewNelson/ydLidarX4_arduino/tree/main komme ich auch nicht zurecht. Ich habe zwar erste Erfolge aber keine Durchschlagenden. Die Funktion liefert zwar ein paar Daten zum Modul (Firmware und Seriennummer etc. aber ab dem health-Status steigt sie aus und ich komme nicht weiter.
Jürgen schrieb: > Irgendwie habe ich auch nur wenig Lust, die Berechnungen etc. neu zu > erfinden Andere Beschäftigung suchen anstatt mit "wenig Lust" etwas zusammenkopieren zu wollen. Philipp K. schrieb: > Arduino ist ja Allround.. man kann meist den selben Code für einen mini > Atmega oder für einen ESP32 kompilieren. Blödsinn, man kann manchmal den selben Code ...
Manfred P. schrieb: > Andere Beschäftigung suchen anstatt mit "wenig Lust" etwas > zusammenkopieren zu wollen. Wenn's doch so einfach wäre... Inzwischen habe ich diese Library gefunden: https://github.com/robopeak/rplidar_arduino Leider ohne Info, auf welches Modell sich die bezieht. Aber es können immerhin Daten vom X4 empfangen und verwurschtet werden.
1 | Distanz - Winkel - startBit - Quality |
2 | 6952.50 - 178.67 - 1 - 18 |
3 | 14768.00 - 212.78 - 1 - 22 |
4 | 13386.00 - 16.66 - 0 - 42 |
5 | 6429.50 - 245.47 - 0 - 26 |
6 | 2762.00 - 288.66 - 0 - 42 |
7 | 9159.25 - 276.66 - 0 - 42 |
8 | 12026.25 - 79.66 - 0 - 42 |
9 | 5902.50 - 33.63 - 0 - 33 |
10 | 14968.75 - 463.61 - 0 - 1 |
11 | 4416.25 - 454.66 - 0 - 42 |
12 | 6130.25 - 340.53 - 0 - 42 |
13 | 11329.75 - 144.66 - 0 - 42 |
14 | 1365.75 - 215.30 - 0 - 58 |
15 | 11722.00 - 68.66 - 0 - 42 |
16 | 13688.50 - 18.84 - 1 - 43 |
17 | 2122.00 - 204.66 - 0 - 42 |
18 | 4965.50 - 83.89 - 0 - 6 |
19 | 5450.00 - 4.66 - 0 - 42 |
20 | 4846.00 - 116.78 - 0 - 10 |
21 | 4880.75 - 104.02 - 1 - 46 |
22 | 8897.50 - 144.66 - 0 - 42 |
23 | 15562.00 - 128.66 - 0 - 42 |
24 | 27.50 - 394.83 - 1 - 51 |
25 | 8352.50 - 0.00 - 0 - 0 |
26 | 13827.25 - 57.66 - 1 - 35 |
27 | 1354.00 - 277.66 - 0 - 42 |
28 | 0.00 - 0.00 - 0 - 17 |
29 | 3140.50 - 116.66 - 0 - 42 |
30 | 9217.00 - 130.03 - 1 - 54 |
31 | 9962.00 - 485.66 - 0 - 42 |
32 | 0.00 - 0.50 - 1 - 29 |
Allerdings fehlen mir doch noch Kenntnisse vom Protokoll. Und ich weiß nicht, ob die Daten Sinn machen. Auch nicht, was startBit und Quality für eine Aussage haben. Die Entfernungen sind in mm aber wohl zu groß
Jürgen schrieb: > Allerdings fehlen mir doch noch Kenntnisse vom Protokoll. Und ich weiß > nicht, ob die Daten Sinn machen. Auch nicht, was startBit und Quality > für eine Aussage haben. Die Entfernungen sind in mm aber wohl zu groß Um mal das Development Manual zu zitieren: 5.1 Start Bit Analysis When CT[bit(0)]=1 is detected, it indicates that the packet data is the start data packet, which indicates the beginning of a round of data. In the data packet, LSN=1, that is, the number of Si is 1. For the specific value analysis of the distance and angle, please refer to the following; When CT[bit(0)]=0 is detected, it indicates that the packet data is a point cloud data packet; Zur Qualität steht da nichts drin, aber der Code ist ja auch für ein anderes Lidar (RPLidar) gedacht. Meistens ist die Qualität einfach ein Maß für die Reflektivität. Je mehr Licht Reflektiert wird, desto genauer ist die Messung.
Markus K. schrieb: > 5.1 Start Bit Analysis Leider ist das für mich völlig unklar, was damit gemeint ist. Will ich cloud data packets oder nur, wenn das Bit 1 ist??? Und wieso sind die Entfernungen so groß 9962.00 macht in mm keinen Sinn in meiner Umgebung und die WInkel >360? Möchte doch nur ein paar Daten, wie es rund um den Sensor so aussieht. Wieso hat das noch keine entwickelt oder wenigstens was Verständliches zu geschrieben? Grummel.
Irgendwie vermittelst du das Gefühl, daß das LIDAR und du keine Freunde mehr werden. Wie wärs mit einem Zollstock? Oliver
Moin Jürgen, du wirst nicht umhin kommen, den Datenstrom zu analysieren und die zu den jeweiligen Winkeln gemessenen Entfernungen zu errechnen. Grundsätzlich gilt, dass nach der Initialisierung der Header einer "Datenrunde" mit der Bytefolge A5 5A beginnt. Danach musst du prüfen, ob das CT Bit = 01 ist, ansonsten folgt keine Punktwolke. Aus den weiteren Bytes des Headers lassen sich dann Anfangs- und Endwinkel errechnen, denen dann die in der Folge gesendeten Entfernungsdaten zugeordnet werden können. Programmtechnisch lässt sich das z.B. mittels Ringbuffer, Array oder Struct lösen. Die Details dazu sind unter Ziff. 5 des Development Manuals dargestellt. Ob Arduino oder ESP32 spielt im Prinzip keine Rolle. Ich hatte mich für den ESP entschieden. Der bietet wegen Bluetooth an Bord mehr Möglichkeiten und auch der vom Lidar gelieferte High-Pegel von 3,3 V kommt dem ESP entgegen. Wilfried
Danke. Wenn CT != 1, dann kommen also einzelne Punkte? Die Punktwolke stellt eine Sammlung der intern ermittelten Daten dar und enthält mehr Daten, als einzelne Punkte, die nur sporadisch gesendet werden?
Hallo Jürgen, die Frage kann ich dir nicht konkret beantworten, weil ich bei meiner Anwendung die nachfolgenden Daten nur verarbeitet habe, wenn das Nullbit von CT = 1 ist. Wilfried
Ist deine Bibliothek irgendwo öffentlich? Wenn ich mir bspw. https://github.com/EAIBOT/ydlidar_arduino/tree/master anschaue, dann wertet das auch nur bei CT=1 aus. Aber dann wird nur ein Punkt ausgegeben und keine Wolke - als in meinem Verständnis ein Array oder so - ausgegeben. Mit der Library komme ich so halbwegs zurecht. Die macht halt mehr - u. a. Befehle an den Lidar senden, was der Pro nicht kann. Aber als Ergebnis bekomme ich viel weniger Punkte und eher sporadisch, als mit der PC-Anwendung von EAI.
Hallo Jürgen, ich habe mal meinen Sketch angehängt, dar allerdings noch nicht ganz fertig ist. Bei schönem Wetter lockt der Garten zu sehr ... Du wirst sehen, dass ich gar nicht nach dem CT Nullbit selektiere, da dieses im unmittelbaren Zusammenhang mit dem LSN - Byte steht. Wenn das CT Nullbit = 0 ist, dass ist das LSN - Byte auch null (oder 1 ?) und es werden keine Winkel- und Entfernungswerte in das jeweilige Array geschrieben. Wilfried
Hallo Jürgen, so ist es, wenn mann sich mit dem eigenen Code nicht mehr auskennt ... Die Selektion nach dem CT- Nullbit findet in Zeile 112 des Hauptprogramms statt: --> if (header[2] == 1) Man wird alt ... Wilfried
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.