Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Internet der Dinge-Technologie

ROS2 LiDAR-Daten mit RTI Recording Service und DDS wiedergeben

ROS2 LiDAR-Daten mit RTI Recording Service und DDS wiedergeben

Realwelt-Tests sind unverzichtbar für verteilte und autonome Systeme, können aber prohibitiv teuer sein. Durch Erfassen und Wiedergeben von Sensordaten können Teams dauerhaften Wert aus jeder Testsession generieren.

Stellen Sie sich ein semi-autonomes Fahrzeug vor, ausgestattet mit GPS, Kameras, LiDAR, RADAR, Inertialsensoren und einer vollständigen Suite von Kontrollsignalen. Das Datenvolumen während eines einzelnen Runs ist enorm, und die Kosten wiederholter On-Road-Trials sind hoch. Das Aufzeichnen dieser Daten für späteren Replay – im Grunde das Erstellen einer digitalen Bibliothek von Test-Sessions – würde Test-Wiederholbarkeit und Flexibilität dramatisch verbessern.

Seit Jahren haben DDS-Nutzer Zugriff auf High-Bandwidth Recording und Playback durch RTI Recording Service. Es unterstützt kontinuierliche 24/7-Erfassung aller Systemdaten während erweiterter Deployments, wie Seeversuche von Marineschiffen. Dank DDSs verteilter Architektur können mehrere Recording Service Instanzen gestartet werden, um mit massiven Datenströmen Schritt zu halten.

ROS2, das auf DDS für Inter-Prozess-Kommunikation basiert, kann denselben feldgetesteten Recording Service nutzen, um High-Bandwidth ROS2 Topics wie LiDAR Point Clouds zu erfassen. Im folgenden Beispiel richten wir ein moderates-Bandwidth Topic (ROS2 LiDAR Daten) ein und spielen es zurück in ROS2, wobei nur DDS-Tools verwendet werden.

Recorder Konfiguration

RTI Recording Service wird durch eine XML-Konfigurationsdatei gesteuert, die spezifiziert, welche Topics aufgezeichnet werden, gewünschte QoS-Settings und Speicheroptionen. In diesem Setup instruieren wir den Recorder, ROS2 PointCloud2 Daten als einzelne Spalte zu behandeln, um kostspielige Deserialisierung für diesen großen Datentyp zu vermeiden.

Unten ist die XML-Datei, die wir verwenden, genannt ros2_record.xml:

<dds xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://community.rti.com/schema/5.3.1/rti_record.xsd">

<recorder name="simple_example">
<!-- Enable remote access to RTI Recorder. The Recorder creates one
DataReader and one DataWriter in the specified domain. -->
<remote_access>
<enabled>true</enabled>
<remote_access_domain>0</remote_access_domain>
</remote_access>

<!-- Base name for the set of files that will store recorded data -->
<recorder_database>
<database_name>ros2_replay_example.dat</database_name>
<overwrite>true</overwrite>
</recorder_database>

<!-- Record data from one domain -->
<domain name="domain0">
<domain_id>0</domain_id>
<!-- Turn off deserialization for ROS2 ‘PointCloud2’ data type (over 5k elements) -->
<deserialize_mode>RTIDDS_DESERIALIZEMODE_NEVER</deserialize_mode>
</domain>

<!-- Create a TopicGroup that only records rt/velodyne_points topics -->
<topic_group name="ros-rt">
<topics><topic_expr>rt/velodyne_points</topic_expr></topics>
<field_expr>*</field_expr>
</topic_group>

<!-- Create a RecordGroup -->
<record_group name="RecordAll">
<!-- Specify which domains to record from -->
<domain_ref><element>domain0</element></domain_ref>
<!-- Specify which TopicGroups to record -->
<topic_ref><element>ros-rt</element></topic_ref>
</record_group>

<!-- Add domain and typecode info to record ROS2 ‘PointCloud2’ type -->
<domain_type_config>
<domain_group>
<element>
<domain_filter>
<element>domain0</element>
</domain_filter>
<type_config>
<xml>
<file_group>
<element>
<file_name>
<element>PointCloud2.xml</element>
</file_name>
<type>
<element>
<register_top_level>false</register_top_level>
<type_name>sensor_msgs::msg::dds_::PointCloud2_</type_name>
<registered_type_name>
<element>sensor_msgs::msg::dds_::PointCloud2_</element>
</registered_type_name>
<topics><element>rt/velodyne_points</element></topics>
</element>
</type>
<max_sequence>2147483647</max_sequence>
</element>
</file_group>
<path>
<element>.</element>
</path>
</xml>
</type_config>
</element>
</domain_group>
</domain_type_config>
</recorder>
</dds>

Um den Recording Service mit dieser Konfiguration zu starten, führen Sie folgenden Befehl aus dem Verzeichnis aus, das ros2_record.xml enthält:

