Skip to content

Commit b0a4917

Browse files
committed
Final version of L10
1 parent 3f052cd commit b0a4917

File tree

3 files changed

+40
-21
lines changed

3 files changed

+40
-21
lines changed

10_Sensordatenverarbeitung.md

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -656,13 +656,20 @@ Eine knappe Einführung in die Grundlagen der Datenfusion folgt in der kommenden
656656

657657
> __Achtung:__ Die nachfolgende Erläuterung bezieht sich auf die ROS1 Implementierung. Unter ROS2 ist die Implementierung der entsprechenden Pakete noch nicht abgeschlosssen.
658658
659+
Wie werden Laserscanner-Informationen unter ROS abgebildet? Schauen wir uns dies an einem realen Beispiel an. Ein zugehöriges Bag-File finden Sie im `data` Ordner dieses Kurses.
660+
661+
![RoboterSystem](./img/10_Sensordatenvorverarbeitung/LaserScanner.png)<!-- style="width:60%; max-width:300px; min-width:600px"-->
662+
663+
Eine Kurz-Dokumentation einer häufig genutzen Scanners vom Typ Hokuyo URG04 finden Sie unter [Link](https://www.robotshop.com/media/files/pdf/hokuyo-urg-04lx-ug01-specifications.pdf)
664+
665+
### Transformationen mit tf
666+
659667
{{0-1}}
660668
********************************************************************************
661-
__tf__
662669

663670
Die Handhabung der unterschiedlichen Koordinatensystem in ROS1 ist über das `tf`-verteitle System gelöst.
664671

665-
![RoboterSystem](./img/10_Sensordatenvorverarbeitung/Coordsystems.png)<!-- width="80%" -->
672+
![RoboterSystem](./img/10_Sensordatenvorverarbeitung/Coordsystems.png)<!-- style="width:60%; max-width:300px; min-width:600px"-->
666673

667674
_Darstellung verschiedener Koordinatensysteme innerhalb eines Roboterszenarios (Autor Bo im ROS Forum unter [answers.ros.org](https://answers.ros.org/question/265846/how-to-build-tf-topic-frame-tree-for-hector_slam-or-gmapping/))_
668675

@@ -679,13 +686,22 @@ time stamp
679686
#Frame this data is associated with
680687
string frame_id
681688
```
689+
********************************************************************************
690+
691+
{{1-3}}
692+
********************************************************************************
682693

683694
Dabei werden die Relationen zwischen den Koordinatensystemen über eigene Publisher und Listener ausgetauscht. Am Ende bildet jede Applikation eine Baumstruktur aus den Transformationen zwischen den Frames. Isolierte Frames können entsprechend nicht in Verbindung mit anderen gesetzt werden.
684695

685-
![RoboterSystem](./img/10_Sensordatenvorverarbeitung/view_frames.png)<!-- min-width="333px" max-width="700px" "width: 60%" -->
696+
![RoboterSystem](./img/10_Sensordatenvorverarbeitung/view_frames.png)<!-- style="width:60%; max-width:300px; min-width:600px"-->
686697

687698
_Beispielhafte Darstellung des tf-Trees eines ROS-Turtle Szenarios, das zwei Turtle umfasst. Die individuellen Posen werden jeweils gegenüber den globalen `world`-Frame beschrieben._
688699

700+
********************************************************************************
701+
702+
{{2-3}}
703+
********************************************************************************
704+
689705
Nehmen wir nun an, dass wir die Positionsinformation von `turtle2` im Koordindatensystem von `turtle1` darstellen wollen, um zum Beispiel eine Richtungsangabe zu bestimmen. Dafür subscrbieren wir uns für deren
690706

691707
```cpp MessageTfTransform.cpp
@@ -739,19 +755,23 @@ int main(int argc, char ** argv)
739755
};
740756
```
741757
742-
********************************************************************************
743-
744-
{{1-2}}
745-
********************************************************************************
758+
```
759+
point of turtle 3 in frame of turtle 1 Position(x:-0.603264 y:4.276489 z:0.000000)
760+
point of turtle 3 in frame of turtle 1 Position(x:-0.598923 y:4.291888 z:0.000000)
761+
point of turtle 3 in frame of turtle 1 Position(x:-0.594828 y:4.307356 z:0.000000)
762+
point of turtle 3 in frame of turtle 1 Position(x:-0.590981 y:4.322886 z:0.000000)
763+
```
746764
747765
Die aktuell größte Einschränkung des ROS tf-Konzeptes ist das Fehlen einer Unsicherheitsdarstellung für die Relationen.
748766
749-
__laser-filters__
767+
********************************************************************************
768+
769+
### Anwendung laser-filters
750770
751771
Der primäre Inhalt des `laser_filters`-Pakets [(Link)](http://wiki.ros.org/laser_filters) besteht aus einer Reihe von Filtern und Transformationsalgorithem für Laserscanner-Rohdaten. Der Anwender konfiguriert dabei die Parameter der Filter in einem Beschreibungsfile, die eigentliche Ausführung übernehmen zwei Knoten, die dann mehrere Filter nacheinander ausführen. Der `scan_to_scan_filter_chain` Knoten wendet eine Reihe von Filtern auf einen `sensor_msgs/LaserScan` an. Die `scan_to_cloud_filter_chain` implementiert zunächst eine Reihe von Filtern auf einen `sensor_msgs/LaserScan` an, wandelt ihn in einen `sensor_msgs/PointCloud` um und wendet dann eine Reihe von Filtern auf den `sensor_msgs/PointCloud` an.
752772
753773
<!--
754-
style="width: 100%; max-width: 900px; display: block; margin-left: auto; margin-right: auto;"
774+
style="width: 80%; max-width: 900px; display: block; margin-left: auto; margin-right: auto;"
755775
-->
756776
```ascii
757777
my_laser_config.yaml:
@@ -770,7 +790,7 @@ style="width: 100%; max-width: 900px; display: block; margin-left: auto; margin-
770790
scan_to_cloud_chain v v v
771791
╔══════════════════════════════════════════════════════════════════════════════╗
772792
║ +---------------------------------------------------+ ║
773-
║ | filter_chain<sensor_msgs::LaserScan> | ║
793+
║ | filter_chain mit sensor_msgs::LaserScan | ║
774794
║ +-----------------+ | +----------------+ +---------------+ | ║
775795
scan ║ | | | | | | | | ║ scan_filtered
776796
------>|tf-Messagefilter |----->| Scan filter 1 |--> .... --> |Scan filter N | |------>
@@ -780,7 +800,7 @@ style="width: 100%; max-width: 900px; display: block; margin-left: auto; margin-
780800
tf data ║ | | ║
781801
--------------. .----------------------------------------------------. ║
782802
║ | | +---------------------------------------------------+ ║
783-
║ v v | filter_chain<sensor_msgs::PointCloud> | ║
803+
║ v v | filter_chain mit sensor_msgs::PointCloud | ║
784804
║ +-----------------+ | +----------------+ +---------------+ | ║
785805
║ | | | | | | | | ║ cloud_filtered
786806
║ |LaserProjection |----->| Cloud filter 1 | |Cloud filter N | |------>
@@ -809,16 +829,15 @@ scan_filter_chain:
809829

810830
Dabei sind folgende Filtertypen in das Konzept eingebettet:
811831

812-
| Bezeichnung | Bedeutung |
813-
| ------------------------------------- | --------- |
814-
| `LaserArrayFilter` | |
815-
| `ScanShadowsFilter` | |
816-
| `InterpolationFilter` | |
817-
| `LaserScanIntensityFilter` | |
818-
| `LaserScanRangeFilter` | |
819-
| `LaserScanAngularBoundsFilter` | |
820-
| `LaserScanAngularBoundsFilterInPlace` | |
821-
| `LaserScanBoxFilter` | |
832+
| Bezeichnung | Bedeutung |
833+
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
834+
| `ScanShadowsFilter` | eleminiert Geisterreflexionen beim Scannen von Objektkanten. |
835+
| `InterpolationFilter` | interpoliert Punkte für ungültige Messungen |
836+
| `LaserScanIntensityFilter` | filtered anhand der Intensität des reflektierten Laserimpulses |
837+
| `LaserScanRangeFilter` | beschränkt die Reichweite |
838+
| `LaserScanAngularBoundsFilter` | entfernt Punkte, die außerhalb bestimmter Winkelgrenzen liegen, indem der minimale und maximale Winkel geändert wird. |
839+
| `LaserScanAngularBoundsFilterInPlace` | überschreibt Werte außerhalb der angegebenen Winkellage mit einem Distanzwert außerhalb der maximalen Reichweite |
840+
| `LaserScanBoxFilter` | selektiert Messungen, die in einem bestimmten kartesischen Raum liegen. |
822841

823842

824843
********************************************************************************

data/LaserScanner.bag

607 KB
Binary file not shown.
135 KB
Loading

0 commit comments

Comments
 (0)