Löst: lägg till servicefiler i setup.py ROS2

Under de senaste åren har robottekniken sett en ökning av framsteg och antagna tekniker. En av dem är ROS2 (Robot Operating System 2), ett mellanprogram med öppen källkod som tillhandahåller verktyg, bibliotek och konventioner för att utveckla, testa och underhålla robotars applikationer. Den här artikeln fördjupar sig i att lägga till tjänstefiler i ett ROS2-paket med setup.py, en viktig färdighet för utvecklare som arbetar med den här plattformen. Vi kommer att börja med en kort introduktion, presentera en lösning på problemet, gå igenom en steg-för-steg-guide och diskutera relaterade ämnen för djupare förståelse.

Att ställa in en servicefil i ROS2-paketet innefattar två huvudsteg: att skapa en definitionsfil för servicemeddelanden (.srv) och lägga till nödvändiga konfigurationer i filerna package.xml och setup.py. I den här handledningen kommer vi att skapa en enkel tjänst som tar en inmatningssträng och returnerar längden på inmatningen.

Låt oss först förbereda vår arbetsyta. Skapa ett ROS2-paket med namnet "string_length_service" med följande kommando:

”'
ros2 pkg skapa –build-type ament_python string_length_service
”'

Skapa nu en katalog med namnet "srv" i paketet "string_length_service" för att lagra vår definitionsfil för servicemeddelanden:

”'
mkdir srv
”'

Inuti "srv"-katalogen, skapa en fil med namnet "StringLength.srv" med följande innehåll:

”'
sträng input_string
-
int64 längd
”'

Se till att lägga till nödvändiga beroenden i filen package.xml:

"`xml
std_msgs
service_interface_packages
ament_cmake
ament_cmake_auto
matplotlib
”'

Låt oss nu gå till kärndelen av den här artikeln – lägga till servicefiler i setup.py. Öppna filen "setup.py" och inkludera följande kod:

"'python
från installationsverktygs importinställningar
från glob import glob

package_name = 'string_length_service'

uppstart(
namn=paketnamn,
version='0.0.0′,
paket=[paketnamn],
data_files=[
('share/ament_index/resource_index/packages',
['resurs/' + paketnamn]),
('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 tjänst för att beräkna stränglängd',
licens='MIT',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'string_length_server = ' + paketnamn + '.string_length_server:main',
'string_length_client = ' + paketnamn + '.string_length_client:main',
],
},
)
”'

Låt oss nu diskutera vad den här koden gör: Filen setup.py använder setuptools för att distribuera och hantera vårt paket. Variabeln package_name innehåller namnet på vårt paket. Data_files-listan anger nödvändiga resurs-, package.xml- och servicefiler som ska distribueras tillsammans med paketet. install_requires listar de nödvändiga paketen och entry_points definierar våra körbara servicefiler. Se till att ersätta "developer_name_here" och "developer_email_here" med korrekta värden.

Använder rclpy och std_srvs

Efter att ha ställt in tjänstefilerna i setup.py, är det nödvändigt att implementera server- och klientkoden med ROS2 Python Client Library, rclpy och std_srvs för standardtjänsttyperna.

Skapa filerna "string_length_server.py" och "string_length_client.py" i din paketkatalog och implementera server- och klientkoden. Du kan hitta information om hur du skriver server- och klientkod i ROS2-dokumentationen.

Bygger och testar tjänsten

Slutligen, bygg och testa ditt paket med följande kommandon:

”'
källa /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
source install/setup.bash
”'

Efter det lyckade bygget kör du servern och klienten med två separata terminaler:

”'
ros2 kör string_length_service string_length_server
”'

”'
ros2 kör string_length_service string_length_client
”'

Den här guiden presenterade en djupgående förklaring av hur man lägger till servicefiler i setup.py för ROS2-paket samtidigt som man berör relaterade ämnen som rclpy och std_srvs. Genom att följa dessa steg kan du skapa och distribuera dina ROS2-tjänster på ett effektivt och organiserat sätt, vilket underlättar interaktioner inom dina robotapplikationer. Lycka till och lycklig kodning!

Relaterade inlägg:

Lämna en kommentar