Forum: Mikrocontroller und Digitale Elektronik YDLidar X4 Pro an Arduino


von Jürgen (derkleinemuck)


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?

von Philipp K. (philipp_k59)


Lesenswert?

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.

von Jürgen (derkleinemuck)


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.

von Manfred P. (pruckelfred)


Lesenswert?

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 ...

von Jürgen (derkleinemuck)


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ß

von Markus K. (markus-)


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.

von Jürgen (derkleinemuck)


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.

von Oliver S. (oliverso)


Lesenswert?

Irgendwie vermittelst du das Gefühl, daß das LIDAR und du keine Freunde 
mehr werden. Wie wärs mit einem Zollstock?

Oliver

von Wilfried (schnedermann)


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

von Jürgen (derkleinemuck)


Lesenswert?

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?

von Wilfried (schnedermann)


Lesenswert?

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

von Jürgen (derkleinemuck)


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.

von Wilfried (schnedermann)


Angehängte Dateien:

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

von Wilfried (schnedermann)


Lesenswert?

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

von Jürgen (derkleinemuck)


Lesenswert?

Danke. Ich werde es mir mal ansehen.

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.