rtirecord -cfgFile ros2_record.xml -cfgName simple_example

Der Service abonniert das LiDAR Topic und zeichnet kontinuierlich auf, bis Sie ihn stoppen. Die Ausgabe ist eine SQLite-Datenbank namens ros2_replay_example.dat_0_0. Nachfolgende Recording-Sessions hängen numerische Suffixe an den Dateinamen an, wodurch jede Datei innerhalb eines benutzerdefinierten Größenlimits bleibt.

Replayer Konfiguration

Mit den aufgezeichneten Daten können wir diese nun in eine ROS2-Umgebung zurückspielen. Frühere Blogposts hoben hervor, dass ROS2 einige QoS-Tweaks für nahtlose Interoperabilität benötigt. In diesem Beispiel unterdrücken wir Type-Code-Transmission, um der Standardkonfiguration von ROS2 „Bouncy Bolson“ (oder jedem ROS2 Release mit rmw_connext_cpp) zu entsprechen.

Die folgende XML-Datei, ros2_replay.xml, steuert den RTI Replay Service:

<?xml version="1.0"?>
<dds xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://community.rti.com/schema/5.3.1/rti_replay.xsd">

<!-- Example configuration for RTI Replay Service 2.0, tailored for ROS2 rt/* topics (PointCloud2) -->
<replay_service name="simple_example">
<annotation>
<documentation>Replay service example</documentation>
</annotation>
<time_control>
<rate>1</rate> <!-- Optional rate multiplier -->
<start_mode>AUTO</start_mode>
<start_offset><sec>5</sec></start_offset>
</time_control>

<!-- Source Database, Required -->
<replay_database name="simple_config">
<filename>ros2_replay_example.dat_0_0</filename>
<readonly>false</readonly>

<!-- Participant configuration. Suppress sending typeCode info (for ROS2) -->
<participant>
<domain_id>0</domain_id>
<participant_qos>
<resource_limits>
<type_code_max_serialized_length>0</type_code_max_serialized_length>
<type_object_max_serialized_length>0</type_object_max_serialized_length>
</resource_limits>
</participant_qos>
</participant>

<!-- Get typeCode info for playback (PointCloud2 type) -->
<type_config>
<xml>
<file_group>
<element>
<file_name>
<element>PointCloud2.xml</element>
</file_name>
<type>
<element>
<register_top_level>false</register_top_level>
<type_name>sensor_msgs::msg::dds_::PointCloud2_</type_name>
<registered_type_name>
<element>sensor_msgs::msg::dds_::PointCloud2_</element>
</registered_type_name>
<topics><element>rt/velodyne_points</element></topics>
</element>
</type>
<max_sequence>2147483647</max_sequence>
</element>
</file_group>
<path><element>.</element></path>
</xml>
</type_config>

<session name="A_Session">
<!-- Default values for <time_control> * -->
<replay_topic name="All_Topic">
<input>
<topic_name>*</topic_name>
<type_name>*</type_name>
<record_group_name>*</record_group_name>
<domain_name>*</domain_name>
</input>
</replay_topic>
</session>
</replay_database>
</replay_service>
</dds>

Um die aufgezeichneten Daten zurück in ROS2 zu spielen, ausführen:

rtireplay -cfgFile ros2_replay.xml -cfgName simple_example

Ergebnisse

Nach Aufzeichnung einer Serie von ROS2 LiDAR Sessions können die Daten on-demand wiedergegeben werden. Der folgende Screenshot demonstriert den wiedergegebenen Point Cloud innerhalb der ROS2-Umgebung:

ROS2 LiDAR-Daten mit RTI Recording Service und DDS wiedergeben

[1] [2]  >

Internet der Dinge-Technologie

  1. OpenDDS vs. RTI Connext DDS: Die richtige Data Distribution Service Lösung wählen
  2. MQTT vs. DDS: Das richtige M2M-Protokoll für IoT wählen
  3. Connext DDS im Industrial IoT: 5 Schlüsselerkenntnisse für Zuverlässigkeit, Sicherheit und Skalierbarkeit
  4. Die vierte industrielle Revolution: Wie Industry 4.0 die Fertigung neu formt
  5. Datenschutz-Compliance im Internet der Dinge sicherstellen
  6. Daten im Internet of Reliability nutzen: Strategien für effektives Management
  7. Demokratisierung des Internet der Dinge: Next-Gen Satelliten-IoT bringt universelle, bezahlbare Konnektivität
  8. Fünf aufkommende Konnektivitäts-Trends, die moderne Industrie formen
  9. Der definitive Guide zu den Top 10 Industrial IoT Plattformen (2024)
  10. Zukunft der Rechenzentren: Trends, Tech und Nachhaltigkeit