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 + DDS:Ein Handbuch zur Interoperabilität

Obwohl ROS 2 darauf ausgelegt ist, DDS als Konnektivitäts-Framework zu verwenden (weitere Informationen finden Sie in meinem vorherigen Blogbeitrag - ROS 2 + DDS:When Ecosystems Merge), weist der Integrationsprozess einige Macken auf, die berücksichtigt werden müssen, damit ein reines DDS-System entsteht um nahtlos mit einem ROS 2-System zu interagieren. Dieser Blog dient als praktischer Leitfaden für die Interoperabilität und behandelt einige der bekannten Probleme seit der Veröffentlichung von „Bouncy Bolson“ (Juli 2018) von ROS 2 und wie sie behoben werden können.

Updates mit ROS 2

ROS 2 ist ein sich entwickelndes Projekt. Es kann Änderungen in zukünftigen ROS 2-Versionen geben, die die Interoperabilität weiter beeinträchtigen. Denken Sie jedoch immer daran, dass Sie bei der Verwendung von rmw_connext_cpp Layer unter ROS 2 – es ist immer noch Connext DDS. Die Leistungsfähigkeit und Flexibilität der Connext-Bibliotheken sind weiterhin verfügbar und verwenden dieselben Methoden wie eine Nicht-ROS-Implementierung. Sie haben die Kontrolle über Ihr System.

Hier ist eine Übersicht der Einstellungen, die die Interoperabilität zwischen reinen DDS- und ROS 2-Systemen (ROS 2 „Bouncy Bolson“ sofern nicht anders angegeben) beeinträchtigen können:

Themennamen und Partitionen

ROS 2 identifiziert den Namespace der Topic-Daten, indem es ihn in den Namen oder die DDS-Partition des Topics kodiert. Benutzerdatenthemen befinden sich im Namensraum „rt“ (ROS Topic), der in DDS wie folgt codiert ist:

Themendatentypen

Wenn Sie den Connext RMW-Layer unter ROS2 verwenden, ist Ihnen vielleicht aufgefallen, dass alle ROS2-„rt/*“-Themen während der Erkennung denselben Datentyp haben:

Diese Art von Definition wird von der ROS2-Schicht rmw_connext_cpp eingefügt, um eine Serialisierung der Topic-Daten darzustellen, obwohl die Topic-Daten unverändert sind. Wenn eine Verbindung mit einem DDS-Thema unter Verwendung des ursprünglichen Datentyps versucht wird, tritt eine QoS-Nichtübereinstimmung auf, die eine Verbindung verhindert.

Die einfachste Lösung besteht darin, diese Typcode-Ansage der ROS2-Teilnehmer zu unterdrücken. Dies kann durch Hinzufügen einer USER_QOS_PROFILES.xml-Datei zu dem Verzeichnis erfolgen, das zum Starten der ROS2-Teilnehmer verwendet wird. Diese Datei enthält QoS-Einstellungen, um die gemeinsame Nutzung von Typcode und Typobjekten zu unterdrücken, wie zum Beispiel:

Beachten Sie, dass diese Datei auch die Zuverlässigkeit auf „Best Effort“ setzt – dies ist nur ein beispielhafter Ausgangspunkt.

Beachten Sie auch, dass diese QoS-Datei nur die ROS2-Teilnehmer betrifft, die für dasselbe Verzeichnis wie die QoS-Datei gestartet wurden. Bei Bedarf könnte jeder ROS2-Teilnehmer seine eigene benutzerdefinierte QoS-Datei in einem separaten Verzeichnis haben.

Transportauswahl

Der Anschluss eines DDS-Systems an ein ROS2-System kann zu Warnungen über nicht installierte nicht adressierbare Locators/Transporte führen. Dies ist das Ergebnis davon, dass Teilnehmer unterschiedliche Listen verfügbarer Transporte haben, wie z. B. Teilnehmer A(udpv4), der Teilnehmer B(udpv4, udpv6) entdeckt; Es würde eine Warnung ausgegeben, dass Teilnehmer A keine Verbindung über udpv6 herstellen kann.

Die Transportauswahl mit Connext RMW unter ROS2 verwendet die gleichen Methoden wie in einem Connext-only-System:

  1. Legen Sie die zulässigen Transporte in der Datei USER_QOS_PROFILES.xml fest, indem Sie sie zum Abschnitt hinzufügen, wie in:

    UDPV4|SHMEM

  2. Legen Sie die anfänglichen Peers fest (und aktivieren / deaktivieren Sie Multicast), indem Sie eine Datei „NDDS_DISCOVERY_PEERS“ zum Verzeichnis hinzufügen, das zum Starten der Anwendung verwendet wird. Die Klartextdatei sollte eine durch Kommas getrennte Liste der gewünschten Peers für die Erkennung enthalten, wie zum Beispiel: localhost,192.168.1.12,shmem:// (dieses Beispiel deaktiviert die Multicast-Erkennung)

RMW-Auswahl in ROS2

Stellen Sie sicher, dass Sie die Umgebungsvariable so einstellen, dass Connext als RMW-Layer unter ROS2 ausgewählt wird:

RMW_IMPLEMENTATION=rmw_connext_cpp

Dies kann auch beim Starten von ROS2-Anwendungen über die Befehlszeile übergeben werden, wie in:

RMW_IMPLEMENTATION=rmw_connext_cpp ros2 demo_nodes_cpp-Talker ausführen

Unbegrenzte Unterstützung

Einige ROS2-Themen verwenden unbegrenzte Sequenzen und Strings. DDS-Anwendungen, die mithilfe dieser Themen zusammenarbeiten möchten, müssen im DDS-Code-Generator „Unbounded Support“ aktivieren.

Mit RTI nach vorne schauen

Bleiben Sie dran für den nächsten Artikel in dieser Serie, der eine entscheidende (wenn auch vorübergehende) Lücke in der ROS2-Reihe abdeckt:das Aufzeichnen und Wiedergeben von Themendaten.

Wenn Sie bereit sind, mit dem Team von RTI durchzustarten und Ihre Kommunikationssysteme zu verbessern, kontaktieren Sie uns noch heute. Unsere Experten sind bereit, Ihnen zu helfen.


Internet der Dinge-Technologie

  1. Leitfaden zur Laserbeschriftung
  2. Open DDS vs. RTI DDS-Software
  3. ROS2 + DDS:Spielen Sie es noch einmal
  4. ROS2 + DDS-Integration:Wenn Ökosysteme verschmelzen | RTI
  5. ROS-Roboter
  6. Leitfaden für die schnelle Herstellung
  7. Unterwegs mit IoT
  8. Leitfaden für Käufer von industriellen IoT-Plattformen
  9. Leitfaden zu PCB-Versteifungen
  10. Ihr Leitfaden für Außendienst und Reparatur von Schwermaschinen