YDLidar X4 Pro an Arduino

OP #7876219
Lesenswert?

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?

OP #7876274
Lesenswert?

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.

OP #7877222
Lesenswert?

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ß

#7877252
Lesenswert?

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.

OP #7877424
Lesenswert?

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.

#7877457
Lesenswert?

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

OP #7878413
Lesenswert?

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.

#7878465
Lesenswert?

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

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren