ROS-Node: "camera_localization"
Die in diesem ROS-Node implementierte Positionsbestimmung arbeitet mit Markern (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".
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.
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 zu beschicken.
Dies ist insbesondere beim Andocken des AGV an eine Docking-Station notwendig.
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.
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.
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:
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
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
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.
Kostenlose:
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:
Durch die Navigation auf Basis von eindeutig codierten, Decken-montierten Markern auch an Orten mit großer Veränderung der Szenerie korrekte Funktion
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
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)
Geringerer Arbeitsspeicher- und Rechenbedarf als übliche Kartierungs- und Lokalisierungs-Nodes auf Lidar-Basis
Möglich als optionale Lösung für bestimmte Kundenanwendungen oder nur für bestimmte Bereiche im Werk
Da sich die IPS als Entwicklungs-Dienstleister und nicht hauptsächlich als Software-Anbieter sieht, bietet sie ihren Kunden die vollen und unbeschränkten Rechte an der entwickelten Software an.
Einzig behält die IPSS dabei das Recht, ihre Software auch an andere Kunden anzubieten, um über Kunden-übergreifend standardisierte Lösungen und auf Wunsch auch Support und Updates anbieten zu können.
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 unbeschränkten und vollen Rechte am Source-Code der Software anfragen.
Unverbindlich: