institut fur robotik und ... - rob.cs.tu-bs.de · kapitel 1 einleitung aktuelle robotersysteme...

25
Institut f¨ ur Robotik und Prozessinformatik Technische Universit¨ at Braunschweig Prof. Dr. J. Steil ROBOTIKPRAKTIKUM Versuch 6 ROS - Robot Operating System

Upload: others

Post on 31-Aug-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Institut fur Robotik und Prozessinformatik

Technische Universitat Braunschweig

Prof. Dr. J. Steil

ROBOTIKPRAKTIKUM

Versuch 6

ROS - Robot Operating System

Page 2: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Inhaltsverzeichnis

1 Einleitung 1

2 ROS - Robot Operating System 3

2.1 Konzepte von ROS im Detail . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Der Kommunikationsgraph . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1 Asynchrone Kommunikation . . . . . . . . . . . . . . . . . . . . 6

2.2.2 Synchrone Kommunikation . . . . . . . . . . . . . . . . . . . . 6

3 Versuchsaufbau 8

4 Versuchsdurchfuhrung und Aufgaben 10

4.1 Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.2 ROS Master und Packages . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.3 Nodes, Topics und Messages . . . . . . . . . . . . . . . . . . . . . . . . 11

4.4 Launch-Files und Catkin . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.5 ROS im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.6 ROS Graph, Remapping und Parameter . . . . . . . . . . . . . . . . . 14

4.7 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.8 Schreiben eines ROS Nodes . . . . . . . . . . . . . . . . . . . . . . . . 17

4.9 Tranformationen und Frames . . . . . . . . . . . . . . . . . . . . . . . 18

4.10 ROS Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Anhang 21

1

Page 3: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Kapitel 1

Einleitung

Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zusatzlichen Hardwarekomponenten. Hinzu kommen verschiedeneSoftwaremodule fur unterschiedliche Aufgaben. Eine beispielhafte Menge an Kompo-nenten, die uber mehrere Steuerungscomputer verteilt sind, ist in der Abbildung 1.1dargestellt.

Abbildung 1.1: Ubersicht uber typische Komponenten eines Robotersystems

In solch einem System wird typischerweise eine Middleware eingesetzt, um zum Bei-spiel die Kommunikation der einzelnen Softwaremodule untereinander und uber Com-putergrenzen hinweg zu gewahrleisten. Außerdem bringt der Einsatz einer Middlewareden Vorteil mit sich, dass sie eine Hardwareabstraktion darstellt und somit der Por-tierungsaufwand beim Austausch von Hardwarekomponenten minimiert werden kann.

Im industriellen Umfeld wird als Middleware zum Beispiel die echtzeitfahige LosungRTI Connext DDS 1 eingesetzt. Im akademischen Bereich und in der industriellenForschung wird hingegen haufig auf das Robot Operating System kurz ROS2 gesetzt.

1https://www.rti.com/products/dds/ Stand: 28.10.20152http://www.ros.org/ Stand: 28.10.2015

1

Page 4: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Durch eine breite Hardwareunterstutzung, ein großes Repository mit Implementie-rungen verschiedenster Algorithmen, einer aktiven Community und einer guten Do-kumentation konnte ROS eine weite Verbreitung in der Forschung erreichen. Zwarwird die Moglichkeit eines schnellen Entwurfs von Prototypen geboten, jedoch wirdnicht die Echtzeitfahigkeit anderer Losungen erreicht.

Um einen Einblick in ROS zu erhalten, sind im Rahmen dieses Versuches unterschied-liche Aufgaben zu losen, sodass einige Eigenschaften und Funktionen kennen gelerntsowie angewendet werden. Der Schwerpunkt liegt hierbei auf dem modularen Aufbaueines Systems, der Kommunikation der verschiedenen Module untereinander, der In-tegration von Sensoren und Eingabegeraten sowie der Auswertung und Visualisierungvon Messdaten.

2

Page 5: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Kapitel 2

ROS - Robot OperatingSystem

Dieses Kapitel stellt das Robot Operating System, im Folgenden nur als ROS be-zeichnet, vor. Der Fokus liegt hierbei auf der Beschreibung der charakteristischenEigenschaften sowie der verwendeten Konzepte1. Befehle, die fur den praktischenUmgang mit ROS und der Versuchsdurchfuhrung benotigt werden, sind nicht Teildieses Kapitels sondern stattdessen im Anhang

”ROS Indigo Cheatsheet“ zusammen-

gefasst. Besteht uber das Praktikum hinaus Interesse an ROS, so sei auf das online2

verfugbare Buch A Gentle Introduction to ROS von Jason M. O’Kane verwiesen.

2.1 Konzepte von ROS im Detail

Die Vielzahl an kommerziell verfugbarer Hardware (Manipulatoren sowie Sensoren)erschwert es fur kleine Forschungsgruppen nur selbst entwickelte und fur die eige-ne/verfugbare Hardware angepasste Software zu verwenden. Eine Hardwareanderungbedeutet in diesem Fall einen hohen Integrationsaufwand und somit kann es vor-kommen, dass die verwendete Hardware nicht auf die aktuellen Forschungsprojektezugeschnitten ist, da der Integrationsaufwand fur die optimale Hardware gescheutwird.

In der weltweiten Robotikcommunity existieren Implementierungen verschiedener Al-gorithmen unterschiedlicher Forschungsgruppen zu typischen Problemstellungen inder Robotik. Um diese Algorithmen nutzen zu konnen, ohne sie erneut implementie-ren zu mussen, werden gleiche Interfaces, Konventionen und Softwarearchitekturenbenotigt.

Die angesprochenen Punkte verdeutlichen, welche Probleme mit der Erstellung kom-plexer, robuster und vielseitig einsetzbarer Software fur den Einsatz in der Robotikeinher gehen und zu losen sind. Erst dann konnen auch fur den Menschen sehr einfa-che Aufgaben erfolgreich unter Verwendung von Robotern gelost werden, obwohl esbei jeder Anwendung zu Variationen von Objekten, Parametern oder der Umgebungkommt. Um dennoch fur einfache Aufgaben roboterbasierte Losungen anbieten zukonnen, sind einzelnen Forschungsgruppen auf die von der Community entwickeltenEinzellosungen, beispielsweise fur die Handhabung der genannten Variation angewie-

1http://wiki.ros.org/ROS/Concepts2https://cse.sc.edu/~jokane/agitr/agitr-letter.pdf

3

Page 6: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

sen. Denn ohne diese existierenden Einzellosungen zu verwenden, kann der Aufwanddie vorhandenen Mittel uberschreiten.

Die sogenannte ROS-Gleichung, dargestellt in Abbildung 2.1, adressiert diese genann-ten Bedurfnisse und beschreibt damit das Zusammenspiel der Community beim kolla-borativen Erstellen von effektiven und robotikspezifischen Softwarelosungen. Die Glei-chung stellt die Verbindung einer Anwendergemeinschaft mit verfugbaren Geratetreibernund Algorithmen sowie einer Toolchain zur Erfassung, Auswertung und Visualisierungvon Messdaten in einer einheitlichen Softwarearchitektur dar. Zusatzlich ermoglichtder modulare Aufbau von ROS, dass einzelne Teile aus der verfugbaren Menge anSoftware in Kombination mit der minimalen Infrastruktur beliebig zu einem Gesamt-system zusammengestellt werden konnen. Dies ist einer der Grunde, aus denen ROSeinen hohen Verbreitungsgrad in der Robotik erlangt hat.

Abbildung 2.1: Die ROS-Gleichung [http://www.ros.org/about-ros/, Stand:10.11.2015]

Die Entwicklung von ROS begann im Jahr 2007 an der Stanford University. Anschlie-ßend erfolgte die Weiterentwicklung unter der Schirmherrschaft von Willow Garage3.Im April 2012 wurde die gemeinnutzige Organisation Open Source Robotics Founda-tion (OSRF)4 gegrundet, welche die Entwicklung seit dem fortfuhrt.

Aktuell werden die Kernkomponenten von ROS in die Kategorien Kommunikations-infrastruktur, robotikspezifische Features, Diagnose, Lokalisieren, Navigation und Po-senbestimmung und Werkzeuge unterteilt. Somit bietet ROS mehr Funktionalitat alseine klassische Middleware wie zum Beispiel RTI Connext DDS und wird deshalbauch als Meta-Betriebssystem bezeichnet. Im Folgenden werden Elemente der einzel-nen Kernkomponenten in Form einer Aufzahlung ubersichtlich dargestellt, bevor imAbschnitt 2.2 die ROS-interne Kommunikation naher betrachtet wird.

Kommunikationsinfrastruktur:

• Message Passing

• Recording and Playback of Messages

• Remote Procedure Call

• Distributed Parameter System

robotikspezifische Feature:

• Standard Robot Messages

• Robot Geometry Library

• Robot Description Language

3https://www.willowgarage.com/4http://www.osrfoundation.org/

4

Page 7: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

• Preemptable Remote Procedure Calls

Diagnose

Lokalisieren, Navigation und Posenbestimmung

Werkzeuge:

• Command-Line Tools

• rviz

• rqt

Detaillierte Informationen zu den einzelnen Punkten sind unter http://www.ros.

org/core-components/ zu finden.

Abschließend ist anzumerken, dass ROS auf einer sprach-neutralen Architektur ba-siert, sodass die Anwender ihre Software in der von ihnen favorisierten Programmier-sprache erstellen konnen.

2.2 Der Kommunikationsgraph

Der Kommunikationsgraph von ROS reprasentiert eine Kommunikationsarchitektur,welche die Kommunikationen zwischen Prozessen in synchroner als auch in asynchro-ner Form gewahrleistet. Dabei ist es nicht von Bedeutung, ob die Prozesse auf dem sel-ben Computer laufen oder uber mehrere Computer im Netzwerk verteilt sind. Da derKommunikationsgraph ein zentrales Element dieses Versuches ist, werden zunachstseine Elemente vorgestellt und danach die synchrone und asynchrone Kommunikati-on naher beschrieben.

• ROS-Master: Der ROS-Master ist fur die Registrierung und die Verwaltungaller verfugbaren Services und Nodes zustandig. Er sorgt dafur, dass eine Kom-munikation aufgebaut werden kann und ist somit von seiner Funktion her miteinem DNS-Server fur die Namensauflosung vergleichbar.

• Node: Ein Node ist ein eigenstandiger Prozess, welcher Berechnungen ausfuhrtund innerhalb des Kommunikationsgraphs als Quelle oder Senke fur Nachrichtenfungiert.

• Parameterserver: Ein Parameterserver ist ein geteiltes Verzeichnis, welchesglobale Parameter (zum Beispiel Konfigurations– und Initialisierungsparameter)enthalt und fur alle anderen Elemente des Kommunikationsgraphen zuganglichist.

• Message: Nodes kommunizieren uber Nachrichten, welche uber ein spezifischesTopic ausgetauscht werden.

• Topic: Ein Topic ist ein Kanal mit einem spezifischen Namen uber den No-des Nachrichten austauschen. Sie sind fur einen kontinuierlichen Datenfluss, wiezum Beispiel beim Streamen von Sensorwerten oder des Roboterzustands, ge-dacht. Quellen konnen Nachrichten senden, auch wenn keine Senken mit demTopic verbunden sind und außerdem konnen mehrere Senken mit einer Quelleuber das gleiche Topic verbunden sein. Eine Quelle verschickt eine Nachricht zu

5

Page 8: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

einem selbstgewahlten Zeitpunkt und die Senke erhalt die Nachricht sobald sieverfugbar ist, da Topics fur asynchrone5 Kommunikation verwendet werden.

• Service: Ein Service eignet sich zur synchronen6 Kommunikation, da er einenblockierenden Aufruf eines Dienstes darstellt. Typischer Weise wird ein Servicefur remote procedure calls, wie der Abfrage eines aktuellen Zustands, spezifischerWerte oder der schnellen Berechnung der inversen Kinematik verwendet. Im All-gemeinen sollten Services nicht fur langer laufende Prozesse verwendet werden,da ansonsten unerwartete Seiteneffekte im restlichen Kommunikationsgraphen,ausgelost durch das Blockieren, auftreten konnen. Die Kommunikation verlauftimmer zwischen exakt einer Quelle und einer oder mehreren Senken.

• Bags: Bei einem Bag handelt es sich um ein Dateiformat, mit welchem sich derKommunikationsgraph abbilden, speichern und zu einem spateren Zeitpunktmit dem richtigen Zeitverhalten wiedergeben lasst.

2.2.1 Asynchrone Kommunikation

Die asynchrone Kommunikation zwischen Nodes basiert auf Nachrichten, die zu ei-nem bestimmten Topic verschickt oder empfangen werden. Um die Kommunikationaufzubauen, muss die Quelle ihre Topics bei dem ROS-Master ankundigen. Eine Sen-ke fragt bei dem ROS-Master ab, welche Topics verfugbar sind. Anschließend findetdie Kommunikation direkt zwischen den Nodes statt. Dieses Verhalten ist beispiel-haft in Abbildung 2.2 skizziert. Auf einem Topic konnen Nachrichten von mehrerenQuellen verschickt und ebenso von mehreren Senken empfangen werden. Dabei ist dieVerwendung von Standardnachrichtentypen als auch von benutzerdefinierten Nach-richten moglich.

Abbildung 2.2: Asynchrone Kommunikation in einem ROS-System bestehend aus ei-nem ROS Master und drei Nodes unter Verwendung von zwei Topics

2.2.2 Synchrone Kommunikation

Die Kommunikation uber einen Service besteht aus einem Nachrichtenpaar. EineNachricht dient der Anfrage/Anforderung und die andere Nachricht enthalt die Ant-wort. Der Service selber wird von einem Node unter einem Namen, als String forma-tiert, angeboten. Die Clients senden die Anforderungen an diesen Service und sindsolange blockiert, bis sie eine Antwort erhalten haben. Fur den Programmierer wirktdieses Verhalten als wurde ein remote procedure call verwendet werden. Um eine

5siehe Abschnitt 2.2.16siehe Abschnitt 2.2.2

6

Page 9: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

hohere Performance zu erreichen, kann ein Client eine persistente Verbindung zu ei-nem Service aufbauen. Dieser Fall ist jedoch nicht so robust gegenuber Anderungen imAufbau des Kommunikationsgraphen und besagte Anderungen sind gerade der Vorteilder Node-basierten und dynamisch erstellbaren Architektur des Gesamtsystems.

7

Page 10: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Kapitel 3

Versuchsaufbau

Um die ROS-Konzepte naher zu bringen, wird in diesem Versuch der mobile RoboterPioneer P3-DX1 verwendet. Auf diesem ist ein SICK Laserscanner2 montiert (Ab-bildung 3.1). Zur Steuerung sind beide Gerate uber USB-RS232-Adapter an einenRaspberry Pi 2 angeschlossen.

Abbildung 3.1: Pioneer P3-DX mit SICK Laserscanner und Raspberry Pi

Zur Bearbeitung der Aufgabenstellungen wird ein PC, auf dem Ubuntu 14.04 mitLong-Term-Support installiert ist, verwendet. Dieser PC und der Raspberry Pi sinduber ein eigenes WLAN miteinander verbunden und dank der Netzwerkfahigkeit vonROS konnen einige Komponenten des ROS-System auf dem PC und andere auf dem

1http://www.mobilerobots.com/ResearchRobots/PioneerP3DX.aspx2http://sicktoolbox.sourceforge.net/docs/sick-lms-technical-description.pdf

8

Page 11: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Raspberry Pi starten ohne manuell per SSH darauf zugreifen zu mussen (siehe Ab-schnitt 4.5). Zur Steuerung des Pioneers ist ein kabelloses Gamepad uber einen USB-Funk-Stick mit dem PC verbunden. Der gesamte Versuchsaufbau ist in dem Deploy-mentdiagramm in Abbildung 3.2 dargestellt.

Die derzeit aktuellste Version von ROS ist Jade Turtle3, allerdings wird im Robotik-Labor und auch im Praktikum die Version Indigo Igloo4 eingesetzt, da diese genauwie Ubuntu Long-Term-Support bietet. ROS Indigo ist sowohl auf dem PC als auchauf dem Pi bereits installiert.

PC Raspberry Pi

Ubuntu 14.04 LTS Raspbian Wheezy

Pioneer P3-DX

SICK Laserscan

Gamepad

WiFiROS Indigo Igloo

ROS Master

ROS NodeJoystick

ROS Indigo Igloo

ROS NodeRosAria

ROS NodeSICK LMS

Abbildung 3.2: Deploymentdiagramm des Versuchaufbaus

3http://wiki.ros.org/jade4http://wiki.ros.org/indigo

9

Page 12: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Kapitel 4

Versuchsdurchfuhrung undAufgaben

Das Ziel diese Versuchs besteht in der Implementierung eines Systems zum Verfahrendes Pinoeers unter Verwendung eines Gamepads. Als Infrastruktur ist hierfur einebereits existierendes ROS-Setup zu verwenden. Daruber hinaus werden die Sonar-Sensoren1 zur Hinderniserkennung genutzt und abschließend das Labor mit Hilfe desauf dem Roboter montierten Laserscanners kartografiert.

In diesem Kapitel werden schrittweise die wichtigsten ROS-Komponenten sowie diedazugehorigen Kommandozeilen-Befehle erlautert. Wie die jeweiligen Befehle undStrukturen konkret anzuwenden sind, entnehmen Sie dem beigefugten ROS CheatSheet. Detaillierte Informationen finden Sie unter den dazugehorigen Links aufhttp://wiki.ros.org.

4.1 Vorbereitung

Auf dem Praktikumsrechner wurde bereits eine Indigo-Distribution von ROS instal-liert, diese befindet sich in dem Verzeichnis /opt/ros/indigo/ und bietet eine Viel-zahl an Kommandozeilen-Befehlen. Damit Ihnen diese zur Verfugung stehen, mussenSie zunachst das Setup-Skript als Quelle fur Ihre Shell hinzufugen. Fuhren Sie folgendeBefehle aus:

echo "source /opt/ros/indigo/setup.bash" >> .bashrc

source ~/.bashrc

Damit wird das Setup in jedem Terminal, das Sie offnen geladen. Wenn Sie nun ineinem Terminal ros eingeben und dann zwei mal TAB drucken, werden Ihnen alleverfugbaren ROS-Befehle angezeigt.

1Ortung von Gegenstanden mittels ausgesandter Schallimpulse

10

Page 13: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

4.2 ROS Master und Packages

Fur jedes ROS System muss zunachst ein Master gestartet werden. Die Aufgabe desMasters besteht darin, ROS Nodes und Topics (siehe Abschnitt 2.2) zu registrierenund zu benennen. Er initialisiert Peer-to-Peer-Verbindungen zwischen Nodes, damitdiese miteinander kommunizieren konnen.

ROS Software ist in Packages organisiert. Ein Package kann ROS Nodes, unabhangigeBibliotheken, Konfigurations-Dateien oder vieles mehr enthalten, das zusammen einnutzliches Modul ergibt. Packages dienen dazu Funktionalitat einfach und modu-lar bereit zu stellen, so dass sie fur verschiedene Aufgaben wiederverwendet werdenkonnen.

ROS Befehle:

• roscore - Startet den ROS Master und den Parameter-Server

• rospack - Zeigt Informationen zu installierten Packages an

Aufgabe:

• Starten Sie den ROS Master!

Im Terminal sollten Sie nun die Ausgaben sehen, dass der Master erfolgreich gestartetwurde. Fur die weiteren Arbeiten mit ROS muss der Master geoffnet bleiben. In demTerminal konnen aber nur Ausgaben betrachtet werden, das heißt fur weitere ROS-Software benotigen Sie jeweils ein neues Terminal, welches sich in der Ubuntu-Konsoledurch Drucken von Strg + Shift + T offnen lasst. Sollten Sie den Master (oder einenanderen Node) beenden wollen, erreichen Sie das durch Drucken von Ctrl + C.

4.3 Nodes, Topics und Messages

ROS Nodes sind nicht viel mehr als ausfuhrbare Dateien in ROS, welche in denProgrammiersprachen C++ oder Python implementiert werden konnen. Nodes kom-munizieren mit anderen Nodes indem sie Messages uber ROS Topics senden undempfangen. Topics sind Busse, die uber ihren Namen eindeutig identifizierbar sindund denen ein eindeutiger Message-Typ zugeordnet ist. Uber Topics konnen Nodesmiteinander Messages austauschen. Nodes, die Daten uber ein Topic senden nenntman Publisher, Daten empfangende Nodes sind Subscriber. Beim Starten eines No-des meldet sich dieser mit seinem Namen am ROS Master an und informiert diesenaußerdem daruber, auf welchen Topics er Daten senden und empfangen mochte. DerMaster stellt daraufhin die entsprechenden Peer-to-Peer-Verbindungen her.

11

Page 14: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

ROS Befehle:

• rosnode - Zeigt Informationen uber laufende Nodes an

• rostopic - Zeigt Informationen uber registrierte Topics an

• rosmsg - Zeigt Informationen uber verfugbare Message-Typen an

• rosrun - Startet einen Node

• Die korrekte Verwendung der Befehle finden Sie im ROS Cheat Sheet

Zunachst benotigen wir einen Node, der als Schnittstelle zum Gamepad fungiert unddie Eingaben weiterleiten kann. Dazu nutzen wir das bereits vorhandene Package joy2

mit dem zugehorigen Node joy_node. Die Eingaben vom Gamepad mussen daraufhinvon einem weiteren Node in Bewegungsbefehle umgewandelt werden. Ein Standardin ROS fur solche Befehle ist der Message-Typ geometry msgs/Twist3. Fur die Um-wandlung ist bereits das Package teleop twist joy4 installiert.

Aufgaben:

• Starten Sie den Node joy_node aus dem Package joy in einem neuen Ter-minal!

• Untersuchen Sie den laufenden Node auf die dazugehorigen Topics. Uberwelches Topic werden die Gamepad-Eingaben transportiert? UberprufenSie die Funktion des Gamepadsa indem Sie sich das den Eingaben entspre-chende Topic am Terminal ausgeben lassen!

• Starten Sie in einem neuen Terminal den Node teleop_node zum Umwan-deln der Gamepad-Eingaben in Twist-Messages.

• Aus welchen Komponenten besteht eine Twist-Message? Welche Eintragesind dabei fur den Pioneer relevant?

• Beenden Sie anschließend beide Nodes wieder durch Drucken von Ctrl + C

im jeweiligen Terminal!

aSollte sich das Gamepad im Standby-Modus befinden, lasst es sich durch Drucken derHome-Taste reaktivieren.

4.4 Launch-Files und Catkin

ROS-Systeme konnen aus sehr vielen Nodes bestehen, so dass es schnell sehr aufwen-dig wurde, alle Nodes einzeln zu starten. Launch-Files erleichtern den Start ganzerSysteme. Innerhalb einer XML-Struktur werden alle einzelnen Nodes und ihre Ei-genschaften aufgelistet und konnen so mit einem einzigen Befehl gestartet werden.Außerdem kann man noch weitere Konfigurationen in Launch-Files festlegen, mit de-nen wir uns spater noch beschaftigen.

2http://wiki.ros.org/joy3http://docs.ros.org/api/geometry msgs/html/msg/Twist.html4http://wiki.ros.org/teleop twist joy

12

Page 15: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

ROS Befehle:

• roslaunch - Startet ein Launch-File

• catkin_init_workspace - Legt einen Catkin-Workspace an

• catkin_create_pkg - Legt ein neues Package im Catkin-Workspace an

• catkin_make - Kompiliert und erstellt den Catkin-Workspace

• Die korrekte Verwendung der Befehle finden Sie im ROS Cheat Sheet

Launch-File Elemente:

• <launch> - XML-Wurzelelement eines Launch-Files

• <node> - XML-Element fur ROS Nodes

Da Launch-Files Teile von ROS Packages sind, benotigen wir nun einen eigenenWorkspace, der es uns erlaubt, neue Packages anzulegen. Zum Erstellen der Packagesnutzen wir das in der ROS-Installation enthaltene Tool Catkin.

Aufgaben:

• Wechseln Sie in den Ordner catkin_ws/src in Ihrem Home-Verzeichnisund legen Sie Ihren Catkin-Workspace mit Hilfe des Kommandozeilen-Befehls an!

• Legen Sie das Package robprak mit Hilfe der Kommandozeilen-Befehlein Ihrem Catkin-Workspace an! Erstellen Sie darin den Ordner launch

und fugen Sie ein .launch-File hinzu, mit welchem Sie die beiden fur dasGamepad genutzen Nodes auf einmal starten konnen!

• Erganzen Sie die Datei .bashrc in Ihrem Home-Verzeichnis um die Zeile:source ~/catkin_ws/devel/setup.bash

• Erstellen Sie Ihren Workspace und testen Sie Ihr Launch-File!

4.5 ROS im Netzwerk

Ein großer Vorteil von ROS ist die Netzwerkfahigkeit. Wenn ein Node sich an einemMaster im Netzwerk anmelden mochte, findet er diesen uber die UmgebungsvariableROS_MASTER_URI und teilt dem Master die eigene Adresse mit, welche als Umge-bungsvariable ROS_IP gespeichert sein muss. Mit diesen Informationen kann der Mas-ter die Kommunikations-Verbindungen auch uber das Netzwerk herstellen. Mit Hilfevon Launch-Files konnen Nodes auch auf anderen Systemen gestartet werden. Dazumuss das System mit einem Machine-Tag beschrieben werden. Innerhalb des Node-Tags kann dann das System, auf dem der Node laufen soll, als Attribut mitgegebenwerden.

13

Page 16: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Launch-File Elemente:

• <machine> - XML-Element fur Systeme im Netzwerk

Fur die Ansteuerung des Pioneers und viele weitere mobile Roboter existiert dieOpenSource-Bibliothek ARIA, welche auch bereits als ROS-Package RosAria5 im-plementiert wurde. Da diese direkt mit der RS232-Schnittstelle des Pioneers kommuni-ziert, muss der Node auf dem Raspberry Pi gestartet werden. Folgende Informationenbenotigen wir fur die Kommunikation des ROS-Masters mit dem Raspbery Pi:

• IP-Adresse: 192.168.0.70

• User: robprak

• Passwort: RobPrakRasp

• Pfad zum Env-Loader (Pi): /opt/ros/indigo/env2.sh

Aufgaben:

• Setzen Sie dauerhaft die Umgebungsvariablen, indem Sie folgende Zeilender Datei .bashrc in Ihrem Home-Verzeichnis hinzufugen:export ROS_IP=192.168.0.68

export ROS_MASTER_URI=http://192.168.0.68:11311

export ROSLAUNCH_SSH_UNKNOWN=1

• Fugen Sie Ihrem Launch-File ein Machine-Tag fur den Raspberry Pi hin-zu! Anschließend erweitern Sie das File um den Node RosAria, so dassdieser auf dem Pi ausgefuhrt wird! Erganzen Sie den Node-Tag um einweiteres XML-Element: <param name="port" value="/dev/pioneer"/>.Parameter werden im folgenden Kapitel naher erlautert.

• Schalten Sie den Pioneer ein und testen Sie Ihr Launch-File!

4.6 ROS Graph, Remapping und Parameter

Wenn Sie das bis hierhin erstellte Launch-File starten, werden Sie feststellen, dasszwar eine Verbindung zum Pioneer hergestellt wird, die Steuerung mit dem Gamepadallerdings noch nicht moglich ist. Um den Grund dafur zu finden, wollen wir einenBlick auf den Graphen unseres ROS Systems werfen. Dafur benutzen wir den Noderqt_graph aus dem gleichnamigen Package. Starten Sie diesen in einem neuen Ter-minal um eine Visualisierung Ihres ROS Graphen zu erhalten.

Nodes werden durch Ellipsen dargestellt, Topics durch Rechtecke. Zunachst sind un-sere drei gestarteten Nodes erkennbar, sowie das Topic joy woruber bereits kommu-niziert wird. Der Node RosAria ist nicht mit dem Rest des Graphen verbunden. Umnun samtliche Topics im System anzuzeigen, wechseln Sie im DropDown-Menu links

5http://wiki.ros.org/ROSARIA

14

Page 17: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Abbildung 4.1: Der ROS Graph mit den aktiven Nodes und Topics

oben auf den Eintrag Nodes/Topics (all) und entfernen die Hakchen bei Hide deadsinks sowie Hide leaf topics.

Abbildung 4.2: Der ROS Graph mit allen Nodes und Topics

Nun wird auch schnell klar, warum keine Kommunikation zwischen den zu untersu-chenden Nodes besteht: Der Node teleop_node ist Publisher fur das Topic cmd_vel.Der Node RosAria ist Subscriber fur das Topic RosAria/cmd_vel (der Namespacekann hier variieren, entsprechend dem Namen, den Sie im Launch-File fur den Nodefestgelegt haben).

Um das System so zu konfigurieren, dass statt zwei Topics, das selbe verwendet wirdnutzen wir Remapping. Damit wird einem Topic statt des im Quellcode festgelegtenNamens ein vom Benutzer gewahlter Name zugeordnet. Remapping kann sowohl inder Kommandozeile als auch in Launch-Files beschrieben werden.

Viele ROS Nodes verfugen uber verschiedene Parameter, mit deren Hilfe sie flexibelzu konfigurieren sind. Der Befehl roscore startet neben dem Master auch einen Pa-rameter Server, der dafur zustandig ist alle vom Benutzer gesetzten Parameter andie betroffenen Nodes weiterzugeben. Wenn keine gesetzt werden, werden die Nodesmit Standard-Werten gestartet. Parameter konnen sowohl in der Kommandozeile alsauch in Launch-Files gesetzt werden. Fur die meisten Nodes sind die verfugbarenParameter in der Dokumentation im ROS-Wiki ausfuhrlich beschrieben.

15

Page 18: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

ROS Befehle:

• rosparam - Setzt und liest Parameter

Launch-File Elemente:

• <remap> - XML-Element zum Remappen von Topics

• <param> - XML-Element zum Setzen von Parametern

Aufgaben:

• Modifizieren Sie ihr Launch-File, so dass die Twist-Messages korrekt ubergebenwerden!

• Aktivieren Sie den Turbomodus, indem Sie in Ihrem Launch-File den Para-meter enable_turbo_button innerhalb des Teleop-Nodes setzen. Der Pa-rameter erwartet einen Integer-Wert, der dem entsprechenden Knopf ent-spricht. Nutzen Sie rostopic) um die Zahl fur eine von Ihnen gewahlteTaste des Gamepads herauszufinden.

