ROS2 + DDS:Spielen Sie es noch einmal
Real-World-Tests sind notwendig – und oft teuer – Teil der Schaffung verteilter und autonomer Systeme. Tests wurden entwickelt, um das System durch viele verschiedene Szenarien zu führen, und die Echtzeit-Datenerfassung kann aus diesen Tests einen dauerhaften Wert schaffen.
Denken Sie darüber nach, ein (semi-)autonomes Fahrzeug auf der Straße zu testen, das GPS, Kameras, LiDAR, RADAR, Beschleunigungsmesser, Gyroskope, Kompass, Tachometer, Kontrollsignale sowie Kartierung und Umgebung umfasst Daten. Das sind * viele * Daten ... und sehr teuer in der Anschaffung. Wäre es nicht schön, wenn all diese Daten für die On-Demand-Wiedergabe aufgezeichnet werden könnten, als würde ein tatsächlicher Test laufen? Was wäre, wenn Sie eine digitale Bibliothek jeder Testsitzung erstellen und diese bei der Wiedergabe ändern könnten – und dadurch noch wiederholbarere Testszenarien erstellen könnten?
Wussten Sie, dass DDS-Benutzer seit vielen Jahren mit dem RTI Recording Service aufzeichnen und wiedergeben mit hoher Bandbreite/hoher Kapazität? Ein beispielhafter Anwendungsfall für den RTI-Aufzeichnungsdienst wäre die kontinuierliche (24/7) Aufzeichnung aller Systemdaten während eines ausgedehnten Feldeinsatzes, wie z. B. bei einer Seeerprobung eines Marineschiffs. Aufzeichnungsbandbreite und -kapazität sind aufgrund der verteilten Natur von DDS nahezu unbegrenzt – mehrere Instanzen des Aufzeichnungsdienstes können gestartet werden, um mit der Datenflut Schritt zu halten.
Das ROS-Ökosystem hat seinen eigenen Aufnahmedienst namens Rosbag, aber zum jetzigen Zeitpunkt war Rosbag erst vor kurzem für ROS2 veröffentlicht worden. Glücklicherweise verwendet ROS2 DDS als zugrunde liegendes Konnektivitäts-Framework, daher sollte es einfach sein, den praxiserprobten RTI-Aufzeichnungsdienst zu verwenden, um Daten mit hoher Bandbreite von ROS2 zur jederzeitigen Wiedergabe aufzuzeichnen.
Lass uns das schaffen...
Rekorderkonfiguration
RTI Recording Service kann durch eine XML-Datei konfiguriert werden, um alle oder ausgewählte Themen mit den erforderlichen QoS-Einstellungen aufzuzeichnen. In diesem Beispiel werde ich ein Thema mit mittlerer Bandbreite (ROS2-LiDAR-Daten) aufzeichnen und es dann in ROS2 wiedergeben – alles aus einem reinen DDS-Toolset.
RTI Recording Service deserialisiert normalerweise die Daten für die Aufzeichnung in die Spalten einer herkömmlichen Datenbank. Die ROS2-LiDAR-Daten haben eine große Anzahl von Punkten pro Abtastung, daher werde ich den Rekorder in diesem Fall anweisen, die Daten nicht zu deserialisieren und als einzelne Spalte in der Datenbank aufzuzeichnen. Der Rest der XML-Datei teilt dem Rekorder mit, welches Thema und welcher Datentyp aufgezeichnet werden soll und wo die Daten gespeichert werden sollen.
Dies ist in einer von mir erstellten XML-Datei mit dem Namen „ros2_record.xml“ enthalten:
xsi:noNamespaceSchemaLocation="http://community.rti.com/schema/5.3.1/rti_record.xsd">
wahr
0
ros2_replay_example.dat
wahr
0
RTIDDS_DESERIALIZEMODE_NIE
rt/velodyne_points
*
domain0
ros-rt
domain0
PointCloud2.xml
falsch
sensor_msgs::msg::dds_::PointCloud2_
sensor_msgs::msg::dds_::PointCloud2_
rt/velodyne_points
2147483647
.
Um den RTI Recording Service mit der obigen XML-Datei zu starten, verwende ich den folgenden Befehl (ausgeführt aus demselben Verzeichnis wie die obige XML-Datei):
rtirecord -cfgFile ros2_record.xml -cfgName simple_example
Dadurch wird der Aufzeichnungsdienst gestartet, der die LiDAR-Daten abonniert und kontinuierlich aufzeichnet, bis ich das Programm schließe. Das Endergebnis ist eine SQLite-Datenbankdatei namens „ros2_replay_example.dat_0_0“
Zahlen werden an den Dateinamen angehängt, um zwischen Aufzeichnungssitzungen (die erste Zahl) und welcher Datenbankdatei in einer Sequenz zu unterscheiden (die Dateien werden automatisch auf eine vom Benutzer wählbare begrenzt) Größe; wenn sie zu groß werden, werden sie geschlossen und eine andere Datei wird geöffnet, um die nächste Datenperiode aufzunehmen. Dies verhindert, dass die Datenbankdateien zu groß werden).
Replayer-Konfiguration
Da ich nun die ROS2-LiDAR-Daten aufgezeichnet habe, wollen wir sehen, ob sie in ROS2 wiedergegeben werden können.
Wie in früheren Blog-Artikeln (A Field Guide to Interoperability and When Ecosystems Merge) erwähnt, erfordert ROS2 einige Einstellungen, um die Kompatibilität sicherzustellen. In diesem Beispiel wurde das Senden der Typcodeinformationen während der Erkennung unterdrückt, um mit der Standardkonfiguration der ROS2-Version „Bouncy Bolson“ kompatibel zu sein, aber diese Anpassung könnte auch in ROS2 vorgenommen werden, wenn rmw_connext_cpp
ausgeführt wird als RMW-Schicht.
Diese Einstellungen – zusammen mit Themen-, Domänen- und Dateiinformationen – werden in einer anderen XML-Datei abgelegt:
xsi:noNamespaceSchemaLocation="http://community.rti.com/schema/5.3.1/rti_replay.xsd">
Anmerkung>
Beispiel für einen Wiedergabedienst
1
AUTO
5
ros2_replay_example.dat_0_0
falsch
0
0
0
PointCloud2.xml
falsch
sensor_msgs::msg::dds_::PointCloud2_
sensor_msgs::msg::dds_::PointCloud2_
rt/velodyne_points
2147483647
. Einführung des IIC, jetzt mit OpenFog! Tauchen Sie ein in unsere Top-Inhalte für den Erfolg im industriellen IoT (in 2019 und darüber hinaus)
Internet der Dinge-Technologie
- Open DDS vs. RTI DDS-Software
- MQTT und DDS:Machine-to-Machine-Kommunikation im IoT
- Connext DDS und das industrielle IoT:Die 5 wichtigsten Dinge, die Sie wissen sollten
- Die vierte industrielle Revolution
- Datenkonform im IoT bleiben
- Was mache ich mit den Daten?!
- Demokratisierung des IoT
- 5 Trends in der Konnektivität
- Top 10 der IIoT-Plattformen
- Die Zukunft der Rechenzentren