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
“
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!