• Fahren Sie den Pioneer mit dem Gamepad kollisionsfrei durch das Labor!

4.7 Visualisierung

RViz ist ein machtiges Visualisierungs-Tool fur ROS zum Anzeigen von Modellen,Koordinatensystemen, Sensordaten und vielem mehr. Das Tool lasst sich als ROSNode rviz aus dem gleichnamigen Package starten.

Abbildung 4.3: Der ROS Graph mit allen Nodes und Topics

Links im Display-Bereich kann man die zu visualisierenden Daten hinzufugen undEinstellungen vornehmen. Uber den Button Add kann man zwischen einer Vielzahlvon Message-Typen auswahlen. Anschließend muss unter dem Punkt Topic die Quelle

16

Page 19: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

fur die Daten angegeben werden. Meist erkennt die Software bereits das passendeTopic selbst. In den Global Options muss unter Fixed Frame noch der Name deszugehorigen Frames eingetragen werden. Dieser lasst sich zum Beispiel herausfinden,indem man sich im Terminal ein paar Messages des gewunschten Topics ausgebenlasst.

Aufgabe:

• Visualisieren Sie die Sensordaten der im Pioneer verbauten Sonar-Sensorenund machen Sie sich mit dem Message-Typ sensor_msgs/PointCloud ver-traut!

4.8 Schreiben eines ROS Nodes

Im folgenden Abschnitt beschaftigen wir uns mit der Implementierung eines eigenenNodes, dessen Aufgabe es ist, Hindernisse vor dem Pioneer mit Hilfe des Sonars zuerkennen, die aktuelle Bewegung daraufhin zu stoppen und den Roboter zu drehen,bis der Weg wieder frei ist.

Um weiterhin ROS in den Vordergrund zu stellen, wird Ihnen ein Template fur die-sen Node zur Verfugung gestellt, worin der algorithmische Teil der Aufgabe bereitsenthalten ist und die ROS-spezifischen Strukturen noch zu erganzen sind. In diesemPraktikum wird ausschließlich C++ zur Implementierung von Nodes verwendet. Siekonnen die Aufgabe auch mit Python losen, dafur liegen aktuell aber weder Templatenoch Musterlosung vor.

ROS C++ Klassen:

• ros::NodeHandle - Schnittstelle zum Erstellen von Subscribern und Pu-blishern

• ros::Publisher - Managt das Senden von Messages an ein Topic

• ros::Subscriber - Managt das Empfangen von Messages uber ein Topic

• ros::Rate - Stellt Schleifen in einer gewunschten Frequenz bereit

Aufgaben:

• Erstellen Sie den Ordner src in Ihrem Package und kopieren Sie die Dateisonar_motion_stop.cpp aus dem Ordner Templates auf Ihrem Desktopdorthin!

