Produkte:

Landmark-basierte Positionsbestimmung:

ROS-Node: "camera_localization"

Die in diesem ROS-Node implementierte Positionsbestimmung arbeitet mit Landmarks (wie QR-Codes, ARUCO-Markern, Daten-Matrizen oder frei definierbaren 2D-Markern), welche an bekannten Positionen in der Umgebung angebracht sind.

Auf Basis von mindestens einem erfassten Marker trianguliert der ROS-Node die dreidimensionale Pose (Position, Rotation) einer kalibrierten Kamera des AGVs und published sie über das ROS-Topic "tf".

Mögliche Positionsbestimmungsverfahren

Der angebotene ROS-Node implementiert zwei mögliche Positionsbestimmungsverfahren:

• Das üblichere Verfahren "Single Marker Localization"
Triangulation auf Basis der Eckpunkte eines einzelnen Markers:
Dieses Verfahren erreicht auf bis zu 0.5 m Distanz eine Genauigkeit im Millimeter-Bereich, kommt allerdings bereits mit einem detektierten Marker aus.

• Das weniger häufig verwendete "Multi Marker Localization"-Verfahren
Triangulation auf Basis von Punkten mehrerer verteilter Marker:
Dieses Verfahren erreicht auf bis zu 2 m Distanz eine Genauigkeit im Millimeter-Bereich, setzt aber mindestens drei erfasste Marker voraus.

Sind beide Verfahren enabled und werden mindestens drei Marker im Sichtbereich erkannt, wird eine "Multi Marker Localization" durchgeführt. Werden weniger erkannt oder schlägt die "Multi Marker Localization" fehl, wird automatisch auf die "Single Marker Localization" als Fallback gewechselt.
Eine Status-Nachricht gibt das derzeit verwendete Positionsbestimmungsverfahren, bzw. eben den dadurch derzeit erreichten Genauigkeits-Status wieder, um die Genauigkeit der gepublishten Pose bewerten zu können und in Filter-Verfahren richtig gewichten zu können.

Anwendungen:

Lokalisierung eines Roboter-Arms im Maschinen-Koordinatensystem

Bestimmung der Transformation zwischen dem Maschinen-Koordinatensystem und dem eines auf dem AGV montierten Cobots.

Dadurch ist es möglich das Werkstück-Spannsystem einer (CNC-) Maschine durch diesen, ohne zusätzliche Hilfs-Führungen oder sonstige Notwendigkeit von Anpassungen an der Maschine, genau anzufahren und mittels des Roboter-Arms zu beschicken.

Positionierung relativ zu einer Docking- oder Verlade-Stelle


Bestimmung der genauen Pose des AGV für die Positionierung bezüglich einer Andock-Stelle.

Dies ermöglicht das zuverlässige Andocken des AGV an eine Lade-Station oder an einer Verlade-Stelle zur Übergabe eines Wechsel-Werkstückträgers.

Eigenschaften des ROS-Nodes

Software-Umgebung, Schnittstellen und Einstellungsmöglichkeiten

Der ROS-Node "camera_localization" wird im Master/Main-Branch für ROS (1) - Noetic, unter Ubuntu 20.04, maintained.
Er ist allerdings so konzipiert, dass er einfach auf andere ROS-Distributionen portiert werden kann.

Unterstützt Kamera-Streams aller Camera Image Publisher Nodes welche im Format "sensor_msgs/Image" publishen
➞ Kompatibel zu USB Cameras (UVC Standard) und Ethernet-Cameras (GenICam/GigE Standard) über entsprechende Open-Source ROS Image Publisher Nodes.

Der "camera_localization"-Node published drei Typen von Nachrichten:

• Die Transform vom Koordinaten-Ursprung "world_frame" zur Kamera im Format "geometry_msgs/TransformStamped"

• Die selbe Pose im Format "geometry_msgs/Pose"

• Eine Status Nachricht im eigens definierten Format "camera_localization/CameraLocalizationStatus" mit den Variablen:

