EINFACH, UNABHÄNGIG, STANDARDKONFORM

Softwareentwicklung wie sie sein sollte

Mit GenICam als standardisierte Kameraschnittstelle und Visionprotokolle wie USB3 und GigE Vision sind hilfreiche Komponenten für die Entwicklung von Maschine Vision Anwendungen vorhanden.

Wer aber denkt, dass herstellereigene Entwicklungswerkzeuge dadurch nicht mehr nötig sind, kennt IDS peak noch nicht.

Wer heute Maschine Vision Anwendungen entwickelt, kommt am generischen Schnittstellenstandard GenICam der EMVA (European Machine Vision Association) kaum mehr vorbei. Die einheitliche Verwendung von Kameras unterschiedlicher Hersteller vereinfacht heute viele Integrationsprozesse und Inbetriebnahmen von Vision Anwendungen und macht Kamerahardware für den Anwender einfacher austauschbar. Und auch für Hersteller von Industriekameras wie der IDS Imaging Development Systems GmbH ist klar, dass Datenschnittstellen wie USB3 Vision und GigE Vision unverzichtbar sind, wenn Kameras am Markt bestehen sollen. Dadurch funktionieren sie automatisch mit den meisten GenICam-kompatiblen Anwendungen, ohne dass dazu herstellerspezifische Treibersoftware installiert werden muss. Denn kompatible Vision Transport Layer bringen Bildverarbeitungsanwendungen wie z.B. HALCON von MVTec bereits mit. Ist da überhaupt noch Platz oder die Notwendigkeit für herstellereigene Entwicklungspakete? Ist GenICam nicht bereits das optimale Interface, um standardkonforme Machine Vision Anwendungen zu entwickeln?

Optimales Kamerainterface?

Mit der Verlagerung der Funktionalität in die Kameras hat die Standardisierung einen grundlegenden und notwendigen Wandel durchgesetzt. Dadurch enstand eine sehr variable Softwarebasis, die zur Kommunikation mit allen Vision Kameras verwendbar ist. Alle Module und Funktionen sind absolut kameraunabhängig und universell formuliert. Kleinste Details und Parameter lassen sich einzeln ansprechen und einstellen, wodurch fast unzählige Kombinationen möglich sind. Das macht die Syntax der verwendeten Standardsprache zwar sehr flexibel aber alles andere als einfach und übersichtlich nutzbar. Selbst für einfache Programmabläufe werden etliche Codezeilen und Parametereinstellungen in korrekter Kombination benötigt, was schnell zu fehleranfälligen und unübersichtlichen Abläufen führt. Die strikte Trennung und unterschiedliche Handhabung der Kamerafunktionalität über GenAPI und des reinen Bildspeicherpfads über die Transport Layer ist zwar strukturell nachvollziehbar, macht aber die Anwendungsentwicklung nicht gerade einfacher und übersichtlicher.

Die Programmier-API eines Produkts ist eine Benutzerschnittstelle und damit ein Werkzeug, das daran gemessen wird, wie gut es sich bedienen lässt. Und nur positive Nutzererfahrungen tragen zum Erfolg eines Produktes bei. Als Schnittstelle repräsentiert sie für Entwickler die eigentliche Kamera und deren Möglichkeiten. Wichtige Attribute, die eine positive Nutzererfahrung beschreiben sind: einfach, selbsterklärend, flexibel, übersichtlich, zukunftsfähig und unterstützend. Trotz der vielen technisch hervorragenden Lösungen des GenICam Standards können die Kamerahersteller dem Anwender allein durch die Features der Kameras keine ausreichende Unterstützung und damit auch keine bessere Anwendererfahrung bieten.

„Eine Vielzahl guter Gründe spricht dafür, als Kamerahersteller dem Anwender auch softwareseititg eine vollständige Unterstützung anzubieten.“

— Maike Strecker, Produktmanagerin bei IDS —

Das Beste aus mehreren Welten

IDS hat aus den Kundenerfahrungen mit GenICam und der eigenen IDS Software Suite die Vor- und Nachteile identifiziert und möchte die Anwender mit IDS peak in mehrerer Hinsicht unterstützen. Mit GenICam als standardisierte Softwarebasis behält der Anwender auch mit dem neuen SDK weiterhin die freie Wahl, welche Kameras er einsetzen möchte, ohne dabei auf die Vorteile einer modernen Entwicklungsschnittstelle verzichten zu müssen. Für ein optimales Anwendererlebnis bringt das plattformunabhängige IDS peak SDK von Sourcecode Samples bis Transport Layer alle erforderlichen Komponenten mit, sodass Kunden direkt mit der Entwicklung eigener Anwendungen starten können. Als positiven Nebeneffekt können IDS peak Nutzer auf vollständigen Support für alle Anwendungskomponenten auf IDS als einzigen Ansprechpartner zurückgreifen.

IDS peak vereinfacht den Standard

IDS peak stellt für Anwendungsentwickler alle nötigen Bibliotheken und Software-Schnittstellen bereit und bildet somit ein vollständiges SDK (Software Development Kit). Gleichzeitig ist die neu entwickelte, objektorientierte Programmierschnittstelle aber erheblich einfacher zu bedienen als GenICam, ohne dessen Funktionsumfang einzuschränken bzw. zu umgehen.

Die Kommunikation zur Kamerahardware erfolgt ausschließlich über die standardisierte Schnittstelle und die Vision Transport Layer, wodurch IDS peak absolut hardwareunabhängig und standardkonform bleibt. Die Austauschbarkeit und Kompatibilität mit allen USB3 Vision und GigE Vision konformen Industriekameras bleibt erhalten.

Es gibt keinerlei herstellerspezifische Einschränkungen und selbst der Mischbetrieb von Kameras verschiedener Hersteller beziehungsweise mit unterschiedlichen Schnittstellen ist problemlos möglich.

„Die von uns entwickelte, einfach verständliche Programmierschnittstelle ist eine komfortable Alternative zum direkten Zugriff über GenTL und GenAPI. Darüber hinaus sorgen spezielle Convenience-Klassen dafür, dass der Umfang des benötigten Codes und damit der Programmieraufwand sinkt“

— Maike Strecker —

Dazu orientiert sich IDS peak an der Modulhierarchie, die durch den GenTL Standard vorgegeben ist. Die Module sind über Deskriptoren ansprechbar, die so etwas wie Visitenkarten der Module darstellen. So lassen sich bereits ausgewählte Informationen der Module abfragen, bevor sie verfügbar und geöffnet sind. Wohingegen die Funktionalitäten der Module in unteren Schichten durch sogenannte Eltern-Kind-Beziehungen erst dann sichtbar und nutzbar werden, wenn die entsprechenden Module geöffnet und verfügbar sind. Dieses Prinzip verringert Fehler im Umgang mit den Klassen und damit auch Entwicklungszeit einer Anwendung.

Ein Beispiel dafür ist der Zugriff auf die Funktionen einer Kamera. Nur über eine bereits geöffnete Kamera bekommt man Zugriff auf ihre "Nodemap". Erst darüber sind dann detaillierte Abfragen und spezielle Einstellungen dieser Kamera möglich.

Lesen des Gerätenamens über die Nodemap einer Kamera

// get nodemap of an open camera device
auto remoteNodeMap = camera->RemoteDevice()->NodeMaps().at(0);
// get DeviceModelName from cameras nodemap
auto modelName = remoteNodeMap->FindNode<StringNode>("DeviceModelName")->Value();

Convenience-Klassen und -Funktionen, die im Standard nicht vorhanden sind, vereinfachen den Umgang mit wiederkehrenden Prozessen, wie z.B. das Device- und Speicher-Handling. Der Einsatz dieser Modulklassen reduziert den notwendigen Anwendungscode und verbessert damit Lesbarkeit und Stabilität der Kameraanwendung.
Mit dem DeviceManager-Modul wird das Auffinden, Listen und Öffnen von angeschlossenen Kameras und das Verwalten der verfügbaren Transport Layer und Schnittstellen zum Kinderspiel. Mit einem simplen Update-Befehl scannt das Modul das gesamte System und mit wenigen Codezeilen ist ein vollständiger "Device Tree" aufgebaut beziehungsweise eine bestimmte Kamera geöffnet. Vereinfacht dargestellt reichen vier Codezeilen, um mit dem IDS peak DeviceManager Modul eine angeschlossene Kamera zu öffnen.

Kamera mit IDS peak DeviceManager Modul öffnen

// create a device manager object
auto deviceManager = std::make_shared<peak::DeviceManager>();
deviceManager->Update();
// get vector of device descriptors
auto devices() = deviceManager->Devices();
// select and open the first camera
auto device = deviceManager->Devices().at(0)->OpenDevice();

IDS peak wird stetig um solche Module erweitert. Geplant sind bereits eine vereinfachende Kamera-Klasse und ein Acquisition-Manager für die Konfiguration des Bildeinzugs. Einige weitere bekannte Methoden wie z.B. der Einsatz von "Shared Pointern", die automatisch ungenutzte Speicherressourcen freigeben, oder eine modulabhängige Thread-Sicherheit machen IDS peak zu einem modernen objektorientierten Programmier-Interface, das Programmierern sehr viel Unterstützung und Rückmeldung bei der Arbeit bietet.

IDS peak ist aber nur Host-Software, die durch die GenICam Softwarebasis vollständig kameraunabhängig bleibt und auch keinerlei Bindung an Kameramodelle oder Firmwareversionen aufweist. Anwendungsentwicklern bleibt dadurch weiterhin die freie Wahl, ob sie den Komfort, die Unterstützung und die Vereinfachung von IDS peak nutzen möchten. Die Kamerafeatures jeder Vision-Kamera können damit auch über jede andere GenICam-konforme Anwendung genutzt werden.

Neues Konzept, neue Software, bekannt einfach

IDS stellt auch seinen USB3 Vision und GigE Vision Industriekameras mit IDS peak eine vollständige Softwareunterstützung zur Seite. Bestandskunden der langjährigen IDS Software Suite können nun auch in der Vision Welt von einfacher Handhabung und uneingeschränktem Herstellersupport profitieren. Als Erweiterung des GenICam Standards ist IDS peak nicht nur ein standardkonformes SDK mit einfacher und selbsterklärender Programmier-API, sondern auch unabhängige Software zum Betrieb, Konfiguration und Programmierung aller Vision-konformen Kameras.

Mit IDS peak vereint der Kamerahersteller wieder alle Produkte unter einer Software Suite. Das macht es für Anwender wieder sehr einfach.