Gelöst: Dienstdateien in setup.py ROS2 hinzufügen

In den letzten Jahren hat der Bereich der Robotik einen Anstieg an Fortschritten und übernommenen Technologien erlebt. Eines davon ist ROS2 (Robot Operating System 2), ein Open-Source-Middleware-Framework, das Tools, Bibliotheken und Konventionen zum Entwickeln, Testen und Warten von Roboteranwendungen bereitstellt. Dieser Artikel befasst sich mit dem Hinzufügen von Servicedateien in einem ROS2-Paket mithilfe von setup.py, einer wesentlichen Fähigkeit für Entwickler, die mit dieser Plattform arbeiten. Wir beginnen mit einer kurzen Einführung, präsentieren eine Lösung für das Problem, führen Sie durch eine Schritt-für-Schritt-Anleitung und besprechen verwandte Themen für ein tieferes Verständnis.

Das Einrichten einer Dienstdatei im ROS2-Paket umfasst zwei Hauptschritte: Erstellen einer Dienstnachrichtendefinitionsdatei (.srv) und Hinzufügen der erforderlichen Konfigurationen in den Dateien package.xml und setup.py. In diesem Tutorial erstellen wir einen einfachen Dienst, der eine Eingabezeichenfolge entgegennimmt und die Länge der bereitgestellten Eingabe zurückgibt.

Bereiten wir zunächst unseren Arbeitsbereich vor. Erstellen Sie mit dem folgenden Befehl ein ROS2-Paket mit dem Namen „string_length_service“:

“`
ros2 pkg create –build-type ament_python string_length_service
“`

Erstellen Sie nun ein Verzeichnis mit dem Namen „srv“ im Paket „string_length_service“, um unsere Servicenachrichten-Definitionsdatei zu speichern:

“`
mkdir srv
“`

Erstellen Sie im Verzeichnis „srv“ eine Datei mit dem Namen „StringLength.srv“ mit folgendem Inhalt:

“`
string input_string
-
int64 Länge
“`

Stellen Sie sicher, dass Sie in der Datei package.xml die erforderlichen Abhängigkeiten hinzufügen:

„`xml
std_msgs
service_interface_packages
ament_cmake
ament_cmake_auto
Matplotlib
“`

Kommen wir nun zum Kernteil dieses Artikels – dem Hinzufügen von Servicedateien in setup.py. Öffnen Sie die Datei „setup.py“ und fügen Sie den folgenden Code ein:

„Python
aus setuptools import setup
von Glob Import Glob

Paketname = 'string_length_service'

aufstellen(
name=Paketname,
version='0.0.0′,
Pakete=[Paketname],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + Paketname]),
('share/' + Paketname, ['package.xml']),
('share/' + Paketname, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='developer_name_here',
maintainer_email='developer_email_here',
description='Ein Dienst zur Berechnung der Stringlänge',
lizenz='MIT',
tests_require=['pytest'],
enter_points={
'console_scripts': [
'string_length_server = ' + Paketname + '.string_length_server:main',
'string_length_client = ' + Paketname + '.string_length_client:main',
],
},
)
“`

Lassen Sie uns nun besprechen, was dieser Code bewirkt: Die Datei setup.py verwendet Setuptools, um unser Paket zu verteilen und zu verwalten. Die Variable package_name enthält den Namen unseres Pakets. Die data_files-Liste gibt die erforderlichen Ressourcen-, package.xml- und Servicedateien an, die zusammen mit dem Paket verteilt werden sollen. „install_requires“ listet die erforderlichen Pakete auf und „entry_points“ definiert die ausführbaren Dateien unseres Dienstes. Stellen Sie sicher, dass Sie „developer_name_here“ und „developer_email_here“ durch die richtigen Werte ersetzen.

Verwendung von rclpy und std_srvs

Nach dem Einrichten der Dienstdateien in setup.py ist es notwendig, den Server- und Clientcode mithilfe der ROS2-Python-Clientbibliothek, rclpy und std_srvs für die Standarddiensttypen zu implementieren.

Erstellen Sie die Dateien „string_length_server.py“ und „string_length_client.py“ in Ihrem Paketverzeichnis und implementieren Sie den Server- und Client-Code. Einzelheiten zum Schreiben von Server- und Client-Code finden Sie in der ROS2-Dokumentation.

Aufbau und Test des Dienstes

Erstellen und testen Sie abschließend Ihr Paket mit den folgenden Befehlen:

“`
Quelle /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
Quelle install/setup.bash
“`

Führen Sie nach dem erfolgreichen Build den Server und den Client über zwei separate Terminals aus:

“`
ros2 führt string_length_service string_length_server aus
“`

“`
ros2 führt string_length_service string_length_client aus
“`

In diesem Handbuch wird das Hinzufügen von Servicedateien in setup.py für ROS2-Pakete ausführlich erklärt und gleichzeitig verwandte Themen wie rclpy und std_srvs angesprochen. Wenn Sie diese Schritte befolgen, können Sie Ihre ROS2-Dienste auf effiziente und organisierte Weise erstellen und verteilen und so die Interaktionen innerhalb Ihrer Roboteranwendungen erleichtern. Viel Glück und viel Spaß beim Codieren!

Zusammenhängende Posts:

Hinterlasse einen Kommentar