Opgelost: voeg servicebestanden toe in setup.py ROS2

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
std_msgs
service_interface_pakketten
ament_cmake
ament_cmake_auto
matplotlib
''

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!

Gerelateerde berichten:

Laat een bericht achter