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:
- Stel de toegestane transporten in het USER_QOS_PROFILES.xml-bestand in door toe te voegen aan de sectie
, zoals in:
UDPV4|SHMEM
- 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
- Gids voor lasermarkering
- Open DDS versus RTI DDS-software
- ROS2 + DDS:speel het opnieuw
- ROS2 + DDS-integratie:wanneer ecosystemen samensmelten | RTI
- Hoe Qt en DDS te integreren in een IoT-toepassing
- ROS Robot
- Gids voor snelle productie
- Op pad met IoT
- Industriële IoT Platform Buyers Guide
- Gids voor PCB-verstevigers
- Uw gids voor onderhoud en reparatie van zware machines