ROS: Service Erstellen

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert