Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

ROS2 + DDS:een veldgids voor interoperabiliteit

Hoewel ROS 2 is ontworpen om DDS als connectiviteitsframework te gebruiken (zie mijn vorige blogpost - ROS 2 + DDS:When Ecosystems Merge voor meer informatie), heeft het integratieproces een paar eigenaardigheden die moeten worden opgevangen om een ​​puur DDS-systeem te krijgen om naadloos samen te werken met een ROS 2-systeem. Deze blog dient als een praktische veldgids voor interoperabiliteit en behandelt enkele van de bekende problemen vanaf de release van "Bouncy Bolson" (juli 2018) van ROS 2 en hoe deze te verhelpen.

Updates met ROS 2

ROS 2 is een evoluerend project. Er kunnen wijzigingen zijn in toekomstige ROS 2-releases die de interoperabiliteit verder beïnvloeden. Dat gezegd hebbende, onthoud altijd dat bij het gebruik van de rmw_connext_cpp laag onder ROS 2 - het is nog steeds Connext DDS. De kracht en flexibiliteit die inherent zijn aan de Connext-bibliotheken zijn nog steeds beschikbaar, met dezelfde methoden als een niet-ROS-implementatie. Je hebt controle over je systeem.

Hier is een overzicht van instellingen die de interoperabiliteit tussen pure DDS- en ROS 2-systemen kunnen beïnvloeden (ROS 2 "Bouncy Bolson" tenzij anders aangegeven):

Onderwerpnamen en partities

ROS 2 identificeert de naamruimte van de onderwerpgegevens door deze te coderen in de naam of DDS-partitie van het onderwerp. Onderwerpen met gebruikersgegevens bevinden zich in de naamruimte "rt" (ROS Topic), gecodeerd in DDS als:

Typen onderwerpgegevens

Wanneer u de Connext RMW-laag onder ROS2 gebruikt, is het u misschien opgevallen dat alle ROS2 "rt/*"-onderwerpen tijdens de ontdekking hetzelfde gegevenstype hebben:

Dit type definitie wordt ingevoegd door de ROS2 rmw_connext_cpp laag om een ​​serialisatie van de onderwerpgegevens weer te geven, ook al zijn de onderwerpgegevens ongewijzigd. Wanneer een verbinding wordt gemaakt met een DDS-onderwerp met behulp van het oorspronkelijke gegevenstype, treedt er een QoS-mismatch op, waardoor een verbinding wordt voorkomen.

De eenvoudigste oplossing is om deze typecode-aankondiging van de ROS2-deelnemers te onderdrukken. Dit kan worden gedaan door een USER_QOS_PROFILES.xml-bestand toe te voegen aan de map die wordt gebruikt om de ROS2-deelnemers te starten. Dit bestand bevat QoS-instellingen om typecode en het delen van typeobjecten te onderdrukken, zoals:

Merk op dat dit bestand ook de betrouwbaarheid instelt op "Best Effort" - dit is slechts een voorbeeldbeginpunt.

Merk ook op dat dit QoS-bestand alleen van invloed is op de ROS2-deelnemers die zijn gestart voor dezelfde map als het QoS-bestand. Indien nodig kan elke ROS2-deelnemer zijn eigen aangepaste QoS-bestand in een aparte map hebben.

Vervoerselectie

Het aansluiten van een DDS-systeem op een ROS2-systeem kan leiden tot waarschuwingen over niet-adresseerbare locators/transporten die niet zijn geïnstalleerd. Dit is het gevolg van het feit dat deelnemers verschillende lijsten met beschikbare transporten hebben, zoals deelnemer A(udpv4) die deelnemer B(udpv4, udpv6) ontdekt; Er wordt een waarschuwing gegeven dat deelnemer A geen verbinding kan maken via udpv6.

Transportselectie met Connext RMW onder ROS2 gebruikt dezelfde methoden als in een Connext-only systeem:

  1. Stel de toegestane transporten in het USER_QOS_PROFILES.xml-bestand in door toe te voegen aan de sectie , zoals in:

    UDPV4|SHMEM

  2. Stel de initiële peers in (en schakel multicast in/uit) door een "NDDS_DISCOVERY_PEERS"-bestand toe te voegen aan de map die wordt gebruikt om de toepassing te starten. Het platte-tekstbestand moet een door komma's gescheiden lijst bevatten van de gewenste peers voor detectie, zoals: localhost,192.168.1.12,shmem:// (dit voorbeeld schakelt multicast-detectie uit)

RMW-selectie in ROS2

Zorg ervoor dat u de omgevingsvariabele instelt om Connext te selecteren als de RMW-laag onder ROS2:

RMW_IMPLEMENTATION=rmw_connext_cpp

Dit kan ook worden doorgegeven via de opdrachtregel bij het starten van ROS2-applicaties, zoals in:

RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker

Onbeperkte ondersteuning

Sommige ROS2-onderwerpen gebruiken onbeperkte reeksen en tekenreeksen. DDS-applicaties die willen samenwerken met behulp van deze onderwerpen, moeten 'Unbounded Support' inschakelen in de DDS-codegenerator.

Vooruitkijken met RTI

Houd ons in de gaten voor het volgende artikel in deze serie, dat een cruciale (zij het tijdelijke) hiaat in de ROS2-reeks dekt:het opnemen en opnieuw afspelen van onderwerpgegevens.

Als u klaar bent om met het team van RTI aan de slag te gaan en uw communicatiesystemen te verbeteren, neem dan vandaag nog contact met ons op. Onze experts staan ​​klaar om u te helpen.


Internet of Things-technologie

  1. Gids voor lasermarkering
  2. Open DDS versus RTI DDS-software
  3. ROS2 + DDS:speel het opnieuw
  4. ROS2 + DDS-integratie:wanneer ecosystemen samensmelten | RTI
  5. Hoe Qt en DDS te integreren in een IoT-toepassing
  6. ROS Robot
  7. Gids voor snelle productie
  8. Op pad met IoT
  9. Industriële IoT Platform Buyers Guide
  10. Gids voor PCB-verstevigers
  11. Uw gids voor onderhoud en reparatie van zware machines