- std_msgs/Header "header": Ein standard ROS-Message Header (mit Node-Name und Timestamp)
- bool "marker_detected": Flag ob (bekannte) Marker detektiert wurden
- int32 "number_of_detected_markers": Anzahl (bekannter) detektierter Marker
- int32[] "marker_ids": Die ID's der (bekannten) detektierten Marker
- bool "position_determined": Flag ob die Pose der Kamera erfolgreich bestimmt werden konnte
- int16 "localization_mode": 1 wenn erfolgreich eine Multi-Marker-Lokalization durchgeführt werden konnte, 0 wenn nur eine Single-Marker-Lokalization durchgeführt werden konnte

Die folgende Liste enthält die einstellbaren "ROS-Params" des Nodes:

- "calibration_filename": Pfad der Kalibrierungsdatei der Kamera im standardisierten ".INI"-Format
- "marker_list_filename": Pfad der Marker-Koordinaten-Liste im ".CSV"-Format
- "marker_size": Größe der verwendeten Marker (in m)
- "dict_info": Verwendetes Marker-Dictionary (ARUCO, APRIL)
- "multi_marker_localization_enabled": Flag ob die Multi-Marker-Lokalisierung verwendet werden soll
- "single_marker_localization_enabled": Flag ob die Single-Marker-Lokalisierung verwendet werden soll
(Sind sowohl Multi- als auch Single-Marker-Lokalisierung aktiviert wird zunächst eine Multi-Marker-Lokalisierung versucht und wenn diese nicht möglich ist wird als Fallback eine Single-Marker-Lokalisierung durchgeführt. Eine Variable in der Status-Meldung gibt in diesem Fall die Art des verwendeten Lokalisierungsverfahrens aus.)
- "roi_enabled": Flag ob der Kamera-Bildbereich auf eine Region-of-Interest beschränkt werden soll
- "roi_[x/y/w/h]": Region-of-Interest des Kamera-Bildes

Über ein "remap" von einem ROS-Topics im Format "sensor_msgs/Image.msg" auf das Topic "camera_localization_node/image_raw" wird dem ROS-Node das zu verwendende Image-Topic zugewiesen.

Verwendung des ROS-Nodes

Der Start des Nodes erfolgt über ein "Launch-Script" in welchem alle Einstellungen des Nodes als "ROS-Params" gesetzt werden und sowohl der Pfad des zu verwendenden Kamera-Kalibrierungs-Files als auch der Marker-Koordinaten-Liste angegeben werden.
Der Node läuft dabei im Hintergrund, zu Debug-Zwecken kann allerdings aktiviert werden, dass das aktuell ausgewertete Kamera-Bild in einem OpenCV-Image-Window angezeigt wird, in welchem auch die Umriss der erkannten Marker durch Lables gekennzeichnet werden.
Zur Überwachung des Nodes kann die Status-Nachricht im Format "camera_localization/CameraLocalizationStatus" für jeden Callback über den ROS-Command "ros echo" ausgegeben, oder von einem Node, welcher diesen Message-Type included empfangen und  interpretiert werden.
Für die bestimmte Transformation im "geometry_msgs/TransformStamped", als auch im "geometry_msgs/Pose"-Format besteht, wie für alle standard ROS-Formate, die Möglichkeit sie über RVIZ zu visualisieren.

Montage und Kartierung der Marker-Targets

Auf einer separaten Seite ist zusammengestellt, was bezüglich der Beschaffenheit, Montage und Kartierung der Marker-Targets zu berücksichtigen ist.

Mehr Informationen über die:

Beispiel-Aufbau

Bestehend aus: einer ebenen Span-Verbundplatte mit vier aufgeklebten Markern und der an den Laptop, auf welchem der ROS-Node läuft, angeschlossenen USB-Camera, welche lokalisiert wird.

Abbildung: Demonstrator-Versuchsanordnung

RVIZ-Output

Visualisierung der bestimmten Kamera-Pose in RVIZ, wie auch Ausgabe des Kamera-Bildes mit Labeln, welche die Ursprungs-Punkte der erkannten Marker anzeigen. Die untere linke Ecke des Target-Boards ist dabei der Ursprung des definierten globalen Koordinaten-Systems.

