Løst: legg til tjenestefiler i setup.py ROS2

De siste årene har robotikkfeltet sett en økning i fremskritt og vedtatte teknologier. En av dem er ROS2 (Robot Operating System 2), et mellomvarerammeverk med åpen kildekode som gir verktøy, biblioteker og konvensjoner for å utvikle, teste og vedlikeholde roboters applikasjoner. Denne artikkelen fordyper seg i å legge til tjenestefiler i en ROS2-pakke ved å bruke setup.py, en essensiell ferdighet for utviklere som jobber med denne plattformen. Vi vil starte med en kort introduksjon, presentere en løsning på problemet, lede deg gjennom en trinn-for-trinn-guide og diskutere relaterte emner for dypere forståelse.

Å sette opp en tjenestefil i ROS2-pakken innebærer to hovedtrinn: å lage en tjenestemeldingsdefinisjonsfil (.srv) og legge til nødvendige konfigurasjoner i filene package.xml og setup.py. I denne opplæringen vil vi lage en enkel tjeneste som tar en inndatastreng og returnerer lengden på inndataene.

Først, la oss forberede arbeidsområdet vårt. Opprett en ROS2-pakke kalt "string_length_service" med følgende kommando:


ros2 pkg opprette –build-type ament_python string_length_service

Lag nå en katalog som heter "srv" inne i "string_length_service"-pakken for å lagre definisjonsfilen for tjenestemeldinger:


mkdir srv

Inne i "srv"-katalogen, lag en fil med navnet "StringLength.srv" med følgende innhold:


streng input_string
-
int64 lengde

Sørg for å legge til de nødvendige avhengighetene i filen package.xml:

«`xml
std_msgs
service_interface_packages
ament_cmake
ament_cmake_auto
matplotlib

La oss nå gå til kjernedelen av denne artikkelen – å legge til tjenestefiler i setup.py. Åpne filen "setup.py" og ta med følgende kode:

"Python
fra setuptools importoppsett
fra glob import glob

pakkenavn = 'string_length_service'

oppsett(
navn=pakkenavn,
versjon='0.0.0′,
pakker=[pakkenavn],
data_filer=[
('share/ament_index/resource_index/packages',
['ressurs/' + pakkenavn]),
('share/' + package_name, ['package.xml']),
('share/' + package_name, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe=Sant,
maintenanceer='developer_name_here',
maintenanceer_email='developer_email_here',
description='En tjeneste for å beregne strenglengde',
license='MIT',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'string_length_server = ' + pakkenavn + '.string_length_server:main',
'string_length_client = ' + pakkenavn + '.string_length_client:main',
],
},
)

La oss nå diskutere hva denne koden gjør: Setup.py-filen bruker setuptools for å distribuere og administrere pakken vår. Variabelen package_name inneholder navnet på pakken vår. Data_files-listen spesifiserer de nødvendige ressurs-, package.xml- og tjenestefilene som skal distribueres sammen med pakken. install_requires viser de nødvendige pakkene, og entry_points definerer tjenestens kjørbare filer. Sørg for å erstatte 'developer_name_here' og 'developer_email_here' med riktige verdier.

Bruker rclpy og std_srvs

Etter å ha satt opp tjenestefilene i setup.py, er det nødvendig å implementere server- og klientkoden ved å bruke ROS2 Python Client Library, rclpy og std_srvs for standard tjenestetyper.

Opprett filene "string_length_server.py" og "string_length_client.py" i pakkekatalogen og implementer server- og klientkoden. Du kan finne detaljer om hvordan du skriver server- og klientkode i ROS2-dokumentasjonen.

Bygge og teste tjenesten

Til slutt, bygg og test pakken din ved å bruke følgende kommandoer:


kilde /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
source install/setup.bash

Etter den vellykkede byggingen, kjør serveren og klienten med to separate terminaler:


ros2 kjøre string_length_service string_length_server


ros2 kjøre string_length_service string_length_client

Denne veiledningen presenterte en grundig forklaring på hvordan du legger til tjenestefiler i setup.py for ROS2-pakker mens du berørte relaterte emner som rclpy og std_srvs. Ved å følge disse trinnene kan du opprette og distribuere ROS2-tjenestene dine på en effektiv og organisert måte, og forenkle interaksjoner i robotapplikasjonene dine. Lykke til og god koding!

Relaterte innlegg:

Legg igjen en kommentar