• Vervollstandigen Sie den Node sonar_motion_stop indem Sie alle mit TO-DO markierten Stellen im C++ - Template abarbeiten!

• Ersetzen Sie die Datei CMakeLists.txt in Ihrem Package durch die gleich-namige Datei aus dem Template-Ordner!

• Erstellen Sie Ihren Catkin-Workspace, um Ihren Node zu kompilieren. Nut-zen Sie dazu den Befehl catkin_make (falls der Node nicht erstellt wird,erganzen Sie die Option --force-cmake).

17

Page 20: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

• Erweitern Sie Ihr Launch-File um den erstellten Node! Entfernen Sie dasRemapping des Topics cmd_vel aus der vorherigen Aufgabe! Testen SieIhren Node, indem Sie den Pioneer mit dem Gamepad auf einen Kartonzusteuern!

4.9 Tranformationen und Frames

Transformationen und Frames kennen Sie bereits aus der Robotik Vorlesung. In ROSwerden Frames uber ihren Namen, die frame_id eindeutig identifiziert. Die Bezie-hung zwischen zwei Frames wird durch durch eine relative Pose mit 6 Freiheitsgradenreprasentiert, die aus einer Translation gefolgt von einer Rotation besteht. Seien Wund A zwei Frames, dann ist die Pose von A in W gegeben durch die Translation vomW-Ursprung zum A-Ursprung und der Rotation der A-Koordinatenachsen in W. DieTranslation ist dabei ein Vektor mit drei Elementen in W-Koordinaten. Die Rotationvon A is gegeben durch eine Rotationsmatrix.

Das Package tf6 bietet umfangreiche Moglichkeiten mit Frames und Transformatio-nen sowie ihren Anderungen uber die Zeit zu arbeiten. Dafur beinhaltet es verschie-dene Datentypen und Nodes: view_frames ist sehr praktisch zur Visualisierung deraktuell vorhandenen Transformationen und Frames und erzeugt ein PDF-File mitdem entsprechenden Graphen. tf_echo <source_frame> <target_frame> gibt dieTransformation zwischen zwei gewunschten Frames auf der Konsole aus. Der Nodestatic_transform_publisher <x> <y> <z> <yaw> <pitch> <roll> <frame_id>

<child_frame_id> <period_in_ms>7 kann dazu genutzt werden, eine statische Trans-formation (z.B. vom Roboter-Ursprung zu einem verbauten Sensor) dauerhaft ubertf zu publishen. Dabei kann ein translatorischer und rotatorischer Offset angegebenwerden, sowie die Frequenz in der gesendet werden soll.

Transformationen werden in ROS ublicherweise uber das Topic tf bereitgestellt. An-hand der Bezeichnungen von frame_id und child_frame_id lasst sich feststellen,um welche Transformation es sich handelt. Mit Hilfe der Timestamps lasst sich derzeitliche Zusammenhang zwischen Transformationen herstellen.

Die Sonar-Sensoren sind bestenfalls dafur geeignet, Hindernisse in der unmittelbarenUmgebung des Roboters zu erkennen. Wesentlich praziser arbeitet ein Laserscanner,wie der auf dem Pioneer montierte. Dieser tastet einen Halbkreis ab und liefert 180Abstandswerte bis zu 8m pro Zeitintervall. Auf dem Raspberry Pi ist bereits das ROS-Package sicktoolbox wrapper8 installiert. Der passende Node fur das Laserscanner-Modell heißt sicklms.

Mit Hilfe des Scanners ist es moglich den Arbeitsraum des Pioneers zu kartografieren.Dazu wird das SLAM-Verfahren (Simultaneous Localization and Mapping) verwendet,eine Methode mit der ein mobiler Roboter gleichzeitig eine Karte seiner Umgebung er-stellen uns seine Pose innerhalb dieser Karte schatzen kann. Letzteres geschieht dabeidurch Auswertung der Odometrie-Daten des Roboters. Fur dieses Verfahren nutzenwir das bereits installierte ROS-Package gmapping9 mit dem Node slam_gmapping.

Um die Transformation zwischen Karte und Pose des Roboters zu berechnen, werdendie Transformationen vom Startpunkt des Roboters (odom) zu dessen aktuellerPose(base_link), sowie vom Roboter zum Laserscanner (laser) benotigt. Die erste wirdvom RosAria Node bereitgestellt, fur die zweite wird ein static_transform_publisher

6http://wiki.ros.org/tf7Das Attribute args des Node-Tags kann zum Ubergeben von Parametern genutzt werden.8http://wiki.ros.org/sicktoolbox wrapper9http://wiki.ros.org/gmapping

18

Page 21: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

Node benotigt. Damit alle Transformationen zeitlich synchronisiert sind, muss dieserNode auf dem Pi gestartet werden.

Aufgaben:

• Erweitern Sie Ihr Launch-File mit allen Nodes, die Sie zur Kartografie-rung mittels SLAM-Verfahren benotigen! Ubergeben Sie dem Laserscanner-Node die Paramter port=/dev/sicklms und baud=38400! Verwenden Sieeine Transformation vom Roboter zum Laser, bei der alle Werte 0 sind.Ubergeben Sie diese Werte mit dem Attribut args!

• Kartografieren Sie das Labor und lassen Sie sich das Ergebnis in RVizanzeigen!

4.10 ROS Services

Die Kommunikation uber das Modell mit Publisher und Subscriber ist zwar flexi-bel, jedoch nicht sehr geeignet fur Prozeduraufrufe in verteilten System. ROS Ser-vices ermoglichen eine solche Request-Reply-Kommunikation. Ein Service ist definiertdurch zwei Messages, eine fur die Anfrage und eine fur die Antwort. Dabei konnen dieMessages aus einem oder mehreren Message-Typen bestehen, oder auch aus keinem.Die wird in entsprechenden .srv-Dateien innerhalb eines Packages festgelegt. Die Im-plementierung des Services erfolgt innerhalb der Implementierung eines Nodes. Dieserkann den Service dann uber einen in der Implementierung festgelegten Namen anbie-ten. Ein Service kann von einem weiteren Node aufgerufen werden (Client-Node), odermit Hilfe des Konsolenbefehls rosservice call.

Ihre Aufgabe ist es, den Node sonar_motion_stop um einen Service zu erweitern.Erganzen Sie dazu den Node um eine Instanz der Klasse ros::ServiceServer sowiederen Initialisierung durch die NodeHandle-MethodeadvertiseService(string serviceName, callback function). Wird der Serviceaufgerufen, sollen Twist-Messages fur den Publisher generiert werden, so dass derRoboter im hindernisfreien Raum wieder in seine Ursprungspose zuruckfahrt. Dieskonnte in drei Phasen geschehen: 1) Den Roboter rotieren, so dass er sich in Richtungseines Startpunktes ausrichtet. 2) Den Roboter vorwarts fahren lassen, bis er seinenStartpunkt erreicht. 3) Den Roboter rotieren, bis er seine urpsrungliche Null-Posewieder eingenommen hat.

ROS Befehle:

• rosservice - Zeigt Informationen uber verfugbare Services an und ruftdiese auf

Aufgaben:

• Erstellen Sie in Ihrem Package robprak den Ordner srv und kopieren Siedie Datei HeadingHome.srv aus dem Ordner Templates auf Ihrem Desktopdort hin!

19

Page 22: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

• Entfernen Sie die Kommentarzeichen in der Datei CMakeLists.txt in Ih-rem Package fur die Zeilen add_service_files(FILES HeadingHome.srv)!

• Entfernen Sie die Kommentarzeichen fur die mit TODO Aufgabe 4.10 ge-kennzeichnete Funktion in der Datei sonar_motion_stop.cpp!

• Implementieren Sie einen ROS Service fur Ihren Node sonar_motion_stopmit dem oben beschriebenen Ergebnis und testen Sie den Service!

• Hinweise: Nutzen Sie die Behandlungsmethode des Services nur, um eineAntwort zu generieren und setzen Sie Membervariablen so, dass der ei-gentliche Algorithmus in der Methode zum Berechnen der Twist-Messageserfolgt. Verwenden Sie einen zusatzlichen Subscriber fur das Topic tf. Diehieruber gesendeten Messages vom Typ tf2_msgs/TFMessage verwendenQuaternionen fur die Darstellung der Rotation. In der Ebene konnen Siedie aktuelle Rotation des Roboters mittels 2 * asin(z) ermitteln, wobei zden entsprechende Wert der Quaternion darstellt. Sie mussen alle verwen-deten Message-Typen als include hinzufugen: robprak/HeadingHome.h

sowie tf2_msgs/TFMessage.h.

20

Page 23: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

ROS

IndigoCheatsheet

Filesy

stem

ManagementTools

rospack

Ato

ol

for

insp

ecti

ng

pack

ages

.rospackprofile

Fix

esp

ath

an

dp

lugin

lib

pro

ble

ms.

roscd

Ch

an

ge

dir

ecto

ryto

ap

ack

age.

rospd/rosd

Pu

shd

equ

ivale

nt

for

RO

S.

rosls

Lis

tsp

ack

age

or

stack

info

rmati

on

.rosed

Op

enre

qu

este

dR

OS

file

ina

text

edit

or.

roscp

Copy

afi

lefr

om

on

ep

lace

toan

oth

er.

rosdep

Inst

alls

pack

age

syst

emd

epen

den

cies

.roswtf

Dis

pla

ys

aer

rors

an

dw

arn

ings

ab

ou

ta

run

-n

ing

RO

Ssy

stem

or

lau

nch

file

.catkincreatepkg

Cre

ate

sa

new

RO

Sst

ack

.wstool

Man

age

many

rep

os

inw

ork

space

.catkinmake

Bu

ild

sa

RO

Sca

tkin

work

space

.rqtdep

Dis

pla

ys

pack

age

stru

ctu

rean

dd

epen

den

cies

.

Usa

ge:

$rospackfind[package]

$roscd[package[/subdir]]

$rospd[package[/subdir]|+N|-N]

$rosd

$rosls[package[/subdir]]

$rosed[package][file]

$roscp[package][file][destination]

$rosdepinstall[package]

$roswtforroswtf[file]

$catkincreatepkg[packagename][depend1]..[dependN]

$wstool[init|set

|update]

$catkinmake

$rqtdep[options]

Start-u

pand

Pro

cess

Launch

Tools

rosc

ore

Th

eb

asi

sn

od

esan

dp

rogra

ms

for

RO

S-b

ase

dsy

stem

s.A

rosc

ore

mu

stb

eru

nn

ing

for

RO

Sn

od

esto

com

mu

nic

ate

.

Usa

ge:

$roscore

rosr

un

Ru

ns

aR

OS

pack

age’

sex

ecuta

ble

wit

hm

inim

al

typ

ing.

Usa

ge:

$rosrunpackagenameexecutablename

Exam

ple

(ru

ns

turt

lesi

m):

$rosrunturtlesimturtlesimnode

rosl

au

nch

Sta

rts

aro

score

(if

nee

ded

),lo

cal

nod

es,

rem

ote

nod

esvia

SS

H,

an

dse

tsp

ara

met

erse

rver

para

met

ers.

Exam

ple

s:L

au

nch

afi

lein

ap

ack

age:

$roslaunchpackagenamefilename.launch

Lau

nch

on

ad

iffer

ent

port

:$roslaunch-p1234packagenamefilename.launch

Lau

nch

on

the

loca

ln

od

es:

$roslaunch--localpackagenamefilename.launch

Introsp

ection

and

Command

Tools

rosn

od

eD

isp

lays

deb

uggin

gin

form

ati

on

ab

ou

tR

OS

nod

es,

incl

ud

ing

pu

blica

tion

s,su

bsc

rip

tion

san

dco

nn

ecti

on

s.C

om

man

ds:

rosnodeping

Tes

tco

nn

ecti

vit

yto

nod

e.rosnodelist

Lis

tact

ive

nod

es.

rosnodeinfo

Pri

nt

info

rmati

on

ab

ou

ta

nod

e.rosnodemachine

Lis

tn

od

esru

nn

ing

on

am

ach

ine.

rosnodekill

Kill

aru

nn

ing

nod

e.

Exam

ple

s:K

ill

all

nod

es:

$rosnodekill-a

Lis

tn

od

eson

am

ach

ine:

$rosnodemachineaqy.local

Pin

gall

nod

es:

$rosnodeping--all

rost

op

icA

tool

for

dis

pla

yin

gin

form

ati

on

ab

ou

tR

OS

top

ics,

incl

ud

ing

pu

blish

ers,

sub

scri

ber

s,p

ub

lish

ing

rate

,an

dm

essa

ges

.C

om

man

ds:

rostopicbw

Dis

pla

yb

an

dw

idth

use

dby

top

ic.

rostopicecho

Pri

nt

mes

sages

tosc

reen

.rostopicfind

Fin

dto

pic

sby

typ

e.rostopichz

Dis

pla

yp

ub

lish

ing

rate

of

top

ic.

rostopicinfo

Pri

nt

info

rmati

on

ab

ou

tan

act

ive

top

ic.

rostopiclist

Lis

tall

pu

blish

edto

pic

s.rostopicpub

Pu

blish

data

toto

pic

.rostopictype

Pri

nt

top

icty

pe.

Exam

ple

s:P

ub

lish

hel

loat

10

Hz:

$rostopicpub-r10

/topicnamestdmsgs/Stringhello

Cle

ar

the

scre

enaft

erea

chm

essa

ge

isp

ub

lish

ed:

$rostopicecho-c/topicname

Dis

pla

ym

essa

ges

that

matc

ha

giv

enP

yth

on

exp

ress

ion

:$rostopicecho--filter"m.data==’foo’/topicname

Pip

eth

eou

tpu

tof

rost

op

icto

rosm

sgto

vie

wth

em

sgty

pe:

$rostopictype/topicname|rosmsgshow

ross

erv

ice

Ato

ol

for

list

ing

an

dqu

eryin

gR

OS

serv

ices

.C

om

man

ds:

rosservicelist

Pri

nt

info

rmati

on

ab

ou

tact

ive

serv

ices

.rosservicenode

Pri

nt

nam

eof

nod

ep

rovid

ing

ase

rvic

e.rosservicecall

Call

the

serv

ice

wit

hth

egiv

enarg

s.rosserviceargs

Lis

tth

earg

um

ents

of

ase

rvic

e.rosservicetype

Pri

nt

the

serv

ice

typ

e.rosserviceuri

Pri

nt

the

serv

ice

RO

SR

PC

uri

.rosservicefind

Fin

dse

rvic

esby

serv

ice

typ

e.

Exam

ple

s:C

all

ase

rvic

efr

om

the

com

man

d-l

ine:

$rosservicecall/addtwoints12

Pip

eth

eou

tpu

tof

ross

ervic

eto

ross

rvto

vie

wth

esr

vty

pe:

$rosservicetypeaddtwoints|rossrvshow

Dis

pla

yall

serv

ices

of

ap

art

icu

lar

typ

e:$rosservicefindrospytutorials/AddTwoInts

rosp

ara

m

Ato

ol

for

get

tin

gan

dse

ttin

gR

OS

para

met

ers

on

the

para

met

erse

rver

usi

ng

YA

ML

-en

cod

edfi

les.

Com

man

ds:

rosparamset

Set

ap

ara

met

er.

rosparamget

Get

ap

ara

met

er.

rosparamload

Load

para

met

ers

from

afi

le.

rosparamdump

Du

mp

para

met

ers

toa

file

.rosparamdelete

Del

ete

ap

ara

met

er.

rosparamlist

Lis

tp

ara

met

ern

am

es.

Exam

ple

s:L

ist

all

the

para

met

ers

ina

nam

esp

ace

:$rosparamlist/namespace

Set

tin

ga

list

wit

hon

eas

ast

rin

g,

inte

ger

,an

dfl

oat:

$rosparamset/foo"[’1’,1,

1.0]"

Du

mp

on

lyth

ep

ara

met

ers

ina

spec

ific

nam

esp

ace

tofi

le:

$rosparamdumpdump.yaml/namespace

rosm

sg

Dis

pla

ys

Mes

sage/

Ser

vic

e(m

sg/sr

v)

data

stru

ctu

red

efin

itio

ns.

Com

man

ds:

rosmsgshow

Dis

pla

yth

efi

eld

sin

the

msg

/sr

v.

rosmsglist

Dis

pla

yn

am

esof

all

msg

/sr

v.

rosmsgmd5

Dis

pla

yth

em

sg/sr

vm

d5

sum

.rosmsgpackage

Lis

tall

the

msg

/sr

vin

ap

ack

age.

rosmsgpackages

Lis

tall

pack

ages

conta

inin

gth

em

sg/sr

v.

Exam

ple

s:D

isp

lay

the

Pose

msg

:$rosmsgshowPose

Lis

tth

em

essa

ges

inth

en

av

msg

sp

ack

age:

$rosmsgpackagenavmsgs

Lis

tth

ep

ack

ages

usi

ng

sen

sor

msg

s/C

am

eraIn

fo:

$rosmsgpackagessensormsgs/CameraInfo

tfech

o

Ato

ol

that

pri

nts

the

info

rmati

on

ab

ou

ta

part

icu

lar

tran

sform

ati

on

bet

wee

na

sou

rce

fram

ean

da

targ

etfr

am

e.

Usa

ge:

$rosruntftfecho<sourceframe><targetframe>

Exam

ple

s:T

oec

ho

the

tran

sform

bet

wee

n/m

ap

an

d/od

om

:$rosruntftfecho/map/odom

rqt

top

ic

Ato

ol

for

vie

win

gp

ub

lish

edto

pic

sin

real

tim

e.

Usa

ge:

$rqt

PluginMenu->Topic->Topic

Monitor

Page 24: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

rqt

gra

ph

,an

drq

td

ep

Tools

for

dis

pla

yin

ggra

ph

sof

run

nin

gR

OS

nod

esw

ith

con

nec

tin

gto

pic

san

dp

ack

age

dep

end

an

cies

resp

ecti

vel

y.

Usa

ge:

$rqtgraph

$rqtdep

Data

Visualiza

tion

Tools

vie

wfr

am

es

Ato

ol

for

vis

ualizi

ng

the

full

tree

of

coord

inate

tran

sform

s.U

sage:

$rosruntf2toolsviewframes.py

$evinceframes.pdf

ROS

IndigoCatk

inW

ork

space

sC

reate

acatk

inw

ork

space

Set

up

an

du

sea

new

catk

inw

ork

space

from

scra

tch

.

Exam

ple

:$source/opt/ros/indigo/setup.bash

$mkdir-p~/catkinws/src

$cd~/catkinws/src

$catkininitworkspace

Ch

eck

ou

tan

exis

tin

gR

OS

pack

age

Get

alo

cal

copy

of

the

cod

efo

ran

exis

tin

gp

ack

age

an

dkee

pit

up

tod

ate

usi

ng

wst

ool.

Exam

ple

s:$cd~/catkinws/src

$wstoolinit

$wstoolsettut--gitgit://github.com/ros/rostutorials.git

$wstoolupdate

Cre

ate

an

ew

catk

inR

OS

pack

age

Cre

ate

an

ewR

OS

catk

inp

ack

age

inan

exis

tin

gw

ork

space

wit

hca

tkin

crea

tep

ack

age.

Usa

ge:

$catkincreatepkg<packagename>[depend1][depend2]

Exam

ple

:$cd~/catkinws/src

$catkincreatepkgtutorialsstdmsgsrospyroscpp

Bu

ild

all

pack

ages

ina

work

space

Use

catk

inm

ake

tob

uild

all

the

pack

ages

inth

ew

ork

space

an

dth

enso

urc

eth

ese

tup

.bash

toad

dth

ew

ork

space

toth

eR

OS

PA

CK

AG

EP

AT

H.

Exam

ple

s:$cd~/catkinws

$~/catkinmake

$sourcedevel/setup.bash

CM

akeL

ists

.txt

You

rC

MakeL

ists

.txt

file

MU

ST

follow

this

form

at

oth

erw

ise

you

rpack

ages

will

not

bu

ild

corr

ectl

y.cmakeminimumrequired()

Sp

ecif

yth

en

am

eof

the

pack

age

project()

Pro

ject

nam

ew

hic

hca

nre

fer

as

${P

RO

JE

CT

NA

ME}

findpackage()

Fin

doth

erp

ack

ages

nee

ded

for

bu

ild

catkinpackage()

Sp

ecif

yp

ack

age

bu

ild

info

exp

ort

Build

Executa

blesand

Lib

raries:

Use

CM

ake

fun

ctio

nto

bu

ild

exec

uta

ble

an

dlib

rary

targ

ets.

Th

ese

macr

osh

ou

ldca

llaft

ercatkinpackage()

tou

secatkin*

vari

ab

les.

includedirectories(include${catkinINCLUDEDIRS})

addexecutable(hoge

src/hoge.cpp)

addlibrary(fugasrc/fuga.cpp)

targetlinklibraries(hoge

fuga${catkinLIBRARIES})

Messagegeneration:

Th

ere

are

add{message,service,action}files()

macr

os

toh

an

dle

mes

sages

,ser

vic

esan

dact

ion

sre

spec

tivel

y.T

hey

mu

stca

llb

efore

catkinpackage().

findpackage(catkin

COMPONENTSmessagegenerationstdmsgs)

addmessagefiles(FILESMessage1.msg)

generatemessages(DEPENDENCIESstdmsgs)

catkinpackage(CATKINDEPENDSmessageruntime)

Ifyou

rp

ack

age

bu

ild

sm

essa

ges

as

wel

las

exec

uta

ble

sth

at

use

them

,you

nee

dto

crea

tean

exp

lici

td

epen

den

cy.

adddependencies(hoge

${PROJECTNAME}generatemessagescpp)

Copyri

ght

c ©2015

Op

en

Sourc

eR

ob

oti

cs

Foundati

on

Copyri

ght

c ©2010

Willo

wG

ara

ge

Launch

-FileXM

LForm

at

This

secti

on

desc

rib

es

the

XM

LForm

at

use

dfo

rro

slaunch

.launch

file

s.T

hese

are

part

sof

RO

Spack

ages

and

usu

ally

locate

dw

ithin

the

fold

er

packagename/launch/.

<la

un

ch>

tag

The

root

ele

ment

of

any

rosl

aunch

file

acts

as

conta

iner

for

the

oth

er

ele

ments

.

Ele

ments

:<node>

<param>

<remap>

<machine>

<include>

<n

od

e>

tag

Sp

ecifi

es

aR

OS

node

that

you

wis

hto

have

launch

ed.

Att

ribute

s:pkg="mypackage"

-Packageofnode

type="nodetype"

-NodeType

name="nodename"

-Nodename

args=arg1

arg2

arg3"

-Passargumentstonode(optional)

machine="machine-name"-

Launch

node

ondesignatedmachine(optional)

Ele

ments

:<param>

<remap>

<env>

<p

ara

m>

tag

Defines

apara

mete

rto

be

set

on

the

Para

mete

rServ

er.

Att

ribute

s:name="namespace/name"-

Parameter

name

value="value"

-Definestheparametervalue(optional)

type=ßtr|int|double|bool"-Type

oftheparameter(optional)

<re

map>

tag

Allow

syou

topass

innam

ere

mappin

garg

um

ents

toth

eR

OS

node

that

you

are

launch

ing.

Att

ribute

s:from="original-name"

-Namethatyourareremapping

to="new-name"

-Targetname

<m

ach

ine>

tag

Decla

res

are

mote

mach

ine

that

you

can

run

RO

Snodes

on.

Att

ribute

s:name="machine-name"-

Nametoassigntomachine

address="127.0.0.1"-

Network

address

orhostnameofmachine

env-loader=/path/to/env.sh"-Specifyenvironmentfileonmachine

default="true|false|never"-Sets

machine

as

default

(optional)

user="username"-SSHusernamefor

logging

into

machine

(optional)

password="pw"

-SSHpassword(optional)

Ele

ments

:<env>

<env>

tag

Allow

syou

tose

tenvir

onm

ent

vari

able

son

nodes

that

are

launch

ed.

Att

ribute

s:name=environment-variable-name"

-Environmentvariable

youaresetting

value=environment-variable-value"

-Environment

variable

value

<in

clu

de>

tag

Enable

syou

toim

port

anoth

er

rosl

aunch

XM

Lfile

into

the

curr

ent

file

.

Att

ribute

s:file="$(findpkg-name)/path/filename.xml"-Nameoffile

to

include

Page 25: Institut fur Robotik und ... - rob.cs.tu-bs.de · Kapitel 1 Einleitung Aktuelle Robotersysteme bestehen typischerweise neben dem eigentlichen Manipula-tor aus zahlreichen zus atzlichen

C++

Reference

forROS

ros:

:Nod

eH

an

dle

Cla

ssro

scpp’s

inte

rface

for

cre

ati

ng

subsc

rib

ers

,publi

shers

,etc

.Y

ou

must

call

one

of

theros::init

functi

ons

pri

or

toin

stanti

ati

ng

this

cla

ss.

Meth

ods:

Publisheradvertise(string

topicName,int

queueSize)

Retu

rns

aro

s::P

ublish

er

and

noti

fies

the

mast

er

that

the

node

will

be

publish

ing

mess

ages

on

the

giv

en

topic

Subscribersubscribe(string

topicName,int

queueSize,

functioncallback)

Retu

rns

aro

s::S

ubsc

rib

er

and

noti

fies

the

mast

er

tore

gis

ter

inte

rest

ina

giv

en

topic

ServiceServeradvertiseService(stringserviceName,

functioncallback)

Retu

rns

aro

s::S

erv

iceServ

er

and

noti

fies

the

mast

er

tore

gis

ter

the

pro

vid

ed

serv

ice

ros:

:Pu

bli

sher

Cla

ssM

anages

an

advert

isem

ent

on

asp

ecifi

cto

pic

.

Meth

ods:

voidpublish(constM&message)

-P

ublish

am

ess

age

on

the

topic

ass

ocia

ted

wit

hth

isP

ublish

er

ros:

:Su

bsc

rib

er

Cla

ssM

anages

an

subsc

ripti

on

callback

on

asp

ecifi

cto

pic

.

ros:

:Serv

iceS

erv

er

Cla

ssM

anages

an

serv

ice

advert

isem

ent.

ros:

:Rate

Cla

ssC

lass

tohelp

run

loops

at

adesi

red

frequency.

Meth

ods:

Rate(doublefrequency)

-C

onst

ructo

r,cre

ate

sa

Rate