Einverständnis von Roboception bzw. des Inhabers des Schutzrechts verwendet und verbreitet werden. Das vorliegende Handbuch und das darin beschriebene Produkt dürfen ohne das vorherige Einverständnis von Roboception weder für Verkaufs- noch für andere Zwecke weder teilweise noch vollständig vervielfältigt werden.
Die Installation und Steuerung all dieser Sensoren sind absolut identisch. Zudem verwenden alle den gleichen Montagesockel. Bemerkung: Sofern nicht anders angegeben, gelten die in diesem Handbuch enthaltenen Informationen für beide Versionen des Roboception-Sensors, d.h. für den rc_visard 65 und den rc_visard 160. 1.1. Überblick...
Seite 6
Bemerkung: Das vorliegende Handbuch nutzt das metrische System und verwendet vorrangig die Maßeinhei- ten Meter und Millimeter. Sofern nicht anders angegeben, sind Abmessungen in technischen Zeichnungen in Millimetern angegeben. 1.1. Überblick...
1.2 Garantie Jede Änderung oder Modifikation der Hard- oder Software dieses Produkts, die nicht ausdrücklich von Robocep- tion genehmigt wurde, kann zum Verlust der Gewährleistungs- und Garantierechte führen. Warnung: Der rc_visard arbeitet mit komplexer Hardware- und Software-Technologie, die sich ggf. nicht immer so verhält, wie es der Benutzer beabsichtigt.
1.3 Schnittstellen, Zulassungen und Normen 1.3.1 Schnittstellen Der rc_visard unterstützt folgende Standardinterfaces: Der generische Schnittstellenstandard für Kameras ist die Grundlage für die Plug-&-Play-Handhabung von Ka- meras und Geräten. GigE Vision® ist ein Interfacestandard für die Übermittlung von Hochgeschwindigkeitsvideo- und zugehörigen Steuerdaten über Ethernet-Netzwerke.
Seite 9
• EN 55024 : 2010 +A1:2015 Information technology equipment, Immunity characteristics, Limits and me- thods of measurement • CISPR 24 : 2015 +A1:2015 International special committee on radio interference, Information technology equipment-Immunity characteristics-Limits and methods of measurement • EN 61000-6-2 : 2005 Electromagnetic compatibility (EMC) Part 6-2:Generic standards - Immunity for industrial environments •...
1.4 Glossar DHCP Das Dynamic Host Configuration Protocol (DHCP) wird verwendet, um einem Netzwerkgerät automa- tisch eine IP-Adresse zuzuweisen. Einige DHCP-Server akzeptieren lediglich bekannte Geräte. In diesem Fall muss der Administrator die feste eines Gerätes im DHCP-Server erfassen. MAC-Adresse mDNS Das Domain Name System (DNS) verwaltet die Host-Namen und IP-Adressen aller Netzwerkgeräte. Es dient dazu, den Host-Namen zur Kommunikation mit einem Gerät in die IP-Adresse zu übersetzen.
Seite 11
PTP Das Precision Time Protocol (PTP, auch als IEEE1588 bekannt) ist ein Protokoll, welches genauere und robustere Synchronisation der Uhren erlaubt als NTP. SDK Ein Software Development Kit (SDK) ist eine Sammlung von Softwareentwicklungswerkzeugen bzw. von Softwaremodulen. SGM SGM steht für Semi-Global Matching, einen hochmodernen Stereo-Matching-Algorithmus, der sich durch kurze Laufzeiten und eine hohe Genauigkeit –...
2 Sicherheit Warnung: Vor Inbetriebnahme des rc_visard-Produkts muss der Bediener alle Anweisungen in diesem Hand- buch gelesen und verstanden haben. Bemerkung: Der Begriff „Bediener“ bezieht sich auf jede Person, die in Verbindung mit dem rc_visard mit einer der folgenden Aufgaben betraut ist: •...
Warnung: Der rc_visard muss an gesicherte interne Netzwerke angeschlossen werden. Der rc_visard darf nur im Rahmen seiner technischen Spezifikation verwendet werden. Jede andere Verwendung des Produkts gilt als nicht bestimmungsgemäße Verwendung. Roboception haftet nicht für Schäden, die aus un- sachgemäßer oder nicht bestimmungsgemäßer Verwendung entstehen.
• Netzteil, Kabel und Sicherungen, • Netzwerkkabel. In Abschnitt Zubehör (Abschnitt 10) ist angegeben, welche Kabelanbieter Roboception empfiehlt. Für den rc_visard ist ein Anschlussset verfügbar. Dieses Set umfasst das M12/RJ45-Netzwerkkabel, ein 24-V- Netzteil und einen DC/M12-Adapter. Für nähere Informationen siehe Zubehör (Abschnitt 10).
3.2 Technische Spezifikation Tab. 3.1 enthält die gemeinsame technische Spezifikation für alle rc_visard-Varianten. Der rc_visard 160 ist mit zwei Arten von Objektiven erhältlich: 4 mm und 6 mm Brennweite. Der rc_visard 65 ist nur mit 4 mm Objektiven erhältlich. Tab. 3.1: Gemeinsame technische Spezifikation für beide rc_visard Ba- sisabstände.
Seite 16
Mittlere Tiefenge- nauigkeit (mm) 1000 2000 14.2 13.0 3000 32.1 Der rc_visard kann für zusätzliche Funktionalitäten mit On-Board-Softwaremodulen, wie z.B. SLAM, ausgestattet werden. Diese Softwaremodule können über den Roboception Webshop bestellt werden und benötigen ein Lizenz- Update. 3.2. Technische Spezifikation...
Seite 17
21.5 32.5 74.5 (96) Abb. 3.2: Abmessungen des rc_visard 65 21.5 62.5 (84) Abb. 3.3: Abmessungen des rc_visard 160 3.2. Technische Spezifikation...
CAD-Modelle des rc_visard können von der Roboception-Homepage heruntergeladen werden: http://www. roboception.com/download. Die CAD-Modelle werden nach bestem Wissen und Gewissen, aber ohne Garantie für die Richtigkeit bereitgestellt. Wird als Materialeigenschaft Aluminium zugewiesen (Dichte: 2.76 ), weicht das CAD-Modell in Bezug auf Gewicht und Massenschwerpunkt nicht mehr als fünf Prozent und in Bezug auf das Trägheitsmoment nicht mehr als zehn Prozent vom Produkt ab.
Tab. 3.5: Grenzwerte für die Stromversorgung Minimum Bemessungswert Maximum Versorgungsspannung 18 V 24 V 30 V Max. Leistungsaufnahme 25 W Überstromschutz Schutz der Stromversorgung mit einer 2-A-Sicherung Erfüllung der EMV-Anforderungen siehe Normen (Abschnitt 1.3.3) Warnung: Die Überschreitung der maximalen Bemessungswerte kann zu Schäden am rc_visard, am Netzteil und an angeschlossener Ausrüstung führen.
Die Anschlüsse sind so gedreht, dass die üblicherweise 90° abgewinkelten Stecker horizontal abgehen und von der Kamera (und den Kühlrippen) wegzeigen. Ethernet M12 8-Pin Buchse A-kodiert, Blick auf die Kamera Power/GPIO M12 8-Pin Stecker A-kodiert, Blick auf die Kamera Abb. 3.5: Steckerbelegung für den Strom- und Ethernetanschluss Die Steckerbelegung für den Ethernetanschluss ist in Abb.
Warnung: Es ist besonders wichtig, dass GPIO Eingang 1 während des Boot-Vorgangs ungeerdet oder auf LOW gesetzt ist. Der rc_visard fährt nicht hoch, wenn der Pin während des Boot-Vorgangs auf HIGH gesetzt ist. Das GPIO-Schaltschema und die zugehörigen Spezifikationen sind in Abb.
UNC 1/4"-20, Gewindetiefe = 5 3x M4 Montage- +0.05 gewinde für dynamische Anwendungen Optische Achse Abb. 3.8: Montagepunkt für den Anschluss des rc_visard an Roboter oder andere Vorrichtungen Zur Fehlerbehebung sowie zu Konfigurationszwecken kann der Sensor über die am Koordinatenursprung angege- bene, genormte Stativaufnahme (Gewinde: 1/4 Zoll x 20) montiert werden.
Seite 23
~31.5 21.5 32.5 74.5 (96) Abb. 3.9: Ungefähre Position des Sensor-/Kamerakoordinatensystems (in der linken Kameralinse) und des Montagepunkt-Koordinatensystems (am Stativgewinde) für den rc_visard 65 Die ungefähre Position des Sensor-/Kamerakoordinatensystems und des Montagepunkt-Koordinatensystems für den rc_visard 160 ist in Abb. 3.10 angegeben.
4 Installation Warnung: Vor Installation des Gerätes müssen die Hinweise zur Sicherheit (Abschnitt 2) des rc_visard gele- sen und verstanden werden. 4.1 Installation und Konfiguration Für den Anschluss an ein Computernetzwerk verfügt der rc_visard über eine Gigabit-Ethernet-Schnittstelle. Die gesamte Kommunikation mit dem Gerät wird über diese Schnittstelle abgewickelt. Der rc_visard besitzt zudem eine eigene Prozessierungseinheit, welche nach dem Starten des Geräts eine gewisse Zeit für den Boot-Vorgang benötigt.
4.4 Aufspüren von rc_visard-Geräten Roboception-Geräte, die eingeschaltet und mit dem lokalen Netzwerk oder direkt mit einem Computer verbunden sind, können über den Discover-Mechanismus von GigE Vision® ausfindig gemacht werden. Das Open-Source-Tool rcdiscover-gui kann für Windows und Linux kostenlos von der Roboception-Homepage heruntergeladen werden: http://www.roboception.com/download.
Abb. 4.3: Reset-Dialog des -Tools rcdiscover-gui Wird ein rc_visard trotz falscher Konfiguration vom Discovery-Mechanismus erkannt, kann er aus der rc_visard- Dropdown-Liste gewählt werden. Anderenfalls kann die auf dem rc_visard aufgedruckte MAC-Adresse manuell im vorgesehenen Feld eingegeben werden. Nach Eingabe der MAC-Adresse kann aus vier Optionen gewählt werden: •...
Seite 27
GigE Vision® 2.0 kompatibel sind, wie zum Beispiel das gra- phische IpConfigTool, welches Teil des Baumer GAPI SDK ist, oder das Roboception Kommandozeilen- gc _ config programm . Üblicherweise wird nach dem Start dieser Programme das Netzwerk nach allen verfügbaren GigE Vision®-Sensoren durchsucht. Alle rc_visard-Geräte können über ihre Seriennummer und MAC-Adresse, die beide auf dem Gerät aufgedruckt sind, eindeutig identifiziert werden.
4.5.1 Host-Name Der Host-Name des rc_visard basiert auf dessen Seriennummer, welche auf dem Gerät aufgedruckt ist, und lautet rc-visard-<serial number> 4.5.2 Automatische Konfiguration (werkseitige Voreinstellung) Für die Zuweisung von IP-Adressen wird bevorzugt auf DHCP zugegriffen. Ist DHCP (werkseitige Voreinstel- lung auf dem rc_visard) aktiviert, versucht das Gerät, wann immer das Netzwerkkabel eingesteckt wird, einen DHCP-Server zu kontaktieren.
Seite 29
Für Linux und macOS funktioniert das ohne DNS über das Multicast-DNS-Protokoll (mDNS), das automa- tisch aktiviert wird, wenn .local zum Host-Namen hinzugefügt wird. So wird die URL einfach zu: http:// <host-name>.local Die Überblicksseite der Web GUI enthält die wichtigsten Informationen über das Gerät und die Softwaremodule. Abb.
Seite 30
Koordinatensystem eines Roboterarms oder ein beliebiges statisches Koordinatensystem im Arbeitsraum des Roboters handeln, je nachdem, ob die Kamera am Flansch oder statisch im Roboterumfeld installiert ist. Für nähere Informationen siehe Hand-Auge-Kalibrierung (Abschnitt 6.7). Module ermöglicht den Zugriff auf die optionalen Softwaremodule des rc_visard (siehe Optionale Softwaremo- dule, Abschnitt 7).
Umgebung ausgehende oder reflektierte Licht genutzt wird. Dadurch können die Roboception-Sensoren sowohl im Innen- als auch im Außenbereich eingesetzt werden. Zudem können problemlos mehrere Sensoren störungsfrei zusammen auf engem Raum betrieben werden.
Um die 3D-Informationen berechnen zu können, muss der Stereo-Matching-Algorithmus die zusammengehören- den Objektpunkte im linken und rechten Kamerabild finden. Hierfür bedient er sich der Bildtextur, d.h. der durch Muster oder Oberflächenstrukturen der Objekte verursachten Schwankungen in der Bildintensität. Das Stereo- Matching-Verfahren kann bei Oberflächen ohne jede Textur, wie z.B.
Seite 33
Ansicht A 3D-Positionen Ansicht A Ansicht B Pose B Pose A beobachtete Bewegung 3D-Positionen berechnete Ansicht B Kamerabewegung Abb. 5.2: Vereinfachte schematische Darstellung der stereobasierten visuellen Odometrie für 2D-Bewegungen: Die Kamerabewegung wird auf Grundlage der beobachteten Bewegung charakteristischer Bildpunkte berechnet. Da die visuelle Odometrie auf eine gute Qualität der Bilddaten angewiesen ist, verschlechtern sich die Bewegungs- schätzungen, wenn Bilder verschwommen oder schlecht beleuchtet sind.
6 Softwaremodule Der rc_visard wird mit einer Reihe von On-Board-Softwaremodulen mit verschiedenen Funktionalitäten ausge- liefert. Jedes Softwaremodul bietet über seinen zugehörigen Node eine REST-API-Schnittstelle (Abschnitt 8.2) als Programmierschnittstelle an. Die Module für die Stereokamera und das Stereo-Matching, welche die Stereo-Bildpaare und die 3D- Tiefeninformationen bereitstellen, sind auch über die des rc_visard konfi- GigE Vision/GenICam-Schnittstelle...
auch als GenICam-Bild-Streams bereitgestellt. rc _ dynamics • Sensordynamik , Abschnitt 6.3.) erstellt Schätzungen des dynamischen Zustands des rc_visard, d.h. seiner Pose, Geschwindigkeit und Beschleunigung. Diese Zustände werden als kon- tinuierliche Datenströme über die rc_dynamics-Schnittstelle übertragen. Zu diesem Zweck verwaltet und verknüpft das Dynamik-Modul Daten aus den folgenden Submodulen: rc _ stereovisodo –...
Rektifizierung bezeichnet den Prozess, Bilder auf Grundlage eines idealen Stereokamera-Modells zu reprojizie- ren. Dabei wird die Objektivverzeichnung korrigiert und die Bilder werden so ausgerichtet, dass ein Objektpunkt in beiden Aufnahmen immer auf die gleiche Bildzeile projiziert wird. Die Sichtachsen der Kameras liegen genau parallel zueinander.
Übersicht über die Parameter Dieses Softwaremodul bietet folgende Laufzeitparameter: rc _ stereocamera Tab. 6.1: Laufzeitparameter des -Moduls Name Min. Max. Default Beschreibung exp _ auto bool false true true Umschalten zwischen automatischer und manueller Belichtung exp _ auto _ mode string Normal Modus für automatische Belichtung, Normal...
Beschreibung der Laufzeitparameter Abb. 6.2: Seite Kamera in der Web GUI (Bildwiederholrate) Dieser Wert bezeichnet die Bildwiederholrate der Kamera in Bildern pro Sekunde und begrenzt zugleich die Frequenz, mit der Tiefenbilder berechnet werden können. Die Bildwiederholrate ent- spricht auch der Frequenz, mit welcher der rc_visard Bilder über GigE Vision bereitstellt. Wird diese Fre- quenz verringert, reduziert sich auch die zur Übertragung der Bilder benötigte Bandbreite des Netzwerks.
für das Stereo-Matching und das Übertragen per GigE Vision benutzt werden. Letzteres dient der Reduktion der Bandbreite. Interne Aufnahme Kamerabild Abb. 6.3: Die interne Bildaufnahme geschieht immer mit 25 Hz. Der Parameter bestimmt, wie viele dieser Kamerabilder per GigE Vision versendet werden. exp _ auto (Belichtungszeit Auto oder Manuell) Dieser Wert lässt sich für den automatischen Belichtungsmodus auf true und für den manuellen Belichtungsmodus auf false setzen.
Seite 40
wb _ auto (Weißabgleich Auto oder Manuell) Dieser Wert kann auf true gesetzt werden, um den automatischen wb _ ratio _ red Weißabgleich anzuschalten. Bei false kann das Verhältnis der Farben manuell mit wb _ ratio _ blue wb _ ratio _ red wb _ ratio _ blue gesetzt werden.
(Fortsetzung der vorherigen Seite) "int16" "value": reset _ defaults Hiermit werden die Werkseinstellungen der Parameter dieses Moduls wiederhergestellt und ange- wandt („factory reset“). Warnung: Der Benutzer muss bedenken, dass bei Aufruf dieses Services die aktuellen Parame- tereinstellungen für das Stereokamera-Modul unwiderruflich verloren gehen. Dieser Service hat keine Argumente.
Unabhängig vom eingesetzten Verfahren ist es beim Stereo-Matching wichtig, dass das Bild über eine gewisse Textur verfügt, durch Muster oder Oberflächenstrukturen. Bei einer gänzlich untexturierten Szene, wie einer wei- ßen Wand ohne jede Struktur, können Disparitätswerte entweder nicht berechnet werden, oder aber die Ergebnisse sind fehlerhaft oder von geringer Konfidenz (siehe Konfidenz- und Fehlerbilder, Abschnitt 6.2.3).
Bemerkung: Auf der Homepage von Roboception (http://www.roboception.com/download) stehen Software und Beispiele zur Verfügung, um Disparitätsbilder, welche über GigE Vision vom rc_visard empfangen wer- den, in Tiefenbilder und Punktwolken umzuwandeln. 6.2.3 Konfidenz- und Fehlerbilder Für jedes Disparitätsbild wird zusätzlich ein Fehler- und ein Konfidenzbild zur Verfügung gestellt, um die Unsi- cherheit jedes einzelnen Disparitätswerts anzugeben.
Seite 44
Übersicht über die Parameter Dieses Softwaremodul bietet folgende Laufzeitparameter: rc _ stereomatching Tab. 6.3: Laufzeitparameter des -Moduls Name Min. Max. Default Beschreibung acquisition _ mode string Continuous SingleFrame (Einzelbild), SingleFrameOut1 (Einzelbild+Out1) oder Continuous (Kontinuierlich) int32 Disparitätsbereich in Pixeln disprange fill int32 Disparitätstoleranz (für das Füllen von Löchern) in Pixeln...
Seite 45
Abb. 6.5: Seite Tiefenbild der Web GUI acquisition _ mode (Aufnahmemodus) Der Aufnahmemodus kann auf Continuous (Kontinuierlich), SingleFrame (Einzelbild) oder SingleFrameOut1 (Einzelbild + Out1) eingestellt werden. Kontinu- ierlich ist die Standardeinstellung, bei der das Stereo-Matching kontinuierlich mit der vom Benutzer eingestellten Bildwiederholrate, entsprechend der verfügbaren Rechenressourcen, durchgeführt wird.
Seite 46
durchgeführt. Der Einzelbild + Out1 Modus kontrolliert zusätzlich einen externen Projektor, falls dieser an GPIO-Ausgang 1 angeschlossen ist (IOControl und Projektor-Kontrolle, Abschnitt 7.2). In diesem Modus out1 _ mode wird des IOControl-Moduls automatisch bei jedem Trigger auf ExposureAlternateActive und nach dem Aufnehmen der Bilder für das Stereo-Matching auf gesetzt.
Seite 47
Disparitätsbild glättet. Größere Werte führen zu einer Überglättung und beanspruchen mehr Bearbeitungs- zeit. Der Medianfilter lässt sich effektiv abschalten, wenn dieser Parameter auf den Wert 1 gesetzt wird. (Minimale Konfidenz) Die minimale Konfidenz lässt sich einstellen, um potenziell falsche Disparitäts- minconf messungen herauszufiltern.
Seite 48
"return _ code": { "message": "string", "int16" "value": Mögliche Rückgabewerte sind in der Tabelle unten aufgeführt. acquisition _ trigger Tab. 6.5: Mögliche Rückgabewerte des Ser- viceaufrufs. Code Beschreibung Erfolgreich Triggern ist nur im Einzelbild-Modus möglich. Triggern wird ignoriert, da bereits ein anderer Triggeraufruf stattfindet. Triggern wird ignoriert, da keine Empfänger registriert sind.
6.3 Sensordynamik Das Dynamik-Modul rc_dynamics liefert Schätzungen des Sensorzustands, der die Pose (Position und Orientie- rung), Lineargeschwindigkeit, Linearbeschleunigung und Drehrate des Sensors umfasst. Mit diesem Modul lassen sich Datenströme für die verschiedenen Submodule starten, stoppen und verwalten: rc _ stereovisodo •...
Die Transformation zwischen dem IMU-Koordinatensystem und dem Kamera/Sensor-Koordinatensystem wird ebenfalls geschätzt und über die rc_dynamics-Schnittstelle im Echtzeit-Dynamik-Datenstrom bereitgestellt (siehe Schnittstellen, Abschnitt 8). Warnung: Das Stereo-INS-Modul führt während der Initialisierung eine Selbstkalibrierung der IMU durch. Deswegen darf sich der rc_visard während des Startens des Stereo-INS-Moduls nicht bewegen und muss ausreichend viel Textur sehen können.
Seite 51
Datenströmen enthaltenen Werte entsprechen den Werten in den Echtzeit-Dynamik-Datenströmen, geben aber die Pose im Sensor/Kamera-Koordinatensystem statt im IMU-Koordinatensystem an. dynamics _ ins Echtzeit-Dynamik-Datenströme ( dynamics dynamics _ ins Die beiden Echtzeit-Dynamik-Datenströme heißen und sie werden mit der IMU- dynamics Frequenz von 200 Hz bereitgestellt. dynamics bietet eine Best-Effort-Schätzung, für die SLAM...
Seite 52
6.3.4 Services Das Sensordynamik-Modul bietet folgende Services zum Starten der Dynamik-/Bewegungsschätzung. Alle Ser- vices geben einen numerischen Code des eingetretenen Zustands zurück. Die Bedeutung der zurückgegebenen Zustandscodes und deren Namen werden in Tab. 6.7 angegeben. Tab. 6.7: Mögliche Zustände des Sensordynamik-Moduls Zustandsname Beschreibung IDLE...
Seite 53
"accepted": "bool", "current _ "string" state": stop _ slam stoppt das SLAM-Modul. Das Stereo-INS-Modul läuft weiter. Die Trajektorienschätzung des SLAM-Moduls (bis zum Zeitpunkt des Stoppens) ist weiterhin verfügbar. Der Zustand geht von RUNNING _ WITH _ SLAM IDLE Dieser Service hat keine Argumente. Die Definition der Response mit jeweiligen Datentypen ist: "accepted": "bool", "current _...
Seite 54
Abb. 6.7: Vereinfachtes Zustandsdiagramm Die Services sollten schnell reagieren. Deswegen ist bei Services, die eine Zustandsänderung verursachen, der current _ state Rückgabewert im Allgemeinen der erste neue (Zwischen-)Zustand, in den gewechselt wurde, current _ state WAITING _ FOR _ INS und nicht der finale Zustand.
(Fortsetzung der vorherigen Seite) "message": "string", "int16" "value": 6.4 Visuelle Odometrie Die visuelle Odometrie ist Teil des Sensordynamik-Moduls. Sie dient dazu, die Bewegung der Kamera aus der Bewegung charakteristischer Bildpunkte (sogenannter Bildmerkmale) im linken Kamerabild zu schätzen. Bild- merkmale werden auf Basis von Eckpunkten, Bildbereichen mit hohen Intensitätsgradienten, errechnet. Mithilfe von Bildmerkmalen lassen sich Übereinstimmungen zwischen aufeinanderfolgenden Bildern finden.
Seite 56
Beschreibung der Laufzeitparameter Laufzeitparameter beeinflussen die Anzahl an Bildmerkmalen, auf deren Grundlage die Berechnungen für die vi- suelle Odometrie vorgenommen werden. Ein Mehr an Bildmerkmalen erhöht die Robustheit der visuellen Odome- trie, geht jedoch zu Lasten einer längeren Laufzeit, was wiederum die Frequenz der visuellen Odometrie verringern kann.
Seite 57
Jeder Laufzeitparameter ist durch eine eigene Zeile auf der Seite Dynamik der Web GUI repräsentiert. Der Na- me der Zeile ist in Klammern hinter dem Namen des Parameters angegeben und die Parameter werden in der Reihenfolge, in der sie in der Web GUI erscheinen, aufgelistet: start (Dynamik) Dieser Parameter startet die Module für die Schätzungen zur Sensordynamik (siehe Services, Abschnitt 6.3.4).
Das Visuelle-Odometrie-Modul bietet folgende Services, um Parametereinstellungen zu speichern bzw. wieder- herzustellen. save _ parameters Beim Aufruf dieses Services werden die aktuellen Parametereinstellungen zur visuellen Odometrie auf dem rc_visard gespeichert. Das bedeutet, dass diese Werte selbst nach einem Neustart angewandt werden.
6.5.1 Selbstkalibrierung Das Stereo-INS-Modul führt während seines Startvorgangs eine Selbstkalibrierung der IMU anhand von visuellen Odometriemessungen durch. Für eine erfolgreiche Selbstkalibrierung muss während des Startvorgangs des Stereo- INS-Moduls folgendes erfüllt sein: • Der rc_visard darf sich nicht bewegen und • ausreichend viel Textur muss sichtbar sein. Sind diese Bedingungen nicht erfüllt, kann das zu einem konstanten Drift in der Posenschätzung führen.
Schritt 1: Einstellung der Kalibrierparameter Die Qualität der Kamerakalibrierung hängt stark von der Qualität des Kalibriermusters ab. Kalibriermuster für den rc_visard können von Roboception bezogen werden. Abb. 6.9: Kalibriereinstellungen Um die Kalibrierung der Kamera überprüfen bzw. neu durchführen zu können, muss in der...
Seite 61
mit einem grünen Haken belegt. Das Muster kann nur dann korrekt erkannt werden, wenn alle schwarzen Quadrate erkannt werden. Nachdem das Muster vollständig erkannt wurde, wird der Kalibrierfehler automatisch berechnet und das Ergebnis auf dem Bildschirm angegeben. Abb. 6.10: Überprüfung der Kalibrierung Werden einige der Quadrate nicht oder nur für kurze Zeit erkannt, so kann dies an schlechten Lichtverhältnissen oder einem beschädigten Kalibriermuster liegen.
kann die manuelle Kalibrierung sogar dazu führen, dass die Kameras dekalibriert werden! Schritt 3: Durchführung der Kalibrierung Bevor die Kalibrierung vorgenommen wird, sollte die Belichtungszeit der Kamera richtig eingestellt werden. Um ein gutes Kalibrierergebnis zu erzielen, sollten die Bilder gut belichtet und Bildrauschen vermieden werden. Die maximale Belichtungszeit im automatischen Modus sollte groß...
Häufig wird der Fehler begangen, das Muster bei der Kalibrierung falsch herum zu halten. Dieser Fehler lässt sich leicht erkennen, da sich die von den Musterecken zu den grünen Rechtecken verlaufenden Linien in diesem Fall kreuzen (siehe Abb. 6.12). Abb. 6.12: Wird das Kalibriermuster falsch herum gehalten, kreuzen sich die grünen Linien. Bemerkung: Die Kalibrierung mag umständlich erscheinen, da das Muster hierfür in bestimmten vordefinier- ten Stellungen gehalten werden muss.
Stereokalibrierung Nachdem die Monokalibrierung abgeschlossen ist bzw. wenn sie übersprungen wurde, beginnt der Prozess der Stereokalibrierung. Bei der Stereokalibrierung wird die relative Rotation und Translation der Kameras zueinander ermittelt. Zunächst sollte das Muster in einem Abstand von weniger als 40 cm vor den Sensor gehalten werden. Es muss auf beiden Bildern vollständig sichtbar sein und die Blickrichtung der Kameras sollte senkrecht zum Muster stehen.
Kalibriermodul übertragen werden kann. Kalibrierroutine (Abschnitt 6.7.3) ist ein benutzerfreundliches dreistufiges Verfahren, für das mit einem Ka- libriermuster gearbeitet wird. Entsprechende Kalibriermuster können von Roboception bezogen werden. 6.7.1 Kalibrierschnittstellen Für die Durchführung der Hand-Auge-Kalibrierung stehen die folgenden beiden Schnittstellen zur Verfügung: 1.
Bemerkung: Für den beschriebenen Ansatz wird eine Netzwerkverbindung zwischen dem rc_visard und der Robotersteuerung benötigt, damit die Steuerung die Roboterposen an das Kalibriermodul des rc_visard übertragen kann. 2. Für Anwendungsfälle, bei denen sich die Roboterposen nicht programmgesteuert an das Modul zur Hand- Auge-Kalibrierung des rc_visard übertragen lassen, sieht die Seite Hand-Auge-Kalibrierung der Web GUI (Abschnitt 4.6) einen geführten Prozess vor, mit dem sich die Kalibrierroutine manuell durchführen lässt.
Seite 67
Kamera robot camera Roboter robot Kalibriermuster Abb. 6.16: Wichtige Koordinatensysteme und Transformationen für die Kalibrierung einer robotergeführten Ka- mera: Sie wird mit einer festen relativen Position zu einem benutzerdefinierten Roboter-Koordinatensystem (z.B. Flansch oder Werkzeugmittelpunkt) montiert. Es ist wichtig, dass die Pose T des Roboter-Koordinatensystems robot in Bezug auf ein benutzerdefiniertes externes Referenzkoordinatensystem (ext) während der Kalibrierroutine ge-...
Seite 68
Bemerkung: Für das Modul zur Hand-Auge-Kalibrierung spielt es keine Rolle, wie das Kalibriermuster in Bezug auf das benutzerdefinierte Roboter-Koordinatensystem genau angebracht und positioniert wird. Das bedeutet, dass die relative Positionierung des Kalibriermusters zu diesem Koordinatensystem weder bekannt sein muss, noch für die Kalibrierroutine relevant ist (siehe in Abb.
Seite 69
Kamera Kamera Roboter Roboter Abb. 6.19: Alternative Montageoptionen für die Befestigung des Kalibriermusters am Roboter Zusätzliche Benutzereingaben werden benötigt, falls die Bewegung des Roboters so beschränkt ist, dass der Tool Center Point (TCP) nur um eine Achse rotieren kann. Das ist üblicherweise für Roboter mit vier Freiheitsgraden (4DOF) der Fall, welche häufig zur Palettierung eingesetzt werden.
Seite 70
Setze Parameter Slots mit Roboterposen und zugehörigen Kamerabildern z.B. Musterbreite, -höhe (unterschiedliche Ansichten des Kalibriermusters) Bewege Roboter (x,y,z) (qx,qy,qz,qw) (x,y,z) (qx,qy,qz,qw) zu neuer Kalibrierposition (x,y,z) (qx,qy,qz,qw) slot_0 mind. 3x wiederholen slot_1 slot_2 Sende Roboterpose an Hand-Auge- Kalibriermodul (Slots füllen) Berechne Kalibrierungs- transformation Abb.
Abb. 6.22: Erfassung der Parameter zur Hand-Auge-Kalibrierung in der Web GUI des rc_visard Schritt 2: Auswahl und Übertragung der Kalibrierpositionen des Roboters In diesem Schritt (2a.) definiert der Benutzer verschiedene Kalibrierpositionen, die der Roboter anfahren muss. Dabei ist sicherzustellen, dass das Kalibriermuster bei allen Positionen im linken Kamerabild vollständig sicht- bar ist.
Seite 72
Warnung: Die Kalibrierqualität, d.h. die Genauigkeit des berechneten Kalibrierergebnisses, hängt von den Ansichten des Kalibriermusters ab. Je vielfältiger die Perspektiven sind, desto besser gelingt die Kalibrierung. Werden sehr ähnliche Ansichten ausgewählt, d.h. werden die Positionen des Roboters bei den verschiedenen Wiederholungen von Schritt 2a nur leicht variiert, kann dies zu einer ungenauen Schätzung der gewünschten Kalibriertransformation führen.
Seite 73
Abb. 6.24: Erstes Beispielbild für den Hand-Auge-Kalibriervorgang einer statisch montierten Kamera Sobald das tatsächliche Bild der empfohlenen Ansicht entspricht, sind die Posen des benutzerdefinierten Roboter-Koordinatensystems manuell in den entsprechenden Textfeldern zu erfassen und das Kamerabild mit der Schaltfläche Bild aufnehmen aufzunehmen. Bemerkung: Der Zugriff auf die Posendaten des Roboters hängt vom Modell des Roboters und seinem Hersteller ab.
Dieser Vorgang ist insgesamt viermal zu wiederholen. Vorausgesetzt, die in Abb. 6.23 dargestellten Emp- fehlungen zur Aufnahme des Kalibriermusters von oben, von links, von vorn und von rechts wurden ein- gehalten, werden die folgenden Kamerabilder mit den jeweiligen Roboterposen an das Softwaremodul zur Hand-Auge-Kalibrierung übertragen: Abb.
Abb. 6.26: Ergebnis der Hand-Auge-Kalibrierung, dargestellt in der Web GUI 6.7.4 Parameter rc _ hand _ eye _ calibration Das Modul zur Hand-Auge-Kalibrierung wird in der REST-API als bezeichnet und in der Web GUI (Abschnitt 4.6) auf der Seite Hand-Auge-Kalibrierung dargestellt. Der Benutzer kann die Kali- brierparameter entweder dort oder über die REST-API-Schnittstelle (Abschnitt 8.2) ändern.
Seite 76
rc _ hand _ eye _ calibration Tab. 6.11: Laufzeitparameter des -Moduls Name Min. Max. Default Beschreibung grid _ height float64 10.0 Höhe des Kalibriermusters in Metern grid _ width float64 10.0 Breite des Kalibriermusters in Metern robot _ mounted bool false true...
Seite 77
(Fortsetzung der vorherigen Seite) "int16" "value": reset _ defaults Hiermit werden die Werkseinstellungen der Parameter dieses Moduls wieder hergestellt und ange- wandt („factory reset“). Dies hat keine Auswirkungen auf das Kalibrierergebnis oder auf die während der Kalibrierung gefüllten . Es werden lediglich Parameter, wie die Maße des Kalibriermusters Slots oder die Montageart des Sensors, zurückgesetzt.
Seite 78
(Fortsetzung der vorherigen Seite) "y": "float64", "float64" "z": "position": { "x": "float64", "y": "float64", "z": "float64" "slot": "int32" Die Definition der Response mit jeweiligen Datentypen ist: "message": "string", "status": "int32", "success": "bool" set _ pose Tab. 6.12: Rückgabewerte des -Services Beschreibung status success...
Seite 79
(Fortsetzung der vorherigen Seite) "float64" "z": "robot _ mounted": "bool", "status": "int32", "success": "bool" Tab. 6.13: Rückgabewerte des -Services calibrate Beschreibung status success true Kalibrierung erfolgreich, das Kalibrierergebnis wurde zurückgegeben. false Nicht genügend Posen gespeichert, um die Kalibrierung durchzuführen Das berechnete Ergebnis ist ungültig, bitte prüfen Sie die Eingabewerte. false false Die angegebenen Abmessungen des Kalibriermusters sind ungültig.
Seite 80
set _ calibration Tab. 6.14: Rückgabewerte des -Services Beschreibung status success true Setzen der Kalibrierung war erfolgreich die angegebenen Orientierungswerte sind ungültig false save _ calibration Hiermit wird das Ergebnis der Hand-Auge-Kalibrierung persistent auf dem rc_visard gespeichert und das vorherige Ergebnis überschrieben. Das gespeicherte Ergebnis lässt sich jederzeit über den Service get _ calibration abrufen.
7 Optionale Softwaremodule Der rc_visard bietet optionale Softwaremodule, für die separat eine Lizenz (Abschnitt 9.6) zur Aktivierung erwor- ben werden kann. Die optionalen Softwaremodule des rc_visard sind: rc _ slam • SLAM , Abschnitt 7.1) übernimmt die simultane Lokalisierung und Kartenerstellung, um ak- kumulierte Posendaten zu korrigieren.
Bemerkung: Das SLAM-Modul ist optional für den rc_visard erhältlich und läuft intern auf dem Sensor. So- bald eine SLAM-Lizenz auf dem rc_visard hinterlegt wird, erscheint das SLAM-Modul auf der Seite Überblick als Verfügbar und SLAM ist auf der Seite System im Bereich Lizenz aktiviert. Web GUI 7.1.1 Verwendung Das SLAM-Modul kann jederzeit entweder über das rc_dynamics Interface (siehe Dokumentation der zugehörigen...
Seite 84
Warnung: Aufgrund des limitierten internen Speichers des rc_visard ist es nicht empfohlen, Stereo-Matching in voller Auflösung ( Full ) gleichzeitig mit dem SLAM-Modul laufen zu lassen. Durch den Speicherverbrauch des Stereo-Matchings ist die maximale Laufzeit des SLAM-Moduls stark eingeschränkt. Eventuell kann ein SLAM-Prozess, der schon länger läuft, durch Starten des Stereo-Matchings in voller Auflösung einen reset erfahren.
Seite 85
7.1.5 Services Bemerkung: Die Aktivierung und Deaktivierung des SLAM-Moduls wird über das Service-Interface von rc_dynamics gesteuert (siehe Services, Abschnitt 6.3.4). return _ code Zusätzlich zur eigentlichen Serviceantwort gibt jeder Service (außer ) einen sogenannten reset stehend aus einem Integer-Wert und einer optionalen Textnachricht zurück. Erfolgreiche Service-Anfragen wer- den mit einem Wert von 0 quittiert.
Seite 86
Zeit (hh:mm:ss) Ganze Trajektorie rc_slam rc_slam start stop Ausgewähltes Teilstück +15s Parameter +60s (relativ) +15s –15s start_time – 60s end_time –15s Abb. 7.1: Beispielhafte Kombinationen positiver und negativer relativer Zeitangaben. Alle gezeigten Kombinatio- nen resultieren im gleichen Teilstück. start _ time Bemerkung: Bei relativen Zeitangaben wird eine von Null als der Anfang der Tra- end _ time...
Seite 87
(Fortsetzung der vorherigen Seite) "producer": "string", "timestamp": { "nsec": "int32", "int32" "sec": producer -Feld gibt an, woher die Daten kommen und ist immer slam return _ code Das Feld enthält mögliche Warnungen oder Fehlercodes und Nachrichten. Mögliche return _ code Werte für sind in der Tabelle unten angegeben.
"return _ code": { "message": "string", "int16" "value": remove _ map entfernt die gespeicherte Karte aus dem persistenten Speicher. Dieser Service hat keine Argumente. Die Definition der Response mit jeweiligen Datentypen ist: "return _ code": { "message": "string", "value": "int16" 7.2 IOControl und Projektor-Kontrolle Das IOControl-Modul ermöglicht das Lesen der digitalen Eingänge und die Kontrolle der digitalen Ausgänge (GPIOs) des rc_visard.
Seite 89
rc _ iocontrol Tab. 7.4: Laufzeitparameter des -Moduls Name Min. Max. Default Beschreibung out1 _ mode string ExposureActive Low, High, ExposureActive, ExposureAlternateActive out2 _ mode string Low, High, ExposureActive, ExposureAlternateActive Beschreibung der Laufzeitparameter out1 _ mode out2 _ mode (Out1 und Out2) Die Betriebsarten für GPIO-Ausgang 1 und GPIO-Ausgang 2 können individuell gesetzt werden: schaltet den GPIO-Ausgang permanent aus (LOW).
Interne Bildaufnahme GPIO Ausgang 1 Disparitätsbild Kamerabild Abb. 7.3: Beispiel für die Nutzung der Betriebsart für GPIO-Ausgang 1 mit einer ExposureAlternateActive benutzerdefinierten Bildwiederholrate von 8 Hz. Die interne Bildaufnahme geschieht immer mit 25 Hz. GPIO- Ausgang 1 ist für die Dauer der Belichtungszeit jedes zweiten Bildes an (HIGH). Disparitätsbilder werden für Kamerabilder berechnet, bei denen GPIO-Ausgang 1 an (HIGH) ist, und die auch per GigE Vision in der be- nutzerdefinierten Bildwiederholrate versendet werden.
return _ code Das Feld enthält mögliche Warnungen oder Fehlercodes und Nachrichten. Mögliche return _ code Werte für sind in der Tabelle unten angegeben. Code Beschreibung Erfolgreich Interner Fehler Lizenz für IOControl ist nicht verfügbar save _ parameters Beim Aufruf dieses Services werden die aktuellen Parametereinstellungen des Moduls auf dem rc_visard gespeichert.
Seite 92
Die Markererkennung besteht aus drei Schritten: 1. Markererkennung auf dem 2D-Bildpaar (siehe Markererkennung, Abschnitt 7.3.2). 2. Schätzung der Pose jedes Markers (siehe Posenschätzung, Abschnitt 7.3.3). 3. Wiedererkennung von bisher gesehenen Markern (siehe Marker-Wiedererkennung, Abschnitt 7.3.4). Im Folgenden werden die zwei unterstützten Markertypen näher beschrieben, gefolgt von einem Vergleich. QR-Code Abb.
Seite 93
AprilTag Abb. 7.5: Ein 16h5 Marker (links) und ein 36h11 Marker (rechts). AprilTags bestehen aus einem obligatorischen weißen (a) und schwarzen (b) Rahmen und einer variablen Menge an Datenmodulen (c). AprilTags sind ähnlich zu QR-Codes. Sie wurden allerdings speziell zur robusten Identifikation auf weite Entfer- nungen entwickelt.
AprilTag mit einzuschließen – dieser ist sowohl in den PNGs also auch in den PDFs enthalten (siehe (a) in Abb. 7.5). Die Marker müssen außerdem ohne Interpolation auf die Druckgröße skaliert werden, sodass die scharfen Kanten erhalten bleiben. Vergleich Sowohl QR-Codes als auch AprilTags haben ihre Vor- und Nachteile. Während QR-Codes die Speicherung von benutzerdefinierten Daten erlauben, sind die Marker bei AprilTags vordefiniert und in ihrer Anzahl limitiert.
Variablen. �� bezeichnet die Zahl der Bildpixel pro Modul, welche für eine Erkennung erforderlich sind. Sie unter- scheidet sich zwischen QR-Codes und AprilTags. Auch der Winkel des Markers zur Kamera und die Beleuchtung spielen eine Rolle. Ungefähre Werte für eine robuste Erkennung sind: •...
Bemerkung: Für beste Ergebnisse der Posenschätzung sollte der Marker sorgfältig gedruckt und auf einem steifen und möglichst ebenen Untergrund angebracht werden. Jegliche Verzerrung des Markers oder Uneben- heit der Oberfläche verschlechtert die geschätzte Pose. Warnung: Wir empfehlen, die ungefähre Größe der Marker anzugeben. Ansonsten, falls mehrere Marker mit derselben ID im linken oder rechten Bild sichtbar sind, kann es zu einer fehlerhaften Posenschätzung kommen, wenn die Marker gleich orientiert sind und sie ungefähr parallel zu den Bildzeilen angeordnet sind.
Abb. 7.8: Vereinfachte Darstellung der Marker-Wiedererkennung. Die euklidischen Abstände zwischen zusam- mengehörigen Markerecken in 3D werden berechnet (rote Pfeile). Nach einer bestimmten Anzahl von Markererkennungsläufen werden vorher gesehene Marker verworfen, falls die- forget _ after _ n _ detections se in der Zwischenzeit nicht mehr erkannt wurden. Dies kann über den Parameter festgelegt werden.
Seite 98
rc _ qr _ code _ detect Tab. 7.10: Laufzeitparameter des -Moduls Name Min. Max. Default Beschreibung detect _ inverted _ tags bool false true false Erkennt Tags, bei denen Schwarz und Weiß vertauscht sind forget _ after _ n _ detections int32 1000 Anzahl an...
Seite 99
start startet das Modul durch einen Übergang von IDLE nach RUNNING Wenn das Modul läuft, empfängt es die Bilder der Stereokamera und ist bereit, Marker zu erkennen. Um Rechenressourcen zu sparen, sollte das Modul nur laufen, wenn dies nötig ist. Dieser Service hat keine Argumente.
Seite 100
"pose _ frame": "string", "robot _ pose": { "orientation": { "w": "float64", "x": "float64", "y": "float64", "float64" "z": "position": { "x": "float64", "y": "float64", "float64" "z": "tags": [ "id": "string", "size": "float64" Optionale Serviceargumente: tags bezeichnet die Liste der Marker-IDs, welche erkannt werden sollen. Bei QR-Codes ist die ID gleich den enthaltenen Daten.
Seite 102
Code Beschreibung Erfolg Ein ungültiges Argument wurde übergeben Die maximale Wartezeit auf ein Stereo-Bildpaar wurde überschritten Die Lizenz ist ungültig -101 Interner Fehler -102 Ein Rückwärtssprung der Systemzeit trat auf -200 Ein schwerwiegender interner Fehler trat auf Eine Warnung trat während der Markererkennung auf Eine Warnung trat während der Posenschätzung auf Die Roboterpose wurde unnötigerweise angegeben Mehrere Warnungen traten auf.
"return _ code": { "message": "string", "int16" "value": 7.4 ItemPick und BoxPick 7.4.1 Einführung Die ItemPick- und BoxPick-Module sind optional erhältliche Module, welche intern auf dem rc_visard laufen. Bemerkung: Die Module sind optional und benötigen gesonderte ItemPick- bzw. BoxPick-Lizenzen (Abschnitt 9.6).
• , für quaderförmige ROIs mit den Abmessungen box.x box.y box.z • , für kugelförmige ROIs mit dem Radius SPHERE sphere.radius Die Pose einer ROI kann entweder relativ zum Kamera-Koordinatensystem oder mithilfe der Hand- pose camera Auge-Kalibrierung im externen Koordinatesystem external angegeben werden (siehe Hand-Auge-Kalibrierung, Abschnitt 7.4.7).
Abb. 7.9: Illustration verschiedener Behälter-Modelle und des Referenzkoordinatensystems. Um Mehrdeutigkeiten bei der Lageschätzung der Behältererkennung zu umgehen, kann eine grobe Vorgabe für die Pose pose des Behälters spezifiziert werden. Wird keine angegeben, sucht der Algorithmus standardmäßig nach Behältern, die horizontal zum Gravitationsvektor stehen. 7.4.4 Füllstandserkennung detect _ filling _ level Die ItemPick- und BoxPick-Module bieten den Service...
Abb. 7.10: Visualisierungen des Behälterfüllstands: Gesamtfüllstand ohne Raster (links), 4x3 Raster (Mitte), 8x8 Raster (rechts). Der Inhalt wird mit einem Farbverlauf von weiß (auf dem Boden) nach dunkelgrün dargestellt. Die überfüllten Bereiche sind rot dargestellt. Die Nummern stellen die Zell-IDs dar. 7.4.5 Erkennung von Rechtecken (BoxPick) item _ models Das BoxPick-Modul unterstützt die Erkennung von mehreren Objektmodellen (...
Seite 107
Abb. 7.11: Benutzerdefinierter Teilbereich eines Behälters. • Die ID der Region of Interest, innerhalb der nach dem Load Carrier gesucht wird, oder – falls kein Load Carrier angegeben ist – die Region of Interest, innerhalb der Greifpunkte berechnet werden. • Informationen für die Kollisionsprüfung: Die ID des Greifers, um die Kollisionsprüfung zu aktivieren, und optional ein Greif-Offset, der die Vorgreifposition definiert.
Jeder Greifpunkt enthält auch einen Qualitätswert ( quality ), der einen Hinweis auf die Ebenheit der Greiffläche gibt. Dieser Wert reicht von 0 bis 1, wobei höhere Werte für eine ebenere rekonstruierte Oberfläche stehen. Jeder berechnete Greifpunkt lässt sich anhand einer uuid (Universally Unique Identifier) eindeutig identifizieren und enthält zusätzlich den Zeitstempel der ältesten Bildaufnahme, auf der die Greifpunktberechnung durchgeführt...
2. Benutzerdefiniertes externes Koordinatensystem ( external ): Alle Posen sind im sogenannten exter- nen Koordinatensystem angegeben, welches vom Nutzer während der Hand-Auge-Kalibrierung gewählt wurde. In diesem Fall bezieht das ItemPick- oder BoxPick-Modul alle notwendigen Informationen über die Kameramontage und die kalibrierte Hand-Auge-Transformation automatisch vom Modul Hand-Auge- Kalibrierung (Abschnitt 6.7).
Seite 110
rc _ itempick rc _ boxpick Tab. 7.14: Laufzeitparameter der Modu- le für die Behältererkennung Name Default Beschreibung load _ carrier _ crop _ distance float64 0.02 0.005 Sicherheitsspielraum für die Behälterinnenmaße in Metern load _ carrier _ model _ tolerance float64 0.003 0.025...
Seite 111
clustering _ discontinuity _ factor (Unstetigkeitsfaktor) beschreibt die erlaubte Unebenheit von Greifflä- chen. Je kleiner dieser Wert ist, umso mehr werden mögliche Greifflächen in kleinere Flächen mit weniger Unebenheiten aufgeteilt. clustering _ max _ surface _ rmse (Maximaler RMSE) ist die maximal erlaubte Abweichung (Root Mean Squa- re Error, RMSE) von Punkten zur Greiffläche in Metern.
Seite 112
Tab. 7.18: Rückgabecodes der Services des ItemPick- bzw. BoxPick- Moduls Code Beschreibung Erfolgreich Ungültige(s) Argument(e) Die maximal erlaubte Zeitspanne von 5.0 Sekunden für die interne Akquise der Bilddaten wurde überschritten. Das neue Element konnte nicht hinzugefügt werden, da die maximal speicherbare Anzahl an Load Carriern oder ROIs überschritten wurde.
Seite 113
(Fortsetzung der vorherigen Seite) "current _ "string" state": set _ region _ of _ interest konfiguriert und speichert eine Region of Interest (ROI) auf dem rc_visard. Alle ROIs sind dauerhaft gespeichert, auch über Firmware-Updates und -Wiederherstellungen hinweg. Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "region _ of _ interest": { "box": {...
Seite 114
(Fortsetzung der vorherigen Seite) "int16" "value": get _ regions _ of _ interest region _ of _ interest _ ids gibt die mit spezifizierten, gespeicherten Regions of Interest (ROIs) zu- region _ of _ interest _ ids rück. Werden keine angegeben, enthält die Serviceantwort alle gespei- cherten ROIs.
Seite 115
Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "region _ of _ interest _ ids": [ "string" Die Definition der Response mit jeweiligen Datentypen ist: "return _ code": { "message": "string", "value": "int16" set _ load _ carrier konfiguriert und speichert einen Load Carrier (Behälter) auf dem rc_visard. Alle Behälter sind dauer- haft –...
Seite 116
"return _ code": { "message": "string", "int16" "value": get _ load _ carriers load _ carrier _ ids gibt die mit spezifizierten, gespeicherten Load Carriers (Behälter) zurück. Wer- load _ carrier _ ids den keine angegeben, enthält die Serviceantwort alle gespeicherten Behälter. Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "load _ carrier _ ids": [...
Seite 117
delete _ load _ carriers load _ carrier _ ids löscht die mit spezifizierten, gespeicherten Load Carriers (Behälter). Alle zu löschenden Behälter müssen explizit angegeben werden. Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "load _ carrier _ ids": [ "string"...
Seite 121
(Fortsetzung der vorherigen Seite) "x": "float64", "float64" "y": "return _ code": { "message": "string", "value": "int16" "timestamp": { "nsec": "int32", "sec": "int32" load _ carriers : Liste an erkannten Load Carriern und deren Füllstand. timestamp : Zeitstempel des Bildes, auf dem die Erkennung durchgeführt wurde. return _ code : enthält mögliche Warnungen oder Fehlercodes und Nachrichten.
Seite 124
load _ carriers : Liste der erkannten Load Carrier (Behälter). : Liste an erkannten Rechtecken. items : Zeitstempel des Bildes, auf dem die Erkennung durchgeführt wurde. timestamp return _ code : enthält mögliche Warnungen oder Fehlercodes und Nachrichten. compute _ grasps (für ItemPick) löst die Erkennung von Greifpunkten für einen Sauggreifer aus, wie in Berechnung der Greifpunk-...
Seite 127
(Fortsetzung der vorherigen Seite) "return _ code": { "message": "string", "int16" "value": "timestamp": { "nsec": "int32", "sec": "int32" load _ carriers : Liste der erkannten Load Carrier (Behälter). grasps : sortierte Liste an Sauggreifpunkten. timestamp : Zeitstempel des Bildes, auf dem die Erkennung durchgeführt wurde. return _ code : enthält mögliche Warnungen oder Fehlercodes und Nachrichten.
Seite 129
pre _ grasp _ offset Optional kann der benutzt werden, um eine Vorgreifpositi- on zu setzen und zu prüfen, ob der Greifer an einem beliebigen Punkt entlang der linearen Trajektorie zwischen Vorgreifposition und Greifposition in Kollision mit dem Load Carrier geraten würde. Die Kollisionsprüfung benötigt eine gesonderte CollisionCheck-Lizenz (Abschnitt 9.6).
Für jedes Objekt, das mit dem SilhouetteMatch-Modul erkannt werden soll, wird ein Template benötigt. Robo- ception bietet bietet hierfür einen Template-Generierungsservice auf ihrer Website (https://roboception.com/de/ template-request-de/) an, auf der der Benutzer CAD-Daten oder mit dem System aufgenommene Daten hochla- den kann, um Templates generieren zu lassen.
Taugliche Objekte Das SilhouetteMatch-Modul ist für Objekte ausgelegt, die prägnante Kanten auf einer Ebene besitzen, welche parallel zu der Basisebene ist, auf der die Objekte liegen. Das trifft beispielsweise auf flache, nicht-transparente Objekte zu, wie gefräste, lasergeschnittene oder wasserstrahlgeschnittene Teile. Komplexere Objekte können auch erkannt werden, solange sie prägnante Kanten auf einer Ebene besitzen, z.B.
In der REST-API ist eine Ebene durch eine Normale ( normal ) und einen Abstand ( distance ) definiert. normal ist ein normalisierter 3-Vektor, welcher die Normale der Ebene spezifiziert. Die Normale zeigt immer von der Kamera weg. distance repräsentiert den Abstand der Ebene von der Kamera in Richtung der Normale. normal können auch als ��, ��, ��, bzw.
Seite 134
Um eine Objekterkennung durchzuführen, müssen im Allgemeinen die folgenden Serviceargumente an das SilhouetteMatch-Modul übergeben werden: • Das Template des Objekts, welches in der Szene erkannt werden soll. • Das Koordinatensystem, in dem die Posen der detektierten Objekte zurückgegeben werden sollen (siehe Hand-Auge-Kalibrierung, Abschnitt 7.5.5).
Seite 135
7.5.5 Wechselwirkung mit anderen Modulen Die folgenden, auf dem rc_visard laufenden Module liefern Daten für das SilhouetteMatch-Modul oder haben Einfluss auf die Datenverarbeitung. Bemerkung: Jede Konfigurationsänderung dieser Module kann direkte Auswirkungen auf die Qualität oder das Leistungsverhalten des SilhouetteMatch-Moduls haben. Stereokamera und Stereo-Matching SilhouetteMatch-Modul verarbeitet...
Seite 136
pose _ frame Für den Fall einer robotergeführten Kamera ist es abhängig von nötig, zusätzlich die aktuelle Robo- robot _ pose terpose ( ) zur Verfügung zu stellen: pose _ frame • Wenn external ausgewählt ist, ist die Angabe der Roboterpose obligatorisch. pose _ frame •...
Beschreibung der Laufzeitparameter Die Laufzeitparameter werden zeilenweise auf der SilhouetteMatch-Seite in der Web GUI dargestellt. Im fol- genden wird der Name des Parameters in der Web GUI in Klammern hinter dem eigentlichen Parameternamen angegeben. Die Parameter sind in derselben Reihenfolge wie in der Web GUI aufgelistet: (Qualität) Die Objekterkennung kann auf Bildern mit unterschiedlicher Auflösung durchgeführt wer- quality den:...
Seite 138
Tab. 7.21: Fehlercodes und Warnung der Services des SilhouetteMatch- Moduls Code Beschreibung Erfolgreich Ungültige(s) Argument(e) Ein interner Timeout ist aufgetreten, beispielsweise während der Objekterkennung. Die maximal erlaubte Zeitspanne von 5.0 Sekunden für die interne Akquise der Bilddaten wurde überschritten. Daten konnten nicht in den persistenten Speicher geschrieben oder vom persistenten Speicher gelesen werden.
Seite 139
(Fortsetzung der vorherigen Seite) "position": { "x": "float64", "y": "float64", "float64" "z": "stereo": { "plane _ preference": "string" Obligatorische Serviceargumente: plane _ estimation _ method : Methode der Kalibrierung der Basisebene. Gültige Werte sind STEREO APRILTAG MANUAL pose _ frame : siehe Hand-Auge-Kalibrierung (Abschnitt 7.5.5).
Seite 140
timestamp : Zeitstempel des Bildes, das für die Kalibrierung benutzt wurde. return _ code : enthält mögliche Warnungen oder Fehlercodes und Nachrichten. get _ base _ plane _ calibration gibt die derzeitige Kalibrierung der Basisebene zurück. Request: Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "pose _ frame": "string", "robot _...
Seite 141
"return _ code": { "message": "string", "int16" "value": set _ region _ of _ interest _ 2d speichert eine 2D-Region of Interest (ROI) auf dem rc_visard. Alle ROIs sind dauerhaft gespeichert, auch über Firmware-Updates und -Wiederherstellungen hinweg. Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "region _ of _ interest _ 2d": { "height": "uint32",...
Seite 142
(Fortsetzung der vorherigen Seite) "return _ code": { "message": "string", "int16" "value": delete _ regions _ of _ interest _ 2d region _ of _ interest _ 2d _ ids löscht die mit spezifizierten, gespeicherten ROIs. Alle zu löschenden ROIs müssen explizit angegeben werden. Die Definition der Request-Argumente mit jeweiligen Datentypen ist: "region _ of _ interest _ 2d _ ids": [...
Seite 143
(Fortsetzung der vorherigen Seite) "float64" "z": Obligatorische Serviceargumente: object _ id object _ to _ detect : ID des Templates, welches erkannt werden soll. pose _ frame : siehe Hand-Auge-Kalibrierung (Abschnitt 7.5.5). Potentiell obligatorische Serviceargumente: robot _ pose : siehe Hand-Auge-Kalibrierung (Abschnitt 7.5.5).
Seite 144
timestamp : Zeitstempel des Bildes, das für die Erkennung benutzt wurde. return _ code : enthält mögliche Warnungen oder Fehlercodes und Nachrichten. save _ parameters speichert die aktuellen Parametereinstellungen des SilhouetteMatch-Moduls auf dem rc_visard. Das bedeutet, dass diese Werte selbst nach einem Neustart angewandt werden. Bei Firmware-Updates oder -Wiederherstellungen werden sie jedoch wieder auf den Standardwert gesetzt.
Seite 145
Antwort-Header • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabewert: Array der Templates) • 404 Not Found – Modul nicht gefunden Referenzierte Datenmodelle • Template (Abschnitt 8.2.3) GET /nodes/rc _ silhouettematch/templates/{id} ruft ein rc_silhouettematch-Template ab. Falls der angefragte Content-Typ application/octet-stream ist, wird das Template als Datei zurückgegeben.
• string ) – ID des Templates (obligatorisch) Formularparameter • – Template-Datei (obligatorisch) file Anfrage-Header • Accept – multipart/form-data application/json Antwort-Header • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabewert: Template) • 400 Bad Request – Template ist ungültig oder die maximale Zahl an Templates wurde erreicht.
Bemerkung: Das Modul ist optional und benötigt eine separate Lizenz (Abschnitt 9.6). Das Modul ermöglicht die Kollisionsprüfung zwischen dem Greifer und dem Load Carrier. Es ist in die Module ItemPick und BoxPick (Abschnitt 7.4) integriert, kann aber auch als eigenständiges Modul genutzt werden. Dieser Abschnitt des Handbuchs befasst sich nur mit dem Einrichten und der Verwendung des CollisionCheck-Moduls als eigenständige Komponente.
unterhalb seines Parent-Elements platziert wird, muss seine Position aus der Höhe des Parent-Elements und seiner eigenen Höhe berechnet werden (siehe Abb. 7.15). diff = (0, 0, (h )/2) diff Abb. 7.15: Bezugskoordinatensysteme für das Erstellen von Greifern über die REST-API Das Bezugskoordinatensystem für das erste Element liegt immer im Mittelpunkt des Roboterflanschs, wobei die z-Achse nach unten gerichtet ist.
pre _ grasp _ offset Das Argument (Greif-Offset) kann für eine erweiterte Kollisionsprüfung genutzt werden. Der Greif-Offset �� ist der Offset vom Greifpunkt �� zur Vorgreifposition �� im Koordinatensystem ���� �� ���������� ������ des Greifpunkts (siehe Abb. 7.16). Wenn der Greif-Offset angegeben wird, werden Greifpunkte auch dann als Kollisionen erkannt, wenn der Greifer an einem beliebigen Punkt während der linearen Bewegung zwischen Vor- greifposition und Greifposition in Kollision mit dem Load Carrier geraten würde.
Seite 150
check _ flange (Flansch-Check) Ermöglicht einen Sicherheitscheck mit dem Flansch, wie in Flanschradi- (Abschnitt 7.6.2) beschrieben. Wenn dieser Parameter gesetzt ist, gelten alle Griffe, bei denen der Flansch innerhalb des Load Carriers wäre, als Kollisionen. check _ bottom (Boden-Check) Wenn dieser Check aktiviert ist, werden Kollisionen nicht nur mit den Load Car- rier Wänden, sondern auch mit dem Boden geprüft.
Seite 152
tcp _ parent _ id : ID des Elements, auf dem der TCP definiert ist. tcp _ pose _ parent : Die Pose des TCP im Koordinatensystem des Elements, das tcp _ parent _ id angegeben ist. Response: Die Definition der Response mit jeweiligen Datentypen ist: "gripper": { "elements": [ "box": {...
Seite 153
(Fortsetzung der vorherigen Seite) "x": "float64", "y": "float64", "float64" "z": "type": "string" "return _ code": { "message": "string", "value": "int16" tcp _ pose _ flange gripper : Gibt den Greifer mit dem zusätzlichen Feld zurück. Die- ses Feld gibt die TCP-Koordinaten im Flanschkoordinatensystem an, um diese mit den Roboter-TCP-Koordinaten vergleichen zu können.
Seite 158
Dieser Service hat keine Argumente. Die Definition der Response mit jeweiligen Datentypen ist: "return _ code": { "message": "string", "int16" "value": reset _ defaults stellt die Werkseinstellungen der Parameter dieses Moduls wieder her und wendet sie an („factory reset“). Dies betrifft nicht die konfigurierten Greifer. Dieser Service hat keine Argumente.
8 Schnittstellen Es stehen vier Schnittstellen zur Konfiguration und Datenübertragung des rc_visard zur Verfügung: • GigE Vision 2.0/GenICam-Schnittstelle (Abschnitt 8.1) Konfiguration bild- und kamerabezogener Einstellungen. • (Abschnitt 8.2) REST-API-Schnittstelle Programmierschnittstelle zur Konfiguration des rc_visard, zur Abfrage von Statusinformationen, zum Anfordern von Datenströmen, usw. •...
Bemerkung: Über seine Homepage stellt Roboception Tools und eine C++-Programmierschnittstelle mit Beispielen zum Discovery-Mechanismus, zur Konfiguration und zum Bild-Streaming über die GigE Vision/GenICam-Schnittstelle zur Verfügung (http://www.roboception.com/download). 8.1.1 Wichtige Parameter der GenICam-Schnittstelle Die folgende Liste enthält einen Überblick über relevante GenICam-Parameter des rc_visard, die über die GenICam-Schnittstelle abgerufen und/oder geändert werden können.
Seite 161
• Beschreibung: Maximale Höhe eines Bildes im Stream. Der Wert beträgt aufgrund der gestapelten Bilder der linken und rechten Kamera im IntensityCombined -Stream immer 1920 Pixel (siehe Ver- fügbare Bild-Streams, Abschnitt 8.1.5). PixelFormat YCbCr411 _ 8 Coord3D _ C16 • Typ: Aufzählung, mögliche Werte: Mono8 oder (nur bei Farbkameras),...
Seite 162
• Beschreibung: Lässt sich für den manuellen Weißabgleich auf bzw. für den automatischen Weiß- abgleich auf Continuous setzen. Dieser Parameter ist nur für Farbkameras verfügbar (Weißabgleich, Abschnitt 6.1.4). (nur für Farbkameras) BalanceRatioSelector • Typ: Aufzählung, mögliche Werte: oder Blue • Voreinstellung: •...
Seite 163
Kategorie: TransportLayerControl / PtpControl PtpEnable • Typ: Boolean • Voreinstellung: false • Beschreibung: Schaltet die PTP-Synchronisierung ein und aus. Kategorie: Scan3dControl (schreibgeschützt) Scan3dDistanceUnit • Typ: Aufzählung, Wert: ist immer Pixel • Beschreibung: Einheit für die Disparitätsmessungen, ist immer Pixel (schreibgeschützt) Scan3dOutputMode •...
Seite 164
• Typ: Boolean • Beschreibung: Ist immer , was bedeutet, dass ungültige Daten im Disparitätsbild mit einem spe- true zifischen Wert markiert werden, der durch den Parameter Scan3dInvalidDataValue definiert wird. (schreibgeschützt) Scan3dInvalidDataValue • Typ: Float • Beschreibung: Ist der Wert, der für ungültige Disparität steht. Der Wert ist immer 0, was bedeutet, dass Disparitätswerte von 0 immer ungültigen Messungen entsprechen.
Seite 165
• Beschreibung: Höhe des Bereichs für die Belichtungszeitregelung (Abschnitt 6.1.4) in Pixeln. Kategorie: AcquisitionControl (schreibgeschützt, falls das IOControl-Modul nicht lizenziert ist) AcquisitionAlternateFilter • Typ: Aufzählung, mögliche Werte: OnlyHigh oder OnlyLow • Voreinstellung: • Beschreibung: Falls dieser Parameter auf OnlyHigh (oder entsprechend OnlyLow ) und die LineSource...
Seite 166
• type: Command • Beschreibung: Dieses Kommando triggert das Stereo-Matching auf den nächsten verfügbaren Stereo- bildern, falls DepthAcquisitionMode SingleFrame oder SingleFrameOut1 eingestellt ist. DepthQuality • Typ: Aufzählung, mögliche Werte: Medium High oder Full (nur mit StereoPlus-Lizenz) • Voreinstellung: High • Beschreibung: Qualität der Disparitätsbilder. Eine geringere führt zu Disparitätsbil- DepthQuality dern mit einer geringeren Auflösung (Qualität, Abschnitt 6.2.4).
Seite 167
• Beschreibung: Wert in Metern für die Minimale Abstands-Filterung (Abschnitt 6.2.4). DepthMaxDepth • Typ: Float, Wertebereich: 0.1–100.0 m • Voreinstellung: 100.0 m • Beschreibung: Wert in Metern für die Abstands-Filterung (Abschnitt 6.2.4). Maximale DepthMaxDepthErr • Typ: Float, Wertebereich: 0.01–100.0 m •...
Name der Kompo- PixelFormat Breite × Höhe Beschreibung nente Intensity 1280 × 960 Rektifiziertes Bild der lin- ken Kamera (monochrome Mono8 Kameras) YCbCr411 _ 8 (Farbkameras) IntensityCombined 1280 × 1920 Rektifiziertes Bild der lin- ken Kamera, gestapelt auf (monochrome Mono8 das rektifizierte Bild der Kameras) rechten Kamera...
Das Konfidenzbild umfasst vorzeichenlose 8-Bit-Ganzzahlwerte. Diese Werte müssen durch 255 geteilt werden, um die zwischen 0 und 1 liegenden Konfidenzwerte zu berechnen. Das Fehlerbild umfasst vorzeichenlose 8-Bit-Ganzzahlwerte. Der Fehler �� muss mit dem im GenICam- ���� Parameter Scan3dCoordinateScale angegebenen Skalierungsfaktor multipliziert werden, um die Disparitätsfeh- lerwerte ��...
Seite 170
Anfragetyp Beschreibung Zugriff auf eine oder mehrere Res- sourcen und Rückgabe des Ergeb- nisses im JSON-Format Änderung einer Ressource und Rückgabe der modifizierten Res- source im JSON-Format DELETE Löschen einer Ressource POST Upload einer Datei (z.B. einer Li- zenz oder eines Firmware-Images) Je nach der Art der Anfrage und Datentyp können die Argumente für HTTP-Anfragen als Teil des Pfads (URI) zur Ressource, als Abfrage-Zeichenfolge, als Formulardaten oder im Body der Anfrage übertragen werden.
Der folgende Eintrag zeigt eine Musterantwort auf eine erfolgreiche Anfrage, mit der Informationen zum rc _ stereomatching minconf -Parameter des -Moduls angefordert werden: HTTP/1.1 200 Content-Type: application/json Content-Length: "name": "minconf", "min": 0, "default": 0, "max": 1, "value": 0, "type": "float64", "description": "Minimum confidence"...
Seite 172
Bemerkung: Statuswerte werden nur gemeldet, wenn sich das jeweilige Modul im Zustand running befindet. Parameter: Die meisten Module stellen Parameter über die REST-API des rc_visard zur Verfügung, damit ihr Laufzeitverhalten an den Anwendungskontext oder die Anforderungen angepasst werden kann. Die REST- API ermöglicht es, den Wert eines Parameters zu setzen und abzufragen.
Seite 175
(Fortsetzung der vorherigen Seite) "services": [ "save _ parameters", "reset _ defaults" "running" "status": Parameter • ) – Modulname (obligatorisch) node string Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: NodeInfo) • 404 Not Found –...
Seite 176
(Fortsetzung der vorherigen Seite) 0.007 "value": Parameter • ) – Modulname (obligatorisch) node string Anfrageparameter • ) – Schränkt Ergebnisse auf Parameter mit diesem Namen ein (optional). name string Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: Parameter-Array) •...
Seite 177
(Fortsetzung der vorherigen Seite) "default": 0.005, "Manual exposure time in s if exp _ auto is false", "description": "max": 0.018, "min": 6.6e-05, "exp _ "name": value", "type": "float64", "value": 0.005 Parameter • ) – Modulname (obligatorisch) node string JSON-Objekt-Array zur Anfrage •...
Seite 178
(Fortsetzung der vorherigen Seite) "H" "value": Parameter • string ) – Modulname (obligatorisch) node • ) – Name des Parameters (obligatorisch) param string Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: Parameter) • 404 Not Found –...
Seite 179
• Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: Parameter) • 400 Bad Request – Ungültiger Parameterwert • 403 Forbidden – Aktualisierung des Parameters verboten, z.B. weil er aufgrund einer laufenden GigE Vision-Anwendung gesperrt ist oder keine valide Lizenz für dieses Mo- dul vorliegt.
Seite 180
Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: Service-Array) • 404 Not Found – Modul nicht gefunden Referenzierte Datenmodelle • Service (Abschnitt 8.2.3) GET /nodes/{node}/services/{service} Abruf der Beschreibung eines modulspezifischen Services. Musteranfrage /api/v1/nodes/<node>/services/<service> HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json...
Seite 181
Referenzierte Datenmodelle • Service (Abschnitt 8.2.3) PUT /nodes/{node}/services/{service} Aufruf des Services eines Moduls: Die benötigten Argumente und die zugehörige Antwort hängt vom Modul und vom Service ab. Musteranfrage /api/v1/nodes/<node>/services/<service> HTTP/1.1 Accept: application/json "args": {} Musterantwort HTTP/1.1 200 Content-Type: application/json "set _ "name": pose", "response": {...
Seite 183
GET /datastreams Abruf einer Liste aller verfügbaren Datenströme. Musteranfrage /api/v1/datastreams HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json "description": "Pose of left camera at VisualOdometry rate (~10Hz)", "destinations": [ "192.168.1.13:30000" "name": "pose", "protobuf": "Frame", "protocol": "UDP" "description": "Pose of left camera (RealTime 200Hz)", "destinations": [ "192.168.1.100:20000",...
Seite 184
Musteranfrage /api/v1/datastreams/<stream> HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json "description": "Pose of left camera at VisualOdometry rate (~10Hz)", "destinations": [ "192.168.1.13:30000" "name": "pose", "protobuf": "Frame", "protocol": "UDP" Parameter • ) – Name des Datenstroms (obligatorisch) stream string Antwort-Headers • Content-Type – application/json Statuscodes •...
• – Hinzuzufügendes Ziel („IP:Port“) (obligatorisch) destination Anfrage-Header • Accept – application/x-www-form-urlencoded Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: Datenstrom) • 404 Not Found – Datenstrom nicht gefunden Referenzierte Datenmodelle • Stream (Abschnitt 8.2.3) DELETE /datastreams/{stream} Löschen eines Ziels aus der Datenstrom-Konfiguration.
Seite 186
• Abruf von Informationen zum Gerät und zur Laufzeitstatistik, wie Datum, MAC-Adresse, Uhrzeitsynchro- nisierungsstatus und verfügbare Ressourcen, • Verwaltung installierter Softwarelizenzen, und • Aktualisierung des Firmware-Images des rc_visard. GET /logs Abruf einer Liste aller verfügbaren Logdateien. Musteranfrage /api/v1/logs HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json...
Seite 187
(Fortsetzung der vorherigen Seite) "date": 1503060035.2115774, "log": [ "rc _ stereo _ ins", "component": "level": "INFO", "Running rc _ stereo _ ins version "message": 2.4.0", "timestamp": 1503060034.083 "rc _ stereo _ "component": ins", "level": "INFO", "message": "Starting up communication interfaces", "timestamp": 1503060034.085 "rc _ stereo _...
Seite 188
Parameter • ) – Name der Logdatei (obligatorisch) string Anfrageparameter • ) – Rückgabe des Logs im JSON- oder Rohdatenformat (mögliche Wer- format string json oder ; Voreinstellung: json ) (optional) • ) – Beschränkung auf die letzten x Zeilen im JSON-Format (Vorein- limit integer stellung:...
Seite 189
(Fortsetzung der vorherigen Seite) 65457.42 "uptime": Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: SysInfo) Referenzierte Datenmodelle • SysInfo (Abschnitt 8.2.3) GET /system/license Abruf von Informationen zu den auf dem Sensor installierten Lizenzen. Musteranfrage /api/v1/system/license HTTP/1.1 Musterantwort HTTP/1.1 200...
Seite 190
Anfrage-Header • Accept – Multipart/Formulardaten Statuscodes • 200 OK – Erfolgreiche Verarbeitung • 400 Bad Request – Keine gültige Lizenz GET /system/network Abruf der aktuellen Netzwerk Konfiguration. Musteranfrage /api/v1/system/network HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json "current _ method": "DHCP", "default _ gateway": "10.0.3.254", "ip _ address": "10.0.1.41",...
Seite 191
(Fortsetzung der vorherigen Seite) "persistent _ subnet _ "255.255.255.0" mask": Antwort-Headers • Content-Type – application/json Statuscodes • 200 OK – Erfolgreiche Verarbeitung (Rückgabe: NetworkSettings) Referenzierte Datenmodelle • NetworkSettings (Abschnitt 8.2.3) PUT /system/network/settings Setzen der aktuellen Netzwerkeinstellungen. Musteranfrage /api/v1/system/network/settings HTTP/1.1 Accept: application/json Musterantwort HTTP/1.1 200...
Seite 192
PUT /system/reboot Neustart des Sensors. Musteranfrage /api/v1/system/reboot HTTP/1.1 Statuscodes • 200 OK – Erfolgreiche Verarbeitung GET /system/rollback Abruf von Informationen zu Firmware/System-Images, die aktuell auf dem Sensor aktiv oder inaktiv sind. Musteranfrage /api/v1/system/rollback HTTP/1.1 Musterantwort HTTP/1.1 200 Content-Type: application/json "active _ image": { "image _ "rc _ visard _ v1.1.0"...
Seite 194
• active_image (ImageInfo): siehe Beschreibung von ImageInfo. • fallback_booted (boolean): TRUE, wenn das gewünschte Image nicht hochgefahren werden konnte und ein Fallback auf das zuvor genutzte Image vorgenommen wurde. • inactive_image (ImageInfo): siehe Beschreibung von ImageInfo. • next_boot_image (string): Firmware-Image, das beim nächsten Neustart geladen wird (entweder active _ image inactive _ image oder...
Seite 195
• hand_eye_calibration (boolean): Modul zur Hand-Auge-Kalibrierung. • rectification (boolean): Modul zur Bildrektifizierung. • self_calibration (boolean): Modul zur Selbstkalibrierung der Kamera. • slam (boolean): SLAM-Modul. • stereo (boolean): Stereo-Matching-Modul. • svo (boolean): visuelle Odometrie-Modul. Musterobjekt "calibration": false, "fusion": false, "hand _ eye _ calibration": false, "rectification": false, "self _...
Seite 196
(Fortsetzung der vorherigen Seite) "components _ constraints": { "image _ version": { "max _ version": "string", "min _ "string" version": "valid": false LicenseInfo-Objekte werden in folgenden Anfragen verwendet: • GET /system/license Log: Inhalt einer bestimmten Logdatei im JSON-Format. Ein Objekt des Typs Log besitzt folgende Eigenschaften: •...
Seite 197
"component": "string", "level": "string", "message": "string", "timestamp": LogEntry-Objekte sind in enthalten. LogInfo: Informationen zu einer bestimmten Logdatei. Ein Objekt des Typs LogInfo besitzt folgende Eigenschaften: • date (float): UNIX-Uhrzeit, zu der das Log zuletzt geändert wurde. • name (string): Name der Logdatei. •...
Seite 199
"status": "string", "timestamp": 0, "values": {} NodeStatus-Objekte werden in folgenden Anfragen verwendet: • GET /nodes/{node}/status NtpStatus: Status der NTP-Zeitsynchronisierung. Ein Objekt des Typs NtpStatus besitzt folgende Eigenschaften: • accuracy (string): vom Network Time Protocol (NTP) gemeldete Genauigkeit der Zeitsynchronisie- rung. •...
Seite 200
• PUT /nodes/{node}/parameters/{param} ParameterNameValue: Parametername und -wert. Der Typ des Parameterwerts (Felder ‚value‘ und ‚min‘, ‚max‘, ‚default‘) ist durch das Feld ‚type‘ angegeben und kann einer der eingebauten primitiven Daten- typen sein. Ein Objekt des Typs ParameterNameValue besitzt folgende Eigenschaften: •...
Seite 201
• args (ServiceArgs): siehe Beschreibung von ServiceArgs. • description (string): Kurzbeschreibung des Services. • name (string): Name des Services. • response (ServiceResponse): siehe Beschreibung von ServiceResponse. Musterobjekt "args": {}, "description": "string", "name": "string", "response": {} Service-Objekte werden in folgenden Anfragen verwendet: •...
Seite 202
• DELETE /datastreams/{stream} StreamDestination: Ein Ziel eines rc_dynamics-Datenstroms, dargestellt als Zeichenfolge wie z.B. ‚IP:Port‘. Ein Objekt des Typs StreamDestination ist eine Zeichenfolge. StreamDestination-Objekte sind in enthalten. Stream StreamType: Beschreibung eines Datenstromprotokolls. Ein Objekt des Typs StreamType besitzt folgende Eigenschaften: • protobuf (string): Datenformat zur Serialisierung, d.h. Name der ProtoBuf-Nachrichtendefinition. •...
Seite 204
Bemerkung: Der Benutzer muss bedenken, dass die Swagger UI des rc_visard, auch wenn sie zur Erprobung der REST-API bestimmt ist, eine voll funktionstüchtige Schnittstelle ist. Das bedeutet, dass alle ausgelösten Anfragen tatsächlich bearbeitet werden und den Zustand und/oder das Verhalten des Geräts beeinflussen. Dies gilt insbesondere für Anfrage des Typs POST DELETE...
Seite 205
Abb. 8.1: Startansicht der Swagger UI des rc_visard, bei der die Ressourcen und Anfragen in nodes templates datastreams logs system gruppiert sind. Mithilfe dieser Schnittstelle können alle verfügbaren Ressourcen und Anfragen erprobt werden, indem diese durch Klick auf- und zugeklappt werden. Die folgende Abbildung zeigt ein Beispiel dafür, wie sich der aktuelle Zustand eines Moduls abrufen lässt, indem die Schaltfläche Try it out! betätigt, der erforderliche Parameter ( node -Name)
Seite 206
ausgefüllt und anschließend Execute geklickt wird. Daraufhin zeigt die Swagger UI unter anderem den curl Befehl an, der bei Auslösung der Anfrage ausgeführt wurde, sowie den Antworttext, in dem der aktuelle Status des angefragten Moduls in einer Zeichenfolge im JSON-Format enthalten ist. 8.2.
Seite 207
rc _ stereomatching Abb. 8.2: Ergebnis nach Abfrage des Status des -Moduls 8.2. REST-API-Schnittstelle...
Seite 208
Einige Aktionen, wie das Setzen von Parametern oder der Aufruf von Services, bedürfen komplexerer Parameter als eine HTTP-Anfrage. Die Swagger UI erlaubt es Entwicklern, die für diese Aktionen benötigten Attribute, wie im nächsten Beispiel gezeigt, während der Laufzeit zu erkunden. In der folgenden Abbildung werden die Attri- set _ pose rc _ hand _ eye _ calibration bute, die für den...
Der Benutzer kann diesen vorformatierten JSON-Text als Muster für die Argumente nutzen, um damit den Service tatsächlich aufzurufen: set _ pose Abb. 8.4: Ausfüllen der Argumente des -Services 8.3 Die rc_dynamics-Schnittstelle Die rc_dynamics-Schnittstelle bietet über Echtzeit-Datenströme kontinuierlichen Zugang zu verschiedenen Dynamik-Zustandsschätzungen (Abschnitt 6.3.2).
Bemerkung: Um Rechenressourcen zu sparen, wird empfohlen, die Dynamik-Zustandsschätzungen zu stop- pen, wenn sie nicht länger benötigt werden. 8.3.2 Konfiguration von Datenströmen Verfügbare Datenströme, d.h. Dynamik-Zustandsschätzungen, lassen sich über die REST-API (Abschnitt 8.2.2) des rc_visard auflisten und konfigurieren. So lässt sich beispielsweise mit dem Befehl GET /datastreams ne Liste aller verfügbaren Datenströme abrufen.
Seite 211
Maximal 10 Ziele pro Datenstrom sind erlaubt. Es wird daher dringend empfohlen, Datenströme über die REST-API zu stoppen, wenn sie nicht länger verwendet werden. 8.3.3 Datenstromprotokoll Sobald ein Datenstrom eingerichtet ist, werden die Daten über das folgende Protokoll kontinuierlich an den ange- gebenen Client-Host und Port ( destination ) gesandt:...
Seite 212
Vector3d optional double optional double optional double 8.3.4 Die rc_dynamics-Programmierschnittstelle rc _ dynamics _ api Das Open-Source- -Paket bietet einen einfachen, benutzerfreundlichen C++-Wrapper, mit dem rc_dynamics-Datenströme angefragt und geparst werden können. Siehe http://www.roboception.com/download. 8.3. Die rc_dynamics-Schnittstelle...
8.4 KUKA Ethernet KRL Schnittstelle Der rc_visard stellt ein Ethernet KRL Interface (EKI-Bridge) zur Verfügung, welches eine Kommunikation von KUKA KRL via KUKA.EthernetKRL XML mit dem rc_visard erlaubt. Bemerkung: Dieses Modul ist optional und benötigt eine gesonderte EKIBridge-Lizenz (Abschnitt 9.6). Bemerkung: Das KUKA.EthernetKRL add-on Software-Paket Version 2.2 oder neuer muss auf der Roboter- steuerung aktiviert sein, um dieses Modul zu benutzen.
Seite 214
Das Wurzelelement enthält immer die folgenden Elemente. • : Dieses enthält ein Unterelement, über das die EKI-Bridge das Ziel-Softwaremodul identifiziert. <node> Der Modulname ist bereits in der XML-Konfigurationsdatei vorausgefüllt. <end _ of _ request> • : „End-of-Request“ Flag, das das Ende der Anfrage markiert und diese auslöst. Die generische XML-Struktur sieht wie folgt aus.
Seite 215
8.4.3 Services Das XML-Schema für die Services der Softwaremodule wird aus den Argumenten und der Antwort in JavaScript Object Notation (JSON) generiert, wie in Softwaremodule (Abschnitt 6) und Optionale Softwaremodule (Abschnitt 7) beschrieben. Diese Umwandung ist bis auf die unten beschriebenen Regeln transparent. Konvertierung von Posen: Eine Pose ist ein JSON-Objekt, das die Schlüssel position...
Seite 216
Alle JSON-Schlüssel, deren Wert ein primitiver Datentyp ist und die nicht zu einem Array gehören, werden in XML-Attributen gespeichert. Als Beispiel wird das JSON-Objekt "item": { "uuid": "string", "confidence": "float64", "rectangle": { "x": "float64", "y": "float64" in das folgende XML-Fragment konvertiert <item uuid="..."...
Seite 217
<req> <args> <load _ carrier _ ids> <le>load _ carrier1</le> </load _ carrier _ ids> </args> </req> EKI _ Send Diese Nachricht kann über KRL mit dem Kommando gesendet werden, indem das Listenelement als Pfad angegeben wird. DECL EKI _ STATUS RET EKI _ SetString("rc _ itempick-get _ load _ "req/args/load _ carrier _...
(Fortsetzung der vorherigen Seite) <parameters> <quality value="Low"></quality> </parameters> <end _ of _ request></end _ of _ request> </req> Diese XML-Nachricht kann folgendermaßen über KRL gesendet werden: DECL EKI _ STATUS RET EKI _ SetString("rc _ stereomatching-parameters", "req/parameters/quality/@value", "Low") EKI _ Send("rc _ stereomatching-parameters", "req") In diesem Fall wird nur der gesetzte Wert von...
Seite 221
Der rc_visard kann als PTP-Slave konfiguriert werden. Dies ist über die Standard GigE Vision 2.0/GenICam- Schnittstelle (Abschnitt 8.1) mit dem Parameter GevIEEE1588 möglich. Mindestens ein PTP-Master muss die Zeit im Netzwerk zur Verfügung stellen. Unter Linux kann ein PTP-Master beispielsweise auf dem Netzwerkport eth0 gestartet werden mit sudo ptpd --masteronly --foreground -i...
9 Wartung Warnung: Das Gehäuse des rc_visard muss für Wartungsarbeiten nicht geöffnet werden. Das unbefugte Öffnen des Produkts führt zum Erlöschen der Garantie. 9.1 Reinigung der Kameralinsen Glaslinsen sind mit einer Anti-Reflex-Beschichtung versehen, um Spiegelungen zu verringern. Bei der Reinigung der Linsen ist besonders vorsichtig vorzugehen.
Seite 223
.mender -Suffix erkennbar ist. Ist ein neues Firmware-Update für den rc_visard erhältlich, kann die Datei von der Roboception-Homepage (http://www.roboception.com/download) auf den lokalen Rechner heruntergeladen werden. Schritt 2: Hochladen der Update-Datei Soll das Update über die REST-API des rc_visard vorgenommen wer-...
Bedarf wiederhergestellt werden. Dieses Verfahren wird auch als Roll- back bezeichnet. Bemerkung: Es wird dringend empfohlen, die neueste Firmware-Version zu verwenden, die von Roboception zur Verfügung gestellt wurde. Auf das Rollback sollte nur dann zurückgegriffen werden, wenn es mit der aktualisierten Firmware-Version große Probleme gibt.
Der Neustart ist abgeschlossen, wenn die LED wieder grün leuchtet. 9.6 Aktualisierung der Softwarelizenz Lizenzen, die von Roboception zur Aktivierung zusätzlicher Funktionen erworben werden, können über die Seite System der Web GUI (Abschnitt 4.6) installiert werden. Der rc_visard muss neu gestartet werden, um die Lizenz nutzen zu können.
10 Zubehör 10.1 Anschlussset Roboception bietet ein optional erhältliches Anschlussset an, um Kunden bei der Einrichtung des rc_visard zu unterstützen. Bei dauerhafter Installation muss der Kunde ein geeignetes Netzteil bereitstellen. Das Anschlussset besteht aus folgenden Elementen: • Netzwerkkabel mit gerader M12-Buchse und geradem RJ45-Stecker, Länge: 2 m, 5 m oder 10 m •...
11 Fehlerbehebung 11.1 LED-Farben Während des Boot-Vorgangs wechselt die LED mehrmals die Farbe, um die verschiedenen Boot-Phasen anzuzei- gen: Tab. 11.1: LED-Farbcodes LED-Farbe Boot-Vorgang Weiß Stromversorgung OK Gelb Normaler Boot-Vorgang Violett Blau Grün Boot-Vorgang abgeschlossen, rc_visard einsatzbereit Die LED dient ferner dazu, Probleme oder Fehlerzustände zu signalisieren, um den Benutzer im Rahmen der Problembehandlung zu unterstützen.
• Reinigen Sie die Kühlrippen und das Gehäuse. • Stellen Sie sicher, dass in alle Richtungen um die Kühlrippen 10 cm Platz sind, damit die konvektive Küh- lung ordentlich funktioniert. • Vergewissern Sie sich, dass die Umgebungstemperatur der Spezifikation entspricht. Der Sensor kann die Verarbeitungsgeschwindigkeit drosseln wenn die Kühlung nicht ausreicht oder die Umge- bungstemperatur außerhalb des zugelassenen Bereichs liegt.
abnehmen. Die Web GUI ist für Konfigurations- und Validierungszwecke gedacht, nicht jedoch, um den rc_visard dauerhaft zu überwachen. 11.4 Probleme mit den Kamerabildern Kamerabild ist zu hell • Wenn die Kamera im manuellen Belichtungsmodus arbeitet, versuchen Sie, die Belichtungszeit zu verkür- zen (siehe Parameter, Abschnitt 6.1.4) oder •...
11.5 Probleme mit Tiefen-/Disparitäts-, Fehler- oder Konfidenzbil- dern Die folgenden Hinweise gelten auch für Fehler- und Konfidenzbilder, da sie direkt mit den Disparitätsbildern zusammenhängen. Disparitätsbild spärlich befüllt oder leer • Überprüfen Sie, ob die Kamerabilder gut belichtet und scharf sind. Befolgen Sie bei Bedarf die Anweisun- gen in Probleme mit den Kamerabildern (Abschnitt 11.4).
• Verringern Sie den Abstand zwischen der Kamera und der Szene. Der Tiefenmessfehler nimmt quadratisch mit dem Abstand zu den Kameras zu. • Überprüfen Sie, ob die Szene wiederkehrende Muster enthält und entfernen Sie diese bei Bedarf. Diese könnten falsche Disparitätsmessungen verursachen. Disparitätsbild ist zu glatt •...
12 Kontakt 12.1 Support Support-Anfragen können Sie uns entweder über die Seite http://www.roboception.com/support oder per E-Mail support@roboception.de zukommen lassen. 12.2 Downloads Software-SDKs usw. können von der Roboception-Homepage heruntergeladen werden: http://www.roboception. com/download. 12.3 Adresse Roboception GmbH Kaflerstraße 2 81241 München Deutschland Web: http://www.roboception.com...
13 Anhang 13.1 Formate für Posendaten 13.1.1 XYZABC-Format Das XYZABC-Format wird verwendet, um eine Pose mit sechs Werten auszudrücken. ���� �� gibt die Positi- onskoordinaten in Millimetern an. ������ sind Eulersche Winkel in Grad. Die für Eulersche Winkel eingesetzte Konvention lautet ZYX, d.h. �� rotiert um die ��-Achse, �� rotiert um die �� -Achse und �� rotiert um die ��-Achse. Die Elemente der Drehmatrix lassen sich wie folgt berechnen: ��...
Seite 235
Die Transformation lässt sich wie folgt auf einen Punkt �� anwenden: �� = ���� + ��. Bemerkung: Im XYZ+Quaternion-Format werden die Posendaten in Metern, im XYZABC-Format in Milli- metern angegeben. 13.1. Formate für Posendaten...
HTTP Routing Table /datastreams GET /datastreams GET /datastreams/{stream} PUT /datastreams/{stream} DELETE /datastreams/{stream} /logs GET /logs GET /logs/{log} /nodes GET /nodes GET /nodes/rc _ silhouettematch/templates GET /nodes/rc _ silhouettematch/templates/{id} GET /nodes/{node} GET /nodes/{node}/parameters GET /nodes/{node}/parameters/{param} GET /nodes/{node}/services GET /nodes/{node}/services/{service} GET /nodes/{node}/status PUT /nodes/rc _ silhouettematch/templates/{id} PUT /nodes/{node}/parameters PUT /nodes/{node}/parameters/{param}...