De afgelopen jaren heeft het vakgebied van de robotica een enorme vooruitgang gezien en nieuwe technologieรซn aangenomen. Eรฉn daarvan is ROS2 (Robot Operating System 2), een open-source middleware-framework dat tools, bibliotheken en conventies biedt voor het ontwikkelen, testen en onderhouden van robots-applicaties. Dit artikel gaat in op het toevoegen van servicebestanden aan een ROS2-pakket met behulp van setup.py, een essentiรซle vaardigheid voor ontwikkelaars die met dit platform werken. We beginnen met een korte introductie, presenteren een oplossing voor het probleem, leiden u door een stapsgewijze handleiding en bespreken gerelateerde onderwerpen voor een beter begrip.
Het opzetten van een servicebestand in het ROS2-pakket omvat twee hoofdstappen: het maken van een serviceberichtdefinitiebestand (.srv) en het toevoegen van de benodigde configuraties in de bestanden package.xml en setup.py. In deze zelfstudie maken we een eenvoudige service die een invoertekenreeks gebruikt en de lengte van de opgegeven invoer retourneert.
Laten we eerst onze werkruimte voorbereiden. Maak een ROS2-pakket met de naam โstring_length_serviceโ met de volgende opdracht:
''
ros2 pkg create โbuild-type ament_python string_length_service
''
Maak nu een map met de naam โsrvโ in het pakket โstring_length_serviceโ om ons serviceberichtdefinitiebestand op te slaan:
''
mkdir srv
''
Maak in de map โsrvโ een bestand met de naam โStringLength.srvโ met de volgende inhoud:
''
tekenreeks invoer_tekenreeks
-
int64 lengte
''
Zorg ervoor dat u in het bestand package.xml de benodigde afhankelijkheden toevoegt:
โ`xml
''
Laten we nu naar het kerngedeelte van dit artikel gaan: het toevoegen van servicebestanden in setup.py. Open het bestand โsetup.pyโ en voeg de volgende code toe:
"`python'
van setuptools import setup
van glob import glob
pakketnaam = 'string_length_service'
opgericht(
naam=pakketnaam,
versie='0.0.0โฒ,
pakketten=[pakketnaam],
data_files=[
('share/ament_index/resource_index/packages',
['bron/' + pakketnaam]),
('share/' + pakketnaam, ['pakket.xml']),
('share/' + pakketnaam, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe=Waar,
beheerder='ontwikkelaar_naam_hier',
beheerder_email='ontwikkelaar_email_hier',
description='Een dienst voor het berekenen van de stringlengte',
licentie='MIT',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'string_length_server = ' + pakketnaam + '.string_length_server:main',
'string_length_client = ' + pakketnaam + '.string_length_client:main',
],
},
)
''
Laten we nu bespreken wat deze code doet: Het setup.py-bestand gebruikt setuptools om ons pakket te distribueren en te beheren. De pakketnaamvariabele bevat de naam van ons pakket. De lijst data_files specificeert de noodzakelijke bron-, package.xml- en servicebestanden die samen met het pakket moeten worden gedistribueerd. install_requires vermeldt de vereiste pakketten, en entry_points definieert de uitvoerbare bestanden van onze service. Zorg ervoor dat u 'developer_name_here' en 'developer_email_here' vervangt door de juiste waarden.
Rclpy en std_srvs gebruiken
Na het instellen van de servicebestanden in setup.py is het noodzakelijk om de server- en clientcode te implementeren met behulp van de ROS2 Python Client Library, rclpy en std_srvs voor de standaard servicetypen.
Maak de bestanden โstring_length_server.pyโ en โstring_length_client.pyโ aan in uw pakketmap en implementeer de server- en clientcode. Details over het schrijven van server- en clientcode vindt u in de ROS2-documentatie.
Het bouwen en testen van de service
Bouw en test ten slotte uw pakket met behulp van de volgende opdrachten:
''
bron /opt/ros/foxy/setup.bash
colcon build โpakketten-selecteer string_length_service
bron install/setup.bash
''
Na de succesvolle build voert u de server en client uit via twee afzonderlijke terminals:
''
ros2 voer string_length_service string_length_server uit
''
''
ros2 voer string_length_service string_length_client uit
''
Deze handleiding gaf een diepgaande uitleg over het toevoegen van servicebestanden in setup.py voor ROS2-pakketten, terwijl gerelateerde onderwerpen zoals rclpy en std_srvs aan bod kwamen. Door deze stappen te volgen, kunt u uw ROS2-diensten op een efficiรซnte en georganiseerde manier creรซren en distribueren, waardoor interacties binnen uw robottoepassingen worden vergemakkelijkt. Veel succes en plezier met coderen!