Abbildung: RVIZ-Output für die gezeigten Versuchsanordnung

Sie wollen die beschriebene kamerabasierte Positionsbestimmung testen?

Gerne können Sie sich auf Basis unseres Demonstrator-Setups (Kamera, PC und Marker-Platte) in Stuttgart, in den Räumlichkeiten der TTI, selbst ein Bild über die Genauigkeit und Robustheit der angebotenen kamerabasierten Positionsbestimmung machen.

Sie wollen mehr Daten zur angebotenen kamerabasierten Positionsbestimmung?

Gerne erstellen wir Ihnen auf Anfrage einen Test-Report über die Korrektheit der Schnittstellen für das aktuellste Release und die Genauigkeit der Positionsbestimmung unter der verwendeten Hardware (dies kann eine gewisse Zeit dauern, da dieser erst auf Wunsch erstellt wird).

Kostenlosen:

Gründe für die kamerabasierter Positionsbestimmung

Insbesondere als Ergänzung zur Lidar-Lokalisierung/redundantes System

Robustheit gegenüber dynamischer Umgebung

Durch die Navigation auf Basis von eindeutig codierten, Decken-montierten Markern auch an Orten mit großer Veränderung der Szenerie korrekte Funktion

Höhere Positions-genauigkeit

In speziellen Anwendungen höhere Positionsgenauigkeit als bei der Lokalisierung mit Standard-Lidaren möglich (durch Multi-Marker-Triangulation und bei nahen Targets), mit Varianz im Millimeter-Bereich

Zuverlässig bei Skalierung

Im Gegensatz zu z.B. Funk-basierten Lösungen bei der unabhängigen Verwendung, an mehreren Orten gleichzeitig, keine Gefahr von gegenseitiger Störung (Interference)

Geringer Rechenbedarf

Geringerer Arbeitsspeicher- und Rechenbedarf als übliche Kartierungs- und Lokalisierungs-Nodes auf Lidar-Basis

Flexibel/Optional

Möglich als optionale Lösung für bestimmte Kundenanwendungen oder nur für bestimmte Bereiche im Werk

Lizenz-Modell

Unser Ziel, als IPSS, ist es eine Positionsbestimmungs-Lösung zu bieten, welche unsere Kunden, ohne sich abhängig zu machen, in ihre eigenen AGV-Ökosysteme integrieren können und bieten unseren Kunden daher auch bewusst die Möglichkeit an, die unbefristeten und firmenweiten Nutzungsrechte und den menschenlesbaren Sourcecode zu erwerben. Um die angebotene kamerabasierte Positionsbestimmung ohne rechtliche Abhängigkeiten als Teil des eigenen Produkts integriert haben zu können.

Da es bis dorthin aber natürlich ein längerer Weg ist, ist das vorgesehene Vertriebs-Modell dem Kunde, nachdem er sich bei einer kostenlosen Vorstellung des Systems einen ersten Eindruck machen konnte, in einem ersten klein-Auftrag einen Technologie-Demonstrator auf Basis dessen AGVs aufzubauen und dadurch die Lauffähigkeit auf der Ziel-Platform sicherzustellen.

Ist diese gewährleistet hat der Kunde anschließend die Möglichkeit eine unbefristete und firmenweite Lizenz zu erwerben, welche auch das Recht zum Weitervertrieb in binärer Form einschließt, und kann gegen einen Aufpreis auch die lesbaren Source-Files und das Recht zum Weitervertrieb von auf Basis dieser weiterentwickelter Software erwerben.

Dürfen wir Ihnen ein Angebot machen?

Unverbindliches Angebot für den Aufbau eines Prototypen/Technologiedemonstrators auf Basis Ihrer AGV-Plattform (gerne auch nach kostenlosem Test an unserem generischen Demonstrator) oder bereits für die Lizenzierung der vollen Nutzungsrechte und des Source-Codes des ROS-Nodes anfragen.

Unverbindlich: