Last Updated on 22. April 2023 by sfambach
Jeder Knoten kann Services anbieten. Ein Service zeichnet sich durch eine Anfrage gefolgt von einer Anwort aus. Services werden verwendet um bestimmt funktionen in Knoten aufzurufen. Zum Beispiel um einen Zustand abzufragen oder um einen Reset durchzuführen. Die initative geht hierbei vom Anfragenden aus. Dies unterscheidet sich von den Nachrichten (Messages) die abboniert werden.
Wie das funktioniert soll hier kurz beschrieben werden. Für eine auführliche Anleitung sei auf https://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv verwiesen.
Voraussetzung
Ordner erstellen
Services werden im srv Ordner des Paketes abgelegt.
mkdir ~/<Workspace>/src/<Paket>/srv
Service Datei erstellen
Eine Service Datei hat die Endung .srv und beinhaltet zwei Teile einen Ein- und einen Ausgang. Diese werden durch drei Minuszeichen von einander getrennt. Auch hier werden nur die Daten der Schnittstelle definiert. Es wird nun eine standard Nachricht kopieren, diese Vorgehensweise ist auch in Praxis hilfreich, da viele Services schon definiert sind. Zum kopieren wird das Programm roscp (Ros Copy) verwendet.
roscp [Paket Name] [Dateiname] [Zeilpfad]
Hier mein Beispiel, ihr müsst euch hierzu im Paketordner befinden.
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
So sieht die Datei aus, es werden zwei Ganzzahlen erwartet und eine zurückgegeben.
int64 a
int64 b
---
int64 sum
Builddateien anpassen
Nun müssen wir noch sicherstellen, dass die Nachricht auch generiert wird. Hierzu öffnen wir die package.xml Datei im eigenen Paket und schauen ob der folgenden Code enthalten ist.
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
Bei mir waren sie schon eindokumentiert.
Zum Schluss passen wir noch die CMakeLists.txt Datei an. Bitte öffnen und den folgenden Code vervollständigen.
cmake_minimum_required(VERSION 3.0.2)
project(<PacketName>)
include_directories(
include
${catkin_INCLUDE_DIRS}ros melodie
)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
add_service_files(
FILES
AddTwoInts.srv
)
generate_messages(
DEPENDENCIES std_msgs
)
catkin_package(
CATKIN_DEPENDS roscpp rospy message_runtime std_msgs
)
Service erstellen
Nun catkin_make im Workspace Ordner ausführen
cd ~/<Workspace>
catkin_make
Es werden drei Dateien erstellt.
cd ~/<Workspace>/devel/include/<Paketname> | ls
AddTwoInts.h
AddTwoIntsRequest.h
AddTwoIntsResponse.h
Verwenden von rossrv
rossrv show <service type>
Bei mir wie folgt
rossrv show beginner_tutorials/AddTwoInts
Ausgabe
int64 a
int64 b
---
int64 sum
Hilfe
Gibts mit -h
rossrv -h
und zeigt alle Befehle von rossrv
rossrv is a command-line tool for displaying information about ROS Service types.
Commands:
rossrv show Show service description
rossrv info Alias for rossrv show
rossrv list List all services
rossrv md5 Display service md5sum
rossrv package List services in a package
rossrv packages List packages that contain services
Type rossrv <command> -h for more detailed usage
Verwandte Beiträge
Quellen
http://wiki.ros.org/melodic/Installation/Ubuntu
http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv