institut fur robotik und ... - rob.cs.tu-bs.de · kapitel 1 einleitung aktuelle robotersysteme...
TRANSCRIPT
Institut fur Robotik und Prozessinformatik
Technische Universitat Braunschweig
Prof. Dr. J. Steil
ROBOTIKPRAKTIKUM
Versuch 6
ROS - Robot Operating System
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
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
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
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
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
• 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
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
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
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
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
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
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
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
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
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
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
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
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
• 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
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
• 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
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
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
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