Moderne Fertigungstechnologien erfordern flexible Fertigungsverfahren, wie sie durch den Einsatz von Industrierobotern verwirklicht werden können. Die zunehmende Integration von Werkzeugmaschinen und Industrierobotern in Fertigungszellen erfordert die Entwicklung neuer Konzepte für kollisionsfreies Arbeiten mehrerer flexibler Komponenten.
Diese Arbeit stellt ein Konzept für die Echtzeit Kollisionsvermeidung für einen Indutrieroboter vor.
Der erste Teil dieser Arbeit beschäftigt sich mit der Realisation von Vorbedingungen, wie sie für eine Echtzeit-Bildverarbeitung notwendig sind. Zunächst wird ein Verfahren erläutert, welches geeignet ist, ein Stereokamera-System derart zu kalibrieren, daß eine zuverlässige und genaue Detektion von im Arbeitsraum des Industrieroboters auftauchenden Hindernissen ermöglicht wird.
Der zweite Teil dieser Arbeit beschäftigt sich mit dem Entwurf eines verhaltensbasierten Konzepts der Einflußnahme auf die Roboterbewegung. Eine Kollisionsvermeidungsstrategie wird entwickelt und in Form eines Fuzzy-Controllers realisiert.
Die für die Realisierung zur Verfügung stehenden Hard- und Softwarekomponenten werden im folgenden kurz beschrieben.
Die eingesetzte Hardware besteht im wesentlichen aus dem Industrieroboter, der angeschlossenen Robotersteuerung, einem mit Bildverarbeitungskarten ausgestatteten VME 1-Bus-System und einer Workstation für die Softwareentwicklung.
Einen Überblick über die Fertigungszelle bzw. die Anordnung der Kameras gibt die Abbildung 2.1.
Bei dem UNIMATION Industrieroboter vom Typ PUMA 562 in der Fertigungszelle handelt es sich um einen Kombi-Arm-Roboter, der sechs Freiheitsgrade in der Bewegung aufweist.
Gelenk 1 schwingt um eine Achse, welche vertikal durch den Rumpf des Roboters verläuft. Gelenk 2 rotiert um eine Achse horizontal durch das Schulterstück und verläuft in einer lotrechten Bewegung zum Rumpf. Das dritte Gelenk rotiert um eine Achse, die parallel zur Gelenk-Achse 2 verläuft. Diese Bewegungen geben dem Arm drei Freiheitsgrade. Hinzu kommen die drei Freiheitsgrade der drei Einzelgelenke des Handgelenks. Die Bewegungen der Gelenke 4, 5 und 6 werden als "Rollen", "Steigung" und "Gierung" bezeichnet.
Die angeschlossene Robotersteuerung UNIMATION MARK3 enthält die Regler für die einzelnen Roboterachsen und die Spannungsversorgung für die Gelenkmotoren. Außerdem ist ein Steuerrechner enthalten, welcher die Programmierung der Roboterbewegungen in der Programmiersprache VAL-II ermöglicht. Die Steuerung erlaubt den Anschluß eines Terminals zur Ein- und Ausgabe der Programme, eines Floppy-Disk-Laufwerkes zur externen Datenspeicherung und eines Teach-Zusatzgerätes zur Handsteuerung des Roboters. Zusätzlich kann ein externer Rechner über eine serielle RS422-Schnittstelle angeschlossen werden.
Bei der eingesetzten Bildverarbeitungshardware handelt es sich im wesentlichen um ein VME -BUS-System, ausgerüstet mit einer Motorola 68040-CPU-Karte der Firma Microsys und speziellen Bildverarbeitungskarten der Firma Eltec. Zu Kommunikationszwecken ist der Rechner zusätzlich mit einer VME-BUS-Ethernetkarte ausgestattet. Bei den Bildverarbeitungskarten handelt es sich im einzelnen um jeweils zwei IC40 Einplatinencomputer mit integriertem Framegrabber, zwei Kantenverstärkungskarten vom Typ THINEDGE und zwei Vektorisierungkarten2 vom Typ VECTOR.
Die eingesetzte CPU-Karte verfügt über einen Motorola MC68040 Prozessor mit integriertem Floating Point Prozessor (FPU) und Memory Management Unit (MPU). Der Prozessor wird mit 25 MHz Takt betrieben, der Bustakt beträgt ebenfalls 25 MHz. Die Karte verfügt über 16 MB RAM (maximal 64 MB), einen integrierten NCR53C710 SCSI Controller und zwei asynchrone MC68681 DUART's mit vier seriellen Schnittstellen, welche jeweils für RS232, RS422 oder RS485 Pegel gejumpert werden können. Eine dieser seriellen Schnittstellen ist für den Anschluß eines Terminals vorgesehen, welches die Systemkonsole3 des Rechners darstellt. Außerdem verfügt die CPU-Karte über ein am sogenannten Piggyback-Connector ``huckepack'' angeschlossenes Microsys GRC06-Grafikboard und über eine 32 Bit VME-Bus Schnittstelle.[7]
Die IC40 CPU ist ein Einplatinencomputer mit integriertem Framegrabber, welcher Videosignale von standard Videokameras digitalisieren und flimmerfrei auf Workstation-Monitoren ausgeben kann. Die integrierte Motorola 68040 CPU wird mit 25 MHZ Takt betrieben und zu kommunikationszwecken durch einen 68681 DUART Chip unterstützt. Die beiden seriellen Schnittstellen des DUART werden für einen Maus- und einen Tastaturanschluß genutzt. Die angelegten Videosignale müssen den Normen CCIR (625-Zeilen) oder EIA4 (525-Zeilen) entsprechen. Bis zu vier Kameras können an einer einzigen IC40 Karte angeschlossen werden, ein eingebauter Multiplexer erlaubt die Auswahl der zu digitalisierenden Videoquelle. Programmierbare Digitalisier-Frequenzen erlauben es, Daten in gleicher horizontaler und vertikaler Auflösung abzuspeichern (Vorteil für die Bildverarbeitung: Es ergeben sich quadratische Pixel). Eine ``Look Up Table'' (LUT5) mit 256 8-bit Einträgen kann für Grauwert-Transformationen genutzt werden. Zusätzlich zum VME-BUS, über den genauso, wie über die integrierte CPU auf alle Ressourcen der IC40 zugegriffen werden kann, verfügt die Karte über einen sogenannten Videobus (VIB) der eine pipeline-artige6 Kommunikation mit weiteren Bildverarbeitungskomponenten zuläßt.[8]
Bei den eingesetzten CCD-Kameras handelt es sich um schwarzweiß Kameras des Herstellers Hitachi, Modell KP-161. Die Kameras verfügen über einen Graustufen CCD-Sensor der Größe 4,85mm x 6.5 mm 2 und liefern ein Videobild der Norm CCIR. Die Kameras verfügen über eine Schnittstelle zum Anschluß von Objektiven mit automatischer Blendeneinstellung. Diese Schnittstelle stellt für Objektive mit einer solchen Funktionalität eine Spannungsversorgung und ein Videosignal zur Verfügung.
Die verwendeten Objektive verfügen über eine automatische Blendeneinstellung, welche abhängig vom Videosignal, eine konstante Grauwertverteilung regelt. Zwei Einstellregler erlauben die Justierung der Parameter der mittleren und der größsten Helligkeit für diese Grauwertregelung. Die Brennweite der Objektive beträgt 4,5-10mm.
In der hier beschriebenen Arbeitszelle werden zwei 2000 Watt Halogenstrahler eingesetzt, welche die von den Kameras beobachtete Szenerie indirekt beleuchten. Das regelungstechnische Labor verfügt zusätzlich über abdunkelbare Fenster, so daß eine konstante Beleuchtung gewährleistet werden kann.
Die eingesetzten Kantenverstärkungskarten der Firma ELTEC Modell THINEDGE sind
Echtzeit-Bildverarbeitungsprozessoren für die Extraktion von rauschfreien Konturen
aus Grauwertbildern. Die extrahierten Konturen sind 1 Bit breite (thinned=ausgedünnt)
binäre Konturen ohne kritischen Schwellenwert. Zu jedem Konturpunkt wird ein
korrespondierendes 8 Bit Winkel Attribut für die Kontur-Orientierung generiert.
Die THINEDGE-Karten arbeiten als Pipeline-Prozessoren auf dem schon in Abschnitt
2.1.6 erwähnten Video-BUS. Sie verfügen außerdem über ein VME-BUS
Interface, über das eine externe CPU Zugriff auf die internen Register und die
``look-up table'' (LUT), z.B. zu Initialisierungszwecken, ermöglicht wird.
Im online Betrieb kommunizieren die THINEDGE-Karten ausschießlich über den Video-BUS.
Ein integrierter 8 Bit DAC7
erlaubt den Anschluß eines Standart-Videomonitors
(CCIR oder EIA-Norm) an die THINEDGE-Karten.[9]
Zur Vektorisierung des kantenverstärkten Videosignals werden VECTOR-VME-BUS Karten der Firma ELTEC eingesetzt. Die Eingabeinformation der VECTOR-Karten ist die Konturinformation und die lokale Orientierung der Kontur-Pixel, wie sie die THINEDGE-Karten über den Video-BUS zur Verfügung stellen. Die VECTOR-Karten konvertieren konturbasierte Bilder in eine symbolische Repräsentation. Diese symbolische vektorielle Beschreibung gleicht der in CAD-Anwendungen und spart Speicher und Verarbeitungszeit. Die Konvertierung erfolgt durch Approximation der Konturen durch gerade Linienelemente, die als Vektoren bezeichnet werden. Diese Vektoren werden in einem Symbol-Buffer mit maximal 2KByte Einträgen gepeichert. Dieser Buffer ist über den VME-BUS erreichbar und so von einem beliebigen VME-BUS-Master für die weitere Bearbeitung lesbar.
Die gesamte Kantenextraktion und Vektorisierung läuft in Video-Echtzeit ab. Bei Verwendung von einem CCIR-Videosignal kommt es höchstens zu einer Verzögerungszeit von 0.9 ms. Diese Verzögerungszeit ist unabhängig von der Komplexität der beobachteten Szene.[10]
Das Bildverarbeitungssystem ist mit insgesamt vier Kontrollmonitoren ausgestattet, von denen jeweils zwei an die IC40-Framegrabberkarten und die THINEDGE-Karten angeschlossen sind.
Bei den an die IC40-Karten angeschlossenen Geräten handelt es sich um Workstationmonitore mit RGB8-Eingängen. Diese Monitore zeigen die digitalisierten Grauwertbilder an. Die Geräte an den THINEDGE-Karten stellen das kantenverstärkte Bildsignal dar.
Der Hostrechner für die Cross-Entwicklungsumgebung ist eine SUN-Ultra Workstation mit einem ULTRA-SPARC Prozessor9, 167 MHz Taktfrequenz und 256 MB Speicherausbau. Auf dieser Workstation läuft das Betriebssystem SUNOS 5.5.1 mit der grafischen Benutzeroberfläche X11R6.
Die eingesetzten Softwarekomponenten gliedern sich auf in Systemsoftware, d.h. Betriebssysteme, Treibersoftware und Entwickungssoftware (Editoren und Compiler). Hier sollen kurz die Eigenschaften des auf dem Bildverarbeitungssystem eingesetzen Echtzeit-Betriebssystem OS9 und die verwendeten Compiler erläutert werden. Eine fundierte Einführung in OS9 findet sich [12]. Auf den GNU-C-Crosscompiler für OS9 wird näher eingegangen, da dieser für das beschriebene Projekt von entscheidender Bedeutung ist. Zusätzlich eingesetzte Libraries für Bildverarbeitung und Fuzzy-Logik werden in den Kapiteln 5.3.1 und 7.2 beschrieben.
OS9 ist ein skalierbares Echtzeitbetriebssystem, welches multitasking- und multiuserfähig ist. Die Firma Microware entwickelte OS9 ursprünglich für den Motorola 6809 8-Bit-Prozessor in Maschinensprache und portierte es mit dem Aufkommen der moderneren 68000 16-Bit Prozessoren von Motorola auf diese Plattform. Diese Variante trägt die Bezeichnung OSK10und ist die heute am häufigsten eingesetzte. Microware entwickelte eine OS9-Variante, die zum großen Teil in C geschrieben ist, was relativ einfache Portierungen auf verschiedene Prozessorarchitekturen ermöglichte. So sind heute Portierungen beispielsweise für Intel X86 und Motorola Power-PC Architekturen verfügbar. OS9 ist stark modularisiert, was einerseits im Vollausbau ein UNIX-ähnliches, multiuserfähiges und mit grafischer Benutzeroberfläche ausgestattetes Host-Betriebssystem, andererseits ein massenspeicherloses kompaktes Betriebssystem für Embedded-Controller ermöglicht11. Auf dem VME-BUS basierten Bildverarbeitungssystem wird die OS9-Version 2.312 eingesetzt.
Die beiden lokalen 68040 CPU's auf den ELTEC-IC40 Framegrabberkarten werden ebenfalls unter OS9 betrieben. Diese CPU's verfügen über kein eigenes Massenspeicher-Filesystem, sondern verwalten ihren eigenen Hauptspeicher, können aber auch auf den VME-BUS zugreifen. Die Kontrollogik der IC40-Karten ermöglicht es der Haupt(Host)-CPU über ein Register sowohl den Videograbber zwischen einem sogenannten Live-Modus (kontinuierliche Akquisition) und dem Snapshot-Modus (einzelner Frame) umzuschalten, als auch Interrupts auf den IC40-CPU's zu generieren, um mit diesen zu kommunizieren13. Außerdem kann die Host-CPU die IC40-CPU's resetten, um dort einen definierten Betriebszustand herbeizuführen. Die IC40-Karten verfügen über Flash-Eprom14 in denen ein lokales Betriebssystem gepeichert werden kann. Alternativ kann auch ein Betriebssystem von der Host-CPU auf die IC40 heruntergeladen werden. Um eine größtmögliche Flexibilität zu gewährleisten, wurde die zweite Alternative gewählt. Das lokale OS9 wird dann direkt aus dem RAM der IC40 gestartet, und verfügt nur über die notwendigen Module zum Betrieb ohne Massenspeicher. OS9 durchsucht nach dem Start des Betriebssystems den verfügbaren Speicherbereich, unterscheidet diesen nach ROM und RAM und sucht nach gültigen Modulen, welche mittels eines speziellen Synchronisationswortes (4AFCh) von anderen Speicherbereichen zu unterscheiden sind. Der OS9 Memory-File-Manager (mfm) ermöglicht ein lokales Filesystem im RAM, vergleichbar mit einer RAM-Disk.
Das OS9-Betriebssystem der Host- und Slave-CPU's verfügt über einen Devicetreiber, der auf der Host-CPU ein Character-Device15 (zeichenorientiert) implementiert, über welches Standard-Ein- und Ausgabe der Slave-CPU's abgewickelt werden können. Der Befehl ``talk ic_1'' verbindet beispielsweise das aktuelle Terminal mit der Standard-Ein- und Ausgabe der ersten IC40-Karte über das Device ``ic_1'', dessen Devicetreiber im Modulverzeichnis liegt. Die Funktionalität von ``talk'' ist in etwa vergleichbar mit ``telnet'', welches eine Terminalemulation über ein Netzwerk bereitstellt. Weitere Befehle zur Steuerung der Slave-CPU's über die Host-CPU sind:
OS9-Befehl | Wirkung |
push {Datei}{Optionen} | Download der Datei {Datei} in das IC40 RAM-Filesystem |
go {Optionen} | Startet die entsprechende IC40 CPU |
initic40 {Device} | Initialisiert die entsprechende IC40 CPU |
imenu {Optionen} | Interaktives Programm zur Bildverarbeitung |
stop {Optionen} | Resettet die entsprechende IC40 CPU |
burn {Datei}{Optionen} | Programmiert das Flash EPROM der IC40 |
liveic40 {Optionen} | Schaltet die IC40 in den Live-Modus |
snapic40 {Optionen} | Instruiert die IC40 ein Bild zu grabben |
saveic40 {Datei} | Speichert ein gegrabbtes Bild in eine Datei ab |
loadic40 {Datei} | Lädt eine gespeicherte Datei in den Videospeicher der IC40 |
printic40 {Optionen} | Gibt Texte über den Videospeicher der IC40 aus |
talk {device} | Verbindet mit der Standart-Ein- und Ausgabe der IC40 |
Auf dem einzusetzenden VME-BUS-System läuft MICROWARE OS-9, erweitert um ein TCP/IP-Paket der Firma N.A.T., welches Telnet, FTP (File Transfer Protokoll) und NFS-Client- und Server-Funktionalitäten zur Verfügung stellt. Als grafische Benutzerumgebung dient eine eingeschränkte, an OS-9 angepaßte Version von X-Windows.
MICROWARE liefert mit OS9 den MICROWARE C-Compiler, einen Linker und Binder, ein Make-Utility und den Source-Level-Debugger aus. Der Standard-Editor des Systems ist eine OS9-Portierung des MICROEMACS.
Da der mitgelieferte C-Compiler nur den alten Kernigham Ritchie C-Standard und nicht den aktuellen ANSI-C Standard unterstützt, ist dieser Compiler für die Einbindung ANSI-C kompatibler Softwaremodule, wie beispielsweise das in Abschnitt 5.3.1 beschriebene Bildverarbeitungslibrary, ungeeignet.
Zusätzlich steht mit dem ANSI-C kompatiblen ULTRA-C noch ein zweiter C-Compiler von Microware zur Verfügung, allerdings ist die vorhandene frühe ULTRA-C-Version noch in einigen Komponenten fehlerbehaftet.
Auf dem OS-9-Rechner steht der Microware Source-Level-Debugger zur Verfügung, der nicht nur vom Microware-C-Compiler, sondern ebenfalls durch den GNU-C- und den im Abschnitt 2.2.6 beschriebenen Crosscompiler unterstützt wird. Remote-Debugging, z.B. ein Debugger-Aufruf über das Netzwerk, unterstützt der Microware Source-Level-Debugger leider nicht.
Aus diesem Grund stellte sich die Frage, ob nicht zusätzlich freie Software zur Entwicklung herangezogen werden sollte. Eine umfangreiche Recherche im Internet bzw. im Use-Net nach freier Software für OS9[4] führte zu den OS9-Portierungen der GNU16-Utilities.
Der GNU-C/C++-Compiler "gcc" ist wohl das bekannteste GNU-Produkt und stellt einen sehr portablen, leistungsfähigen und ausgezeichnet dokumentierten Compiler zur Verfügung. Die Portierung der Version 2.6 des GNU-Compilers auf OS9 von Stefan Paschernag[5] ist der leistungsfähigste, momentan verfügbare C-Compiler für OS9.
Umfangreichere Software-Projekte mit mehreren tausend Zeilen Quellcode sind in ihrer Entwicklungsgeschwindigkeit stark abhängig von der Dauer der Entwicklungszyklen, d.h. der Zeit, welche zwischen einer Änderung des Quellcodes und der Möglichkeit des Tests einer solchen Modifikation mit dem erfolgreich compiliertem Programm vergeht. Solche ``Turn-Around''-Zeiten sind im Interesse einer zügigen Softwareentwicklung möglichst zu minimieren. Das eingesetzte Microware VME-BUS-Entwicklungssystem ermöglicht keine drastische Verkürzung der Entwicklungszyklen mehr, weil nur noch ein schnellerer Prozessor,18 der auf den Microware-Boards eingesetzten Motorola-CPU-Familie zur Verfügung steht. Motorola entwickelt zukünftig nur noch die neue Power-PC basierte CPU-Familie weiter. Ein weiterer gangbarer Weg zur Verkürzung der Entwicklungszyklen ist der Einsatz eines Crosscompilers.
Ein Crosscompiler ist ein Compiler, der Quellcode einer Programmiersprache auf
einer Rechnerarchitektur übersetzen kann die nicht die Zielarchitektur ist.
Das auf dem Host-Rechner compilierte Programm ist nur auf dem Zielrechner (Target)
ausführbar, der über eine andere Prozessorarchitektur und/oder über ein anderes
Betriebsystem verfügen kann.
Unter Anderem ergeben sich folgende Vorteile beim Einsatz eines Crosscompilers:
All diese Vorteile, insbesondere der um Faktoren schnellere Entwicklungszyklus, bedingt durch kürzere ``Turn-Around''-Zeiten bei der Compilierung lassen die Verwendung eines Crosscompilers geeignet erscheinen.
Es existieren verschiedene kommerzielle Crosscompiler für OS9, unter anderem von Microware selbst und der Firma Metrowerks, die eine Entwicklungsumgebung für verschiedene Zielsysteme anbietet, zu denen auch OS9 zählt. Diese beiden Lösungen sind sehr teuer und jeweils an festgelegte Host-Plattformen gebunden.19
Zwei freie Alternativen zu diesen kommerziellen Crosscompilern sind der OS9exec, der leider nur für Apple-Macintosh Host-Systeme verfügbar ist, und der schon erwähnte GNU-C-Compiler der auch als Crosscompiler eingesetzt werden kann. Die schon erwähnte Qualität und Verfügbarkeit für verschiedene Plattformen des GNU-C-Compilers sind die entscheidenden Kriterien zur Auswahl dieses Crosscompilers für dieses Projekt.
Unglücklicherweise läßt sich kein nativer GNU-C-Compiler aus den offiziellen Sourcen für OS9 bauen. Die von Stephan Pascherdag vorgenommene Portierung fand keinen Einzug in die aktuellen Quellen des gcc. Ebenso ist die einzige verfügbare Version des xgcc für OS9 ein ``Hack-Projekt'', welches leider keine Änderungen in den offiziellen gcc-Quellen hervorgerufen hat, weil es niemals komplett beendet wurde.
Die Portierung von Walter Hunt[1] der Version 2.6.2 des GNU-Compilers enthält Debug-Unterstützung für den MICROWARE Source-Level-Debugger, welche dem nativen GNU-C-Compiler für OS9 von Stephan Paschedag (Portierung des gcc 2.5.8) entnommen worden ist, allerdings werden OS9 spezifische Compilerswitches20 des nativen gcc 2.5.8 nicht unterstützt. Die Portierung ist zu ca. 90% abgeschlossen21, die Floating-Point-Unterstützung funktioniert in der von Walter Hunt zur Verfügung gestellten Version noch nicht zuverlässig. Erst im Laufe des in dieser Arbeit beschriebenen Projektes veröffentlichte Carl Kreider[2] nach einer Diskussion dieses Themas im USENET22 Patches23, die einen erfolgreichen Einsatz des Crosscompilers zuließen.
Der GNU-C-Compiler läßt sich schon in seiner Standarddistribution als Crosscompiler konfigurieren. Allerdings müssen für den Einsatz des gcc als Crosscompiler alle Headerfiles und binären Libraries auf das Hostsystem kopiert werden. Nach der Extraktion der gcc-Quellen, die inklusive der benötigten Quellen für die Binutilities25 ca. 50 MB Festplattenplatz benötigen26, müssen zunächst die Binutilities für den Einsatz eines Crosscompilers konfiguriert werden27.
Der Konfigurationsname und das Zielverzeichnis muß für alle Komponenten des
Crosscompilers festgelegt werden. Der Konfigurationsname ist nötig um das Binary
des Crosscompilers vom Binary des eventuell vorhandenen nativen GNU-C-Compilers
auf dem Hostsystem zu unterscheiden. Die Konfigurationsnamen folgen dem Schema
``CPU-Hersteller-Betriebssystem'', beispielsweise ``rs600-ibm-aix''
und im hier beschriebenen Fall
``m68k-unknown-osk'', was für den Hersteller ``unknown''
mit ``m68k-osk'' abgekürzt werden kann. Die so konfigurierten Binaries
heißen dann beispielsweise ``gcc-m68k-osk'', ``ld-m68k-os9''
usw.
Der GNU-Crosscompiler benötigt auf dem Host-System die Header-Dateien und Libraries
des Zielsystems. Um die Dateien von den nativen Versionen des Host-Systems zu
unterscheiden, werden sie in die Verzeichnisse
<prefix>/<target>/include/ und <prefix>/<target>/lib/ kopiert,
wobei <prefix> ein Verzeichnis ist, in das die Crosscompiler-Umgebung
installiert werden soll. Die Voreinstellung für <prefix> ist /usr/local.
Die Einstellung für <target> korrespondiert mit dem beschriebenen Konfigurationsnamen.
Somit ergibt sich zum Beispiel folgender Pfad für die original OS9-Headerfiles
auf der Host-Entwicklungsmaschine:
/DISK/E/bischoff/os9/usr/local/m68k-os9/include/,
mit <prefix> = /DISK/E/bischoff/os9/usr/local und
<target> = /m68k-os9.
Die originale OS9-Libraries müssen per FTP28 im binär Modus, die Headerfiles im Text-Modus auf die Host-Maschine übertragen werden, weil das Text-Format von OS9 sich von dem unter UNIX unterscheidet. (Siehe Abschnitt 3)
Für die Unterstützung von Fließkommaarithmetik benötigt der gcc eine Header-Datei
float.h im Verzeichnis
<prefix>/lib/gcc-lib/<target>/<version>/include. Diese während der
Übersetzung vom Makefile mittels Testprogramm erzeugte Header-Datei beschreibt
die Fließkommaeigenschaften des Systems. Allerdings funktionieren diese Testprogramme
nur beim Bau eines nativen GNU-C-Compilers, weil in diesem Fall Host- und Zielmaschine
identisch sind. Beim Build eines Crosscompilers wird durch das Makefile die
Warnung ausgegeben, daß es nicht möglich ist auf dem Zielsystem Testprogramme
auszuführen. Der Benutzer muß eine geeignete float.h für das Zielsystem zur
Verfügung stellen.
Im günstigsten Fall stellt das Zielsystem schon eine float.h eines gcc bereit, ansonsten muß das Programm enquite.c aus den gcc-Quellen auf dem Zielsystem ohne Optimierungen übersetzt werden. Wenn auch diese Möglichkeit nicht besteht ist eine float.h eines möglichst ähnlichen Betriebssystems, welches auf der Zielprozessorplattform läuft, auszuwählen. Im vorliegenden Fall wurden die unter OS9 vorliegende float.h verwendet, da enquire.c sich nicht ohne weiteres auf OS9 kompilieren läßt.
Das libgcc1.a-Library enthält mathematische Funktionen, die der GNU-C-Compiler selbst während des Builds benötigt. Beim Bau eines nativen Compilers wird dieses Library von dem Compiler erzeugt, der zum compilieren des GCC eingesetzt wird. Dieser Compiler hat natürlich Kenntnis über die Fließkommafunktionalität des Systems (hier ist wieder das Hostsystem identisch mit dem Zielsystem), während beim Bau eines Crosscompilers diese Informationen fehlen.
Auch hier muß der Benutzer für eine passende libgcc1.a sorgen. Je nach Target-Maschine ergeben sich mehrere Optionen:
Folgende Kommandos müssen ausgeführt werden um den Bau des Crosscompilers zu starten:
Nach erfolgreichem Build des xgcc wurde zum Laufzeitvergleich ein etwa 3500 Quelltextzeilen großes Projekt jeweils mit dem nativen gcc des OS9-Systems und dem erzeugten Crosscompiler auf dem Host-System übersetzt. Gemessen wurde die Übersetzungzeit inklusive Assembler und Linkeraufruf.
Maschine | Laufzeit |
Microsys 68040 | 2 Min. 30 Sec. |
SUN SPARC-ULTRA | 3.5 Sec. |
Es zeigt sich ein deutlicher Performancevorteil des xgcc von über zwei Zehnerpotenzen gegenüber dem nativen gcc unter OS9. Selbst wenn die nötige Übertragungszeit per FTP auf die Zielmaschine von ca. 5 Sekunden berücksichtigt wird, lohnt sich der Einsatz des xgcc enorm.
Auf dem Host-Rechner steht eine vollständige UNIX-Entwicklungsumgebung mit grafischer Benutzeroberfläche X-Windows zur Verfügung. Da für diese Architektur eine große Anzahl freier Editoren zur Verfügung steht, kann mit XEMACS ein mächtiger Editor mit umfangreichen Funktionen ausgewählt werden.
Der XEMACS-Version 19.2[3] läßt sich hervorragend als integrierte Entwicklungsumgebung einsetzen, weil es unter anderem RCS-Versionkontrolle, Syntax-Highlighting und Compileraufruf auf den Benutzermenüs erlaubt. Compilermeldungen werden in einem separaten Fenster angezeigt, von angezeigten Fehlermeldungen wird direkt in die betreffenden Stellen im Quellcode verwiesen. Gemeinsam mit dem Crosscompiler ergibt sich mit der XEMACS ein großer Produktivitätsvorteil gegenüber der spartanischen Entwicklungsumgebung auf dem OS9-System.
Auf das verwendete Kommunikationsprotokoll zwischen dem Bildverarbeitungsrechner und der Industrierobotersteuerung soll hier nur kurz eingegangen werden, da dieses Protokoll in [11] und [34] bereits ausgiebig erläutert wurde.
Die MARK3-Robotersteuerung ist mit einer seriellen RS422 Schnittstelle ausgestattet, die über einen RS422 nach RS232 Schnittstellenwandler mit dem Bildverarbeitungsrechner verbunden ist. Die auf der Robotersteuerung ablaufende Roboterprogrammiersprache VAL-II erlaubt über die sogenannte ALTER-Schnittstelle einen Modus, in dem die programmierte Bahn durch extern überlagerte Daten verändert wird. Diese Software-Schnittstelle wird verwendet um der Robotersteuerung Bewegungssteuerungs-Befehle zu übermitteln und die aktuelle Position des Roboters aus der Steuerung auszulesen. Die Kommunikation wird jeweils von der Robotersteuerung initiiert, während der Bildverarbeitungsrechner in einer definierten Zeitspanne auf die Datenpakete der Steuerung reagieren muß. Im laufenden Betrieb muß der Bildverarbeitungsrechner alle 28 ms einen Kommunikationszyklus durchführen wobei eine Reaktionszeit von maximal 15-17 ms (abhängig vom gewählten ALTER-Kommunikationsmodus, siehe [11]) auf eine Kommunikationsanforderung eingehalten werden muß.
Diese Randbedingungen machen den Einsatz eines echtzeitfähigen Betriebssystem erforderlich. Zusätzlich zu diesen Kommunikationsaufgaben muß die MICROSYS-CPU-Karte noch die Kommunikation mit den Bildverarbeitungskarten und die eigentliche softwareunterstützte 3D-Bildverarbeitung durchführen.
Um diese Funktionalitäten in Echtzeit zu gewährleisten wurden zwei Programmodule realisiert, die mit unterschiedlichen Prioritäten ihre Aufgaben wahrnehmen und sich per Interprozeßkommunikation miteinander koordinieren. Diese Interprozeßkommunikation ist über ein OS9-Datenmodul realisiert, ein Datenbereich auf den mehrere Prozesse zugreifen dürfen und der deshalb durch geeignete Synchronisationsmechanismen wie Semaphoren geschützt wird. Solche Synchronisationsmechanismen des Echtzeitbetriebssystems OS9 werden extensiv in [13] und [12] erläutert.
Der für die Kommunikation mit der Robotersteuerung vorgesehene Prozeß muß harten
Echtzeitanforderungen genügen und läuft daher mit der höchsten Priorität. Er
enthält aus Geschwindigkeitsgründen den im Abschnitt 3.1
beschriebenen Bahninterpolator und ist bis auf diesen im wesentlichen mit dem
in [11] beschriebenen Kommunikationsprozeß identisch. Dieser Prozeß
,,schläft'' allerdings in den Zeiten in der die Robotersteuerung ein Daten-Paket
verarbeitet und ein neues generiert. So bleibt ausreichend Rechenzeit für den
eigentlichen Bildverarbeitungsprozeß übrig, der die in Abschnitt 5
erläuterte Stereobildverarbeitung, die Kommunikation mit den Bildverarbeitungskarten
(siehe Abschnitt 4.10), die
Fuzzy-Kollisionsvermeidungsalgorithmen (Abschnitt 7.3)
und das Benutzerinterface
(Abschnitt 8) beinhaltet.
Kollisionsvermeidungsalgorithmen (siehe Abschnitt6) benötigen für die Generierung eines günstigen Ausweichkurses um ein Hindernis Kenntnis des Ziels der aktuellen Bewegung. Da die ALTER-Software-Schnittstelle der Roboterprogrammiersprache VAL2 nur die Ausgabe der aktuellen Position des Roboters, nicht aber der Zielkoordinaten des aktuellen Bewegungssatzes ermöglicht, muß der externe Steuerungsrechner, also das Bildverarbeitungssystem, über die ALTER-Schnittstelle nicht nur die Ausweichbewegungen bei einer drohenden Kollision, sondern auch die ,,normale'' Bewegungsteuerung durchführen.
Zu diesem Zweck wurde eine einfache Bahninterpolation implementiert, die im Zusammenspiel mit der Möglichkeit Kurse zu teachen30 und zu laden, eine simple Möglichkeit der Roboterprogrammierung ergibt.
Während jeder sehende Mensch eine genaue Vorstellung davon hat was ein Bild ist, werden die notwendigen Schritte für eine maschinelle Bildverarbeitung31 erst ersichtlich wenn man den biologischen Vorgang des Sehens mit den für die gleiche Funktionalität notwendigen künstlichen Verfahren vergleicht. Diffuses und gerichtetes Umgebungslicht wird von Objekten reflektiert, und wird in der Linse des Auges gebündelt und auf die Netzhaut projiziert. Die Muskulatur der Linse des Auges sorgt dafür, daß die Brennweite so einstellt wird das ein scharfes Bild auf der Netzhaut entsteht. Die Iris regelt die einfallende Lichtmenge, ähnlich wie eine Blende, um eine Anpassung an die Umgebungslichtstärke zu ermöglichen.
Zusätzlich können die Augen durch die Augenmuskulatur bewegt werden um verschiedene Objekte zu fixieren. Die Netzhaut besteht aus Nervenzellen, welche schon eine gewisse Vorverarbeitung der Bildinformation leisten und verschieden starke elektrische Signale an das Gehirn weitergeben. Eine umfassende Beschreibung der Vorgänge im menschlichen Auge findet sich in [27].
Im Gehirn werden die übermittelten Signale verarbeitet und die notwendigen Muskelbewegungen für die Iris, die Linsenverstellung und die Augenbewegungen koordiniert. Verschiedene Objekte werden im Gehirn aufgrund ihrer Helligkeitunterschiede und Farben unterschieden, ihre Ausdehnung wird ermittelt und die Bildinformation der beiden Augen wird miteinander verglichen um Korrespondenzen, also sich gleichende Punkte, in den Bildern einander zuzuordnen. Das Gehirn extrahiert aus den beiden Bildern räumliche Informationen.So wird eine Repräsentation der Umwelt, ein Modell und eine Interpretation der umgebenden Objekte erzeugt. Die vom Gehirn verarbeiteten Bilder sind Einzelbilder eines optischen Flusses, in denen eine Beziehung der Einzelbilder zu ihrer zeitlichen Abfolge vorgenommen werden. So können Bewegungen wahrgenommen werden, das heißt Objekte in Bildfolgen identifiziert werden. Diese Bearbeitungschritte führen zu einer massiven Datenreduktion. Die Anfangs große ungeordnete und rohe Bildinformation wird im Zuge der Bearbeitung auf wesentliche Informationen reduziert.
All diese Vorgänge laufen unbewußt ab, so daß einem sehenden Menschen diese Bildverarbeitung völlig trivial erscheint. In Wirklichkeit laufen verschiedene Prozesse der Informationsverarbeitung in verschiedenen Abstraktionsstufen ab. Die Disziplin der Bildverarbeitung versucht diese Fähigkeiten des Menschen und der Tiere künstlich nachzubilden. Einige dieser Mechanismen erfordern ein Bildverstehen, also Intelligenz, weshalb sich auch der Forschungszweig KI (Künstliche Intelligenz) mit Bildverarbeitung beschäftigt.
Praktische Anwendungsbereiche für Bildverarbeitungstechnologien lassen sich in allen Bereichen der Forschung, zum Beispiel für die automatische Auswertung von Bildern, der Medizin und in der Industrie finden. Für den Bereich der automatischen Auswertung von Bildern lassen sich beispielsweise die Farbbildauswertung, die automatische Entzerrung von Bildern, die Bildverbesserung und Rekonstruktion und die Verarbeitung nicht sichtbarer Spektralbereiche nennen. Durch hohe Verarbeitungskapazitäten wird auch eine Analyse von Bildfolgen möglich. Im Bereich der Medizin sind vor allen Dingen die Visualisierungstechniken der Comutertomographie zu nennen, die im Bereich der Diagnostik zu revolutionären Verbesserungen geführt haben. Auf die Anwendungsbereiche der industriellen Bildverarbeitung in der Automatisierungstechnik wird hier umfassender eingegangen.
Die moderne Fertigunstechnologie entwickelt sich in Richtung Humanisierung der Arbeitswelt und Erhöhung der Produktqualität. Dieses führt zu einer Verbesserung der Nutzung vorhandener Produktionseinrichtungen und dadurch zur Steigerung des Automatisationsgrades.
In der industriellen Bildverarbeitung werden Bildsensortechniken für die Sichtprüfung, die Handhabung von Werkstücken, die Steuerung und Regelung von Maschinen und Prozessen und zur Überwachung von Maschinen und Arbeitsräumen eingesetzt. Funktionen von Bildsensoren sind in diesem Bereich die Prüfung auf Vollständigkeit, die Vermessung von Position und Ausmaßen, die Bestimmung von Formen und die Bestimmung von Oberflächeneigenschaften von Werkstücken [6]. Beispiele dieser Bereiche sind die Oberflächenprüfung verschiedener Materialien, wie Metallen, Kunststoffen, Lackflächen usw. auf Rauhigkeit, Textur und Verschmutzung. Ebenso gehört das Zählen von Objekten und das Vermessen von Abständen und Durchmessern für die Verpackungs- und Bestückungskontrolle, der Kontrolle von analogen und digitalen Anzeigeinstrumenten und die Materialprüfung zur Lokalisierung von Rissen und Lunkern, zu den Anwendungsbeispielen dieser Verfahren. [27]
Zum Bereich der Überwachung von Arbeitsräumen gehört die Kollisionsvermeidung von Industrierobotern der im Abschnitt 6genauer erläutert wird. Die Entwicklung von sehenden Industrierobotern ist nicht nur für Zwecke der Kollisionvermeidung interessant, sondern auch für flexible Handhabungsfähigkeiten, wie das Nachführen von Werkzeugen, Schweißelektroden, Schraubern und Bohrern. Die Bildverarbeitung wird hier eingesetzt, zur Lagebestimmung, Identifizierung und Sortierung von Objekten mit Hilfe durch diese Informationen gesteuerte Roboter.
Ziel dieser Verfahren ist unter anderem die Funktionalität "Griff in die Kiste" zu erreichen, die automatische Entnahme des jeweils obersten Objekts aus einem Behälter, wobei die Objekte verschiedenartig sein dürfen und ungeordnet übereinanderliegen dürfen. Die Lösung dieses Problems erfordert räumliches Sehen mit Erkennung von Verdeckungen und Schattenwürfen.
Im folgenden wird die Funktionalität der Bildverarbeitungskomponenten erläutert.
Die erste Stufe der Bildverarbeitung stellen die CCD-Kameras dar. Der beleuchtete Arbeitsraum wird über ein Objektiv auf den CCD-Sensor der Kamera abgebildet. Die Weiterverarbeitung erfolgt in den Schritten, Digitalisierung32, Kantenextraktion, Vektorisierung und softwaremäßiger 2-D- und 3-D-Bildverarbeitung.
Für Bildverarbeitungszwecke spielt die Auswahl einer geeigneten konstanten Beleuchtung eine entscheidende Rolle. Anders als das menschliche Auge ist die Lichtempfindlichkeitscharakteristik von CCD-Sensoren nicht logarithmisch sondern proportional der Helligkeit. Während menschliche Augen aus diesem Grund auch bei schlechten Beleuchtungsverhältnissen in der Lage sind Kontrastunterschiede wahrzunehmen, sind CCD-Sensoren auf konstante und gute Ausleuchtung angewiesen. Schattenkonturen können ebenso wie Reflexkonturen nach dem Einsatz von Kantenverstärkungsverfahren nicht mehr von den eigentlichen Konturen der zu vermessenden Objekte unterschieden werden, deshalb ist einen intensive, konstante und indirekte, also diffuse Beleuchtung vorzuziehen.
Andere Anwendungen als die hier beschriebene setzen völlig andere Beleuchtungsverfahren voraus. Zum Beispiel erfordert das sogenannte Lichtschnittverfahren33ein schmales Lichtband, daß z.B. mit einem durch einen ausgeweiteten Laserstrahl erzeugt werden kann.
Die Brennweite als das entscheidende Kriterium für die Auswahl von Kameraobjektiven ist abhängig von den Gegebenheiten des zu überwachenden Arbeitsvolumens. Soll der Arbeitsraum vollständig erfaßt werden und ist der mögliche Beobachtungsabstand (die Bildweite), wie im beschriebenen Fall bei Anordnung der Kameras oberhalb des Arbeitsvolumens, durch die Raumhöhe beschränkt, müssen Weitwinkelobjektive mit kleinen Brennweiten eingesetzt werden. Kleine Brennweiten führen allerdings zu großen radialen Linsenverzeichnungen wie in Abbildung 5.2, die durch geeignete Verfahren bei der Kamerakalibrierung (siehe Abschnitt 5.2.6) ausgeglichen werden müssen.
Die eingesetzen Kameras (vgl. Abbschnitt 2.1.7) verfügen in Kombination mit den verwendeten Objektiven über eine automatische Blendenregelung, die zusätzlich zu den Maßnahmen zur konstanten Beleuchtung für einheitliche Lichtstärken auf den nachfolgend beschriebenen CCD-Sensoren sorgt.
CCD-Sensoren sind ladungsgekoppelte Speicher (Charge-Coupled Device), welche aus einem dünnen, dotierten Silizium-Kristall bestehen, einfallendes Licht adsorbieren und aufgrund des Photoeffektes in elektrische Spannungen umwandeln. Die Bildinformation wird durch diesen in eine Matrix von analogen Spannungen umgewandelt, welche den jeweiligen Lichtintensitäten proportional sind. Die als Ladungsmuster gespeicherte Information wird nun zeilenweise ausgelesen und in ein elektrisches Videosignal umgewandelt. Das Videosignal entspricht der in Europa üblichen CCIR-Norm mit 625 Bildzeilen und 50 Bildern pro Sekunde, wobei ein Frame (Einzelbild) aus zwei jeweils aus um eine Zeile versetzte Halbbilder besteht, welche nacheinander übertragen werden.
Eine Alternative zu CCD-Sensoren sind Röhren-Video-Kameras, die aber heutzutage nur noch selten eingesetzt werden. Im Gegensatz zu Röhrenkameras haben CCD-Kameras folgende Vorteile:
Der in den verwendeten Kameras eingesetzte CCD-Sensor ist für den Schwarz-Weiß-Betrieb ausgelegt, d.h. er enthält nur eine CCD-Matrix für alle auftreffenden Lichtfarben. Farb-CCD-Sensoren bestehen im Prinzip aus drei Sensoren für jeden Bildpunkt, die mit Rot-, Grün- und Blaufiltern Versehen sind um so selektiv die Farbkomponenten des auftreffenden Lichts zu erfassen.
Wesentlicher Bestandteil eines Bildverarbeitungssystems ist der sogenannte Framegrabber. Die Aufgabe des Framegrabbers ist es, das Videosignal zu digitalisieren, also in ein den Grauwerten34 bzw. der Bildhelligkeit entsprechendes Bitmuster umzusetzen. In Framegrabbern wird das Videosignal, beispielsweise einer Kamera, zunächst gefiltert und verstärkt und einem ADC 35 zugeführt. Meist wird für Grauwerte eine Auflösung von 8 Bit gewählt, was eine Differenzierung in 256 unterschiedliche Werte erlaubt. Eine Synchronisationsschaltung filtert die horizontalen und vertikalen Synchronsignale aus dem Video-Signal, und verwendet diese zur Steuerung des Framegrabbers. Das horizontale Synchronsignal HSYNC zeigt einen Zeilensprung, das vertikale VSYNC ein Halbbild36- oder Vollbildwechsel an. Der Framegrabber verwendet diesen zeitlichen Rahmen um die digitalisierte Bildinformation synchron in seinen Videospeicher zu schreiben.
Die sogenannte Abtastrate bestimmt wieviele Pixel pro Bildzeile abgetastet werden.
Die eingesetzten IC40-Framegrabberkarten unterstützen die Abtastfrequenzen 14,3
und 12,5 MHz, so daß für die Video-Normen CCIR-625 und EIA-525 quadratische
Pixel erzeugt werden können. Solche quadratischen Pixel haben in der Bildverarbeitung
den Vorteil, daß sich solche Bildinformationen für geometrische Berechnungen,
beispielsweise von Objektumfängen oder Winkeln, besser eignen (Rechenzeitersparnis).[27]
Beispielhafte Berechnung der Pixelgeometrie für die CCIR-Norm:
CCIR-Norm:
|
Bei einem Pixeltakt von: P = 14,3×106Pixel/s
|
Bei einem Seitenverhältnis von 2/3 normierter Bildschirme und
CCD-Sensoren sollte das Verhältnis von horizontalen zu vertikalen Pixeln
ebenfalls
= [625/ 915,2] = 0,683 @ 2/3 sein Þ
Quadratische Pixel!
Die ,,Look Up Table'' LUT der IC40-Bildverarbeitungskarten stellt eine Transformationstabelle dar mit der eine schnelle Bildverarbeitung in Echtzeit möglich ist. Eine LUT ist im Prinzip ein sehr schneller Speicher mit 8 Adressleitungen und 8 Datenleitungen, also 256 Byte Speicher. Jedem 8-Bit Eingangswert kann also ein vorher definierter Ausgangswert zugewiesen werden. So können mit dieser Eingangs-LUT beliebige einstellige Operationen37 oder Punkteoperationen auf das digitalisierte Grauwertbild, wie z.B. Gamma-Korrekturen oder Schwellwertoperationen, angewendet werden. Im übrigen verfügen die IC-40-Karten ebenfalls über eine Ausgangs-LUT durch die der Videoausgang der Karten in der Lage ist ein farbiges Videosignal zu generieren. Hier repräsentiert die LUT die Farbtabelle des Systems, d.h. bis zu 256 Farben können gleichzeitig dargestellt werden. Jedem 8-Bit-Wert des Videospeichers wir eine von 256 Farben zugeordnet.
Die nachfolgende Stufe des beschriebenen Bildverarbeitungssystems ist die Kantenextraktion. Hier soll zunächst auf allgemeine Verfahren eingegangen werden, die sich mit Hilfe von Filteroperationen im Ortsbereich ausführen lassen. Man unterscheidet diese Filterverfahren in lineare- und nichtlineare Filter. Lineare Filter auch als nichtrekursive Filter, und in angelsächsischem Sprachraum als ,,finite impulse response'' FIR bezeichnet, haben den Vorteil, daß aufgrund des Überlagerungsprinzips, ihre Antwort auf beliebige Signale bestimmt werden kann, wenn die Antwort des Operators auf einen idealen Impuls (Impulsantwort) bekannt ist. Sie können aus diesem Grund einfach in schnellen Hardware-Bausteinen mit LUT's realisiert werden. Durch lineare Filter können aber im wesentlichen nur Tiefpaß-, Hochpaß- und Bandpaßfilter realisiert werden, während mächtigere Operatoren, wie beispielsweise der im folgenden erläuterte Sobel-Operator rekursiver, nichtlinearer Natur sind.
Lineare Filter unterscheidet man wiederum in eindimensionale- und zweidimensionale lineare Filter. Ihre Funktionsweise läßt sich mit folgender Handlungsanweisung erläutern. Die Grauwerte der umgebender Pixel und eines betrachteten Pixels werden mit Gewichtungskoeffizienten multipliziert, aufsummiert und ergeben so den neuen Grauwert des betrachteten Pixels. Wenn die umgebenden Pixel in einer Linie liegen, beizeichnet man diese linearen Filter als eindimensional, wenn die Filteroperation auf eine meist quadratische zweidimensionale Umgebung eines Pixels angewandt wird, als zweidimensional. Die Summation erfolgt in diesem Fall über zwei Indizes:
| (4.1) |
Der Grauwert fjk des Bildpunktes an der Stelle (j,k) wird unter Verwendung der Matrix der Gewichtskoeffizienten hmnin in den Grauwert gjk überführt. Die Anzahl der berücksichtigten Nachbarpunkte wird durch die Indizes p und q festgelegt. Häufig werden 3x3 Matrizen verwendet, in diesem Fall ist p = q = 1 .[27]
Beispiel für o.g. linearen Filter ist der Gauß'sche Tiefpaß:
| (4.2) |
| (4.3) |
Die Division durch 16 ist notwendig, weil die Matrix 4.2 nicht normiert ist. Die Summe der Koeffizienten der Matrix muß den Wert 1 haben, um eine generelle Aufhellung bzw. Abdunkelung aller Pixel des Bildes zu verhindern. Ein solcher Tiefpaßfilter führt zu einer Entfernung von hochfrequenten Störungen, aber auch zu einer ,,Weichzeichnung'', d.h. einer Abschwächung hochfrequenter Kanten.
Lineare Filter die Hochpaßeigenschaften besitzen und daher gut für eine Kantenhervorhebung geeignet sind, haben folgende Struktur:
| (4.4) |
| (4.5) |
Durch die Wahl der Koeffizienten hmn werden Vorzugsrichtungen festgelegt. Mathematisch entsprechen diese Hochpaßfilter einer numerischen Ableitung in der diskreten Ebene und werden daher als Gradienten bezeichnet. Der Filter 4.4 wird seiner Vorzugsrichtung nach als Nordgradient, der Filter 4.5 als Südgradient bezeichnet. Die durch die negativen Koeffizienten der Matrix auftretenden negativen Grauwerte können durch eine Verschiebung des Nullpunktes auf 127 und eine Begrenzung der Extremwerte auf 0 und 255 verhindert werden.
*0.45! | *0.45! |
Ein linearer Filter ohne Vorzugsrichtung ist der Laplace-Filter. Er ist für kontinuierliche Funktionen definiert durch:
| (4.6) |
Ein entsprechender Laplace-Filter in der diskreten Ebene hat dann folgende Struktur:
|
Noch besser geeignet für Kantenextraktionsverfahren sind nichtlineare Filter, wie zum Beispiel die Roberts-, Kirsch-, und Sobel-Operatoren. Der Sobel-Operator soll hier beispielhaft erläutert werden. Er ist als Absolutbetrag des Gradientenvektors, der sich aus den Ableitungen in X- und Y-Richtung ergibt, definiert. Durch übertragungen in die diskrete Ebene ergibt sich:
| (4.7) |
oder näherungsweise
| (4.8) |
mit
| (4.9) |
Mit diesem Verfahren kann eine Kantenverstärkung weitgehend unabhängig von Beleuchtungsinhomogenitäten durchgeführt werden.
Die Realisierung der Kantenverstärkung erfolgt auf den THINEDGE-Karten hardwaremäßig in vier Schritten:
Die Punkte 1 bis 3 der beschriebenen Funktionalität können durch lineare Filteroperationen realisiert werden. Die richtungskontrollierte Ausdünnung der Konturen erfordert allerdings nichtlineare und irreversible Verfahren. Diese Verfahren werden als Skelettierung oder Verdünnung bezeichnet und können vollständig unter Verwendung von look-up-tables in Hardware realisiert werden. Ein genaue Beschreibung dieser Verdünnungsalgorithmen findet sich in [27]. Eine Ausdünnung der Kantenkonturen erleichtert die Vektorisierung von Linienelementen, wie sie im folgenden Abschnitt 4.8 erläutert wird. Details zur Hardware-Realisierung finden sich in [10].
Um für die Weiterverarbeitung eine numerisch vorliegende Kontur zu gewinnen, können aus den ausgedünnten Pixelbildern sogenannte Konturketten gebildet werden. Diese Pixelkonturen werden zur Speicherplatzersparnis in einem sogenannten Kettencode abgelegt, d.h. nur die Koordinaten des Anfangs- und Endpunktes werden gespeichert. Für die Zwischenpixel wird jeweils ein Wert für die Richtung relativ zum letzten Pixel gespeichert.
Eine wesentlich elegantere, aber aufwendigere Methode ist die Vektorisierung der Konturen, bei der die Konturen durch gerade Linien angenähert werden. Vorteil einer Darstellung im Vektorformat ist beispielsweise die einfache Weiterverarbeitung und die Unempfindlichkeit vektorieller Daten gegenüber einer Skalierung.
Der Vektorprozessor approximiert jede Kontur mit als Vektoren bezeichneten geraden Linien. Wenn die Differenz der lokalen Orientierung zwischen angrenzenden Pixeln kleiner ist, als ein spezifizierter Winkel, wird die Gruppe von Pixeln in einen Vektor konvertiert. Der spezifizierte Winkel, welcher im Bereich von 1,4 bis 21 Grad variiert werden kann, wird in einem programmierbaren Register gespeichert. Ein zusätzlicher spezieller ,,thinmode'' teilt Linien in Vektoren von 1 bis 1,4 Pixeln Länge, um eine höchstmögliche Genauigkeit zu erreichen. Die Approximationsparameter kontrollieren den Datenreduktionsfaktor, der abhängig von der beobachteten Szene zwischen 50 und 5000 liegen kann, und sollten daher dem Problem angemessen angepaßt werden.
Die Vektorisierungs-Hardware arbeitet in zwei Stufen. Die erste Stufe führt die Hauptaufgaben, wie die Konturdetektion, das Markieren von Konturpunkten und den Winkelvergleich durch. Ein Zähler generiert die Konturnummern mit einer Kapazität von bis zu 64K Kontur-Elementen für einen Frame. Die Konturpunkte werden durch eine 2-D-Maske klassifiziert, welche die aktuell bearbeiteten Pixel und ihre jeweiligen Nachbarn enthält. Die Erkennung der Nachbarschaft arbeitet im Uhrzeigersinn. Ein programmierbarer Komparator vergleicht die lokale Kantenorientierung mit der Orientierung des momentan bearbeiteten Vektors, so daß der Vektorisierer lokale und globale Orientierungen zur Vektorisierung eines Bildes verwendet.
Die zweite Stufe detektiert Beziehungen zwischen Nachbarkonturen und generiert Verbindungsinformationen zwischen zwei verbundenen Einzelkonturen. Um die Synchronität dieser Verarbeitungsstufen zu wahren, arbeiten die VECTOR-Karten mit mehreren FIFO38-Linebuffern. Die Größe dieser Linebuffer begrenzt die Anzahl der verarbeitbaren Pixel pro Zeile. Die Standardausführung der VECTOR-Bildverarbeitungskarten ist mit 1kByte großen FIFO's ausgestattet, es ist allerdings leicht möglich diese FIFO's gegen größere, bis maximal 16kByte Größe auszutauschen. Der gesamte Vektorprozessor ist mittels programmierbarer Gate-Arrays (LCA's) realisiert worden. Die Operationsprogramme der LCA's sind in zwei SPROM-Bausteinen abgespeichert und werden nach dem Einschalten oder nach einem System-Reset automatisch eingelesen.
Ausgabestufe des Vektorisierers ist ein Symbol-Buffer von 2K-Wörtern39, jeder Eintrag kann 74Bit umfassen. die Konturbeschreibung von mehreren Frames
wird in der Reihenfolge ihrer Verarbeitung abgespeichert.
Jeder Eintrag enthält:
Zusätzlich wird der Buffer- und Vektorisierungsstatus in den Symbolbuffer eingeblendet. Der Symbolbufferzugriff (read-only) ist über den VME- und VSB-BUS nur im Longword-Modus möglich40.
Der nun folgende Schritt der Bildverarbeitung beschäftigt sich damit, geschlossene 2-D-Konturen zu finden, um auf diese Weise 2-D-Objekte zu segmentieren. Dieser Verarbeitungsschritt ist der Erste, der rein softwaretechnisch realisiert wurde. Der durch die Hardware-Vektorisierung stark reduzierte Datenstrom muß nun in Echtzeit verarbeitet werden. Erst diese starke Reduzierung in Hardware macht eine Echtzeitverarbeitung mit Prozessoren der Motorola 68K-Klasse möglich.
Um die vorhandene Rechenleistung gut auszunutzen, wurden die CPU's der IC40-Bildverarbeitungskarten ausgewählt, diese Aufgabe zu übernehmen. Da für jeden der beiden CCD-Sensoren eine eigene Framegrabber-Karte mit integrierter CPU eingesetzt wird, bietet sich in dieser Konfiguration die Gelegenheit, die 2-D-Verarbeitung auch softwareseitig zu parallelisieren.
Die VECTOR-Karten führen, wie im Abschnitt 4.8.1 beschrieben, in einer zweiten Verarbeitungsstufe eine einfache Suche nach Nachbarkonturen durch. Diese Konturen werden über Verweise zu einer Konturkette verbunden. Praktische Untersuchungen ergaben, daß auch geschlossene Konturen nicht vollständig von der Hardware-Vektorisierung zu einer Kette zusammengeschlossen werden. Beobachtete reale Objekte enthalten aufgrund von Störungen durch Beleuchtungseinflüsse (Schattenverläufe, Reflexe) meist kleine Lücken in den Konturverläufen. Die Aufgabe der 2-D-Software-Module auf den IC40-Karten ist es, diese Lücken zu schließen und mit geeigneten Verfahren geschlossene Konturen, im folgenden 2-D-Objekte genannt, zu detektieren.
Dazu werden folgende vereinfachende Annahmen getroffen:
Der realisierte Algorithmus bearbeitet die in Abschnitt 4.8.1 erläuterte Ausgabedatenstruktur der VECTOR-Karten auf folgende Weise:
Dieser einfache und schnelle Algorithmus ist in der Lage Konturketten in Echtzeit, also für 25 Frames pro Sekunde zu erkennen, und ihre Extremwerte für eine weitere Bearbeitung zur Verfügung zu stellen. Er führt eine weitere Datenreduktion durch, aus den bis zu 4kByte Konturdaten werden die X- und Y-Extremwerte von bis zu 20 2-D-Objekten41 .
Die lokale Software auf den IC40-Bildverarbeitungskarten übernimmt außerdem die Initialisierungsprozeduren, die für den ordnungsgemäßen Betrieb der VECTOR-Karten notwendig sind.
Darüberhinaus ist die lokale Software Kommunikationspartner der Haupt-CPU des Bildverarbeitungssystems und muß die Kommunikationsprotokolle der beiden realisierten Kommunikationsverfahren einhalten.
Für eine weitergehende Stereo-3-D-Bildverarbeitung ist eine Zusammenführung der Informationsströme der beiden 2-D-Bildverarbeitungskanäle notwendig. Die Haupt-CPU-Karte kommuniziert mit beiden IC40-Bildverarbeitungskarten über zwei mögliche Kommunikationswege.
Das erste beschriebene Verfahren führt zu häufigen VME-BUS-Zugriffen der Haupt-CPU auf das RAM der IC40-CPU's. Da die lokalen IC40-CPU's jeweils während eines solchen Vorgangs angehalten werden, bzw. selber nicht über den VME-BUS auf die VECTOR-Karten zugreifen können, kommt es bei diesem Verfahren zu Timing-Problemen mit den VECTOR-Karten. Aus diesem Grund wurde das zweite Verfahren für die Kommunikation mit den IC40-Karten ausgewählt.
Vor ihrer Verwendung42 müssen alle Bildverarbeitungskarten initialisiert werden. Diese Initialisierung betrifft im Falle der IC40-Karten die lokale CPU, das lokale Betriebssystem und die Register der Framegrabber. Die notwendigen Befehle zum Download des lokalen Betriebssystems der IC40-Karten sind im Abschnitt 2.2.2.1 erläutert. Die THINEDGE-Karten werden durch das Programm THININI initialisiert, welches als Binary und im Quellcode zum Lieferumfang der Bildverarbeitungskarten gehört. Die THINEDGE-Karten sind leider von den IC-40-CPU's nicht direkt adressierbar, weshalb die erste Initialisierung von der Haupt-CPU aus gestartet werden muß. Die ebenfalls im Quellcode vorliegende Initialisierungsroutine VECTINI für die VECTOR-Karten wurde so modifiziert, daß sie auf den IC-40-CPU's ablauffähig ist und alle in den Abschnitten 4.9 und 4.10 beschriebenen Funktionalitäten enthält.
Die komplette Initialisierung des System wurde zu einem einzigen OS9-Shellscript
zusammengefaßt, welches der Benutzer unter dem Namen
START_ALL aufrufen kann. Dieses Shell-Script ist im Anhang auf Seite
pageref aufgeführt.
Zusammenfassend kann der Datenfluß im Bildverarbeitungssystem folgendermaßen charakterisiert werden:
So wird also im Zuge der Bildverarbeitung ein Datenstrom von ca. 2x 30 MByte/s auf eine Informationsmenge von 6000 Bytes/s reduziert. Es handelt sich damit um eine Datenreduktion um etwa vier Zehnerpotenzen.
Die Qualität der Information nimmt allerdings während des Bildverarbeitungsprozesses kontinuierlich zu, während zunächst ein großer roher Datenstrom vorliegt, ist der Datenstrom am Ende auf die für das Problem relevante Information reduziert.
Um den in Abschnitt 4.10.2 erwähnten Übergang von 2-D auf 3-D-Informationsverarbeitung zu vollziehen, ist es notwendig, auf die Grundlagen der Stereobildverarbeitung einzugehen.
Die Methoden zur Gewinnung von 3-D-Bildinformationen können in aktive und passive Verfahren unterschieden werden. Bei den aktiven Methoden werden die zu untersuchenden Szenen mit gepulstem oder strukturiertem Licht43 beleuchtet. Die räumliche Information kann dann aus verschiedenen physikalischen Größen, wie Laufzeiten, geometrischen Verzerrungen und Interferenzstrukturen bestimmt werden. Zu diesen Verfahren zählen die optische Flugzeitmessung (Lidar), die Triangulation mit Lichtpunktprojektoren, die Lichtschnittechnik und die interferometrische Längenmessung [27].
Das hier eingesetzte Verfahren gehört zu den passiven Verfahren, die mit zwei oder mehreren Kameras (Stereobildverarbeitung) oder mit einer einzigen Kamera (monokulare Bildverarbeitung) arbeiten.
Für den Einsatz von Bildverarbeitung für Industrieroboter und mobile Systeme, ist je nach Aufgabenstellung ein Verwendung von raumfesten oder mitbewegten Kameras sinnvoll. Beispielsweise bietet sich für die bildverarbeitungsgestützte Roboterkalibrierung ein mitbewegtes Kamerasystem an. Dieses Verfahren stellt gewissermaßen die Umkehrung des hier beschriebenen Verfahrens dar. Ein an die Roboterhand montiertes geeichtes Kamerasystem wird eingesetzt um mittels eines Eichkörpers einen Roboter zu kalibrieren[14]. Für mobile Systeme ist eine Gewinnung von Stereo-Informationen auch mit Ein-Kamera-Systemen möglich, wenn zeitliche Veränderungen der Bildinformation ( Optischer Fluß44) bei Betrachtung ortsfester starrer Umgebungspunkte durch Eigenbewegung oder Bewegung der Kamera ( Active Vision) erzwungen werden.
Für die bildverarbeitungsgestützte Kollisionsvermeidung ist die Arbeitsraumüberwachung eines Industrieroboters am besten durch raumfester Kameras zu gewährleisten. Passive Verfahren mit Einsatz von zwei oder mehreren Kameras eignen sich besonders für dieses Verwendungsgebiet. Prinzipiell ist mit dem beschriebenen passiver Verfahren eine 3-D-Informationsgewinnung mit zwei Kameras möglich, allerdings können zur Vermeidung von Phantombereichen auch mehrere Kameras genutzt werden. Phantombereiche sind Bereiche des Überwachungsraumes, die nicht durch eine Kamera eingesehen werden können. Bereiche die nicht durch zwei Kameras gleichzeitig eingesehen werden, sind für eine Stereobildverarbeitung mit dem eingesetzten Verfahren nicht zu überwachen. Solche Phantombereiche lassen sich nie ganz vermeiden, wenn komplizierte Objekte mit konvexer Gestalt beobachtet werden. Außerdem sind bestimmte Kameraanordnungen günstig für eine Auflösung der Korrespondenz zweier 2-D-Bildpunkte im dreidimensionalen Raum. Stereobildverarbeitung gewinnt räumliche Informationen aus der Disparität45 korrespondierender Punkte und ist daher im wesentlichen auf die Korrespondenzauflösung angewiesen.
Im beschriebenen Aufbau werden zwei Kameras eingesetzt, die an einem Träger oberhalb der Roboterarbeitszelle in einer Ebene orientiert angebracht sind. Der Abstand der Kameras bzw. ihre Brennweite sind so gewählt worden, daß der gesamte Arbeitsraum überwacht werden kann. Durch Hindernisse verursachte Phantombereiche sind für die hier beschriebene Implementierung durch den Einsatz eines Fuzzy-Logic basierten Kollisionsvermeidungsalgorithmus (siehe Abschnitt 7) relativ unkritisch. Phantombereiche, die durch den Industrieroboter selbst entstehen sind insofern unkritisch, weil ein Hindernisobjekt, das sich dem Roboter nähert sofort zu einer Ausweichbewegung führt. Kann die Ausweichbewegung nicht schnell genug ausgeführt werden oder hat der Roboter keine Möglichkeit mehr auszuweichen, wird er gestoppt. Der Roboter selber ist nicht Gegenstand der 3-D-Sensorüberwachung, da seine Ist-Position dem Bildverarbeitungssystem kontinuierlich von der Robotersteuerung mitgeteilt wird.
Die Kameras eines Stereobildverarbeitungssystems müssen vor ihrem Einsatz kalibriert werden. Die folgenden Abschnitte beschäftigen sich daher mit den Grundlagen und der Vorgehensweise bei der Kamerakalibrierung.
Voraussetzung für die Kamerakalibrierung ist ein mathematisches Kameramodell. Im ersten Ansatz wird hier von einer einfachen Lochkamera ausgegangen. Eventuelle Linsenverzeichnungen werden später durch geeignete Korrekturfaktoren berücksichtigt. Eine Lochkamera bildet Punkte einer beobachteten Umgebung, hier vereinfacht als Arbeitsvolumen mit zugeordnetem Welt-Koordinatensystem dargestellt, auf einer Sensorfläche ab. Die z-Achse des Weltkoordinatensystems ist zweckmäßigerweise so orientiert, daß sie mit der z-Achse des Arbeitsvolumens zusammenfällt. Das Weltkoordinatensystem ist ein kartesisches Koordinatensystem mit den Dimensionen x,y und z . Das Sensorkoordinatensystem wir durch die Dimensionen u und v gekennzeichnet (siehe Abbildung 5.1)
Ein Punkt im Raum mit den Koordinaten Px,Py und Pz wird abgebildet in die Sensorebene als Pu und Pv .
Solche Koordinatentransformationen lassen sich sehr gut mit homogenen Koordinaten beschreiben.
Homogene Koordinaten eignen sich zur einheitlichen Beschreibung von geometrischen Transformationen durch Matrixmultiplikationen. Transformationen und die Gesamtskalierung werden in einer 4×4 Transformationsmatrix zusammengefaßt. Diese Transformationsmatrix enthält die Komponenten:
|
Vorteile46 dieser Darstellung sind die einheitliche Behandlung aller Transformationen und die Möglichkeit komplexe Transformationen als Matrixmultiplikationen durchzuführen. Mehrere Transformationen (z.B. Translation und Rotation) müssen nicht mehr nacheinander ausgeführt werden, sondern es wird einmalig die Gesamttransformationsmatrix berechnet, mit der dann die homogenen Koordinaten der zu transformierenden Punkte multipliziert wird. Außerdem lassen sich diese Transformationen einfach durch Matrixinversion umkehren.
Der Übergang von kartesischen Koordinaten zu homogenen Koordinaten gestaltet sich folgendermaßen:
Kartesische Koordinaten eines Punktes im Raum:
| (5.1) |
Entsprechende homogene Koordinaten:
| (5.2) |
Die möglichen Transformationen mit homogenen Koordinaten sind in Tabelle 5.1 aufgeführt.
Die Translations- und Rotationstransformationen lassen sich auch als 3×3 Matrizen beschreiben wie z.B. die Rotation um die x-Achse:
| (5.3) |
Es ist leicht zu erkennen, das diese Matrix für eine Darstellung in homogenen Koordinaten nur einfach erweitert wird. Die 3×3 Matrizen sind ein Spezialfall der allgemeineren 4×4 Matrizen.
Klassische Verfahren[16] der Kamerakalibrierung verwenden ein physikalisches Kameramodell, das 11 verschiedene Parameter zur Beschreibung einer Kamera benötigt, welche in interne und externe unterschieden werden (siehe Tabelle 5.2).
Externe Kameraparameter | |
Translation der Kamera in x-Richtung | x |
Translation der Kamera in y-Richtung | y |
Translation der Kamera in z-Richtung | z |
Rotation der Kamera um die x-Achse | a |
Rotation der Kamera um die x-Achse | b |
Rotation der Kamera um die x-Achse | g |
Interne Kameraparameter | |
Brennweite | B |
Skalierungsfaktor in x-Richtung | sx |
Skalierungsfaktor in y-Richtung | sy |
Linsenverzerrungskoeffizient | k1 |
Linsenverzerrungskoeffizient | k2 |
Neuere Ansätze[19] erweitern dieses Modell noch um zwei weitere Parameter,
welche eine zusätzliche Bildebenenverkippung berücksichtigt. Die notwendigen
Schritte um in diesem Modell aus 3-D-Weltkoordinaten
( Xw,Yw,Zw) geräteabhängige 2-D-Bildkoordinaten
zu gewinnen sind folgende:
Mit geeigneten Kalibrierungsverfahren können die internen Kameraparameter bestimmt bzw. die externen Parameter vermessen werden.
Wenn aber die Bestimmung der Kameraparameter nicht das primäre Ziel der Kalibrierung ist, sondern nur eine Transformation von 3-D-Weltkoordinaten in ein 2-D-Sensorkoordinatensystem gewünscht wird, ist die Wahl einer 4×4 Transformationsmatrix als mathematisches Kameramodell sinnvoll. Alle in Abschnitt 1 genannten Transformationsschritte lassen sich, bis auf die nichtlineare Linsenverzeichnung,47 in einer einzigen Transformationsmatrix darstellen, die im folgenden als Kameramatrix bezeichnet wird.
Die Kameramatrix M transformiert 3-D-Weltkoordinaten ( x,y,z) in 2-D-Bildkoordinaten (u,v) :
| (5.4) |
bzw.
| (5.5) |
Die Elemente a11 bis a44 sind noch unbekannt, aber eine geeignete Wahl dieser Koeffizienten repräsentiert jede mögliche lineare Transformation der ( x,y,z) - in (u,v) -Koordinaten (die Koordinate w wird für eine Transformation in eine Ebene nicht genutzt). Gelingt es die Koeffizienten der Kameramatrix zu bestimmen, sind die (u,v) -Koordinaten errechenbar. Umgekehrt ist eine Transformation von (u,v) nach ( x,y,z) nur möglich, wenn eine zusätzliche Information zu Verfügung steht (2 Gleichungen, 3 Unbekannte). Die zusätzliche Information wird bei der Stereobildverarbeitung aus einer zweiten Kameramatrix gewonnen ( (u2,v2) , also 4 Gleichungen mit 3 Unbekannten).
Da die Koordinate w im 2-D-Bild nicht benötigt wird und homogene Koordinaten explizit einen Skalierungsfaktor beinhalten (jede konstante Multiplikation dieser Matrix repräsentiert die gleiche Transformation), kann die Gleichung 5.4 folgendermaßen vereinfacht werden:
| (5.6) |
löst man nun nach u und v auf, erhält man:
| (5.7) |
und
| (5.8) |
Weil die Koordinate w in Ausdruck 5.6 für Transformationen auf ein 2-D-Bild nicht benötigt wird, stellt man die Kameramatrix M häufig als 3×4 Matrix dar.
Jede bekannte Welt-Bild-Korrespondenz impliziert nun zwei Gleichungen mit 11 Unbekannten. Wenn also mindestens 6 Korrespondenzen von ( x,y,z) -Koordinaten zu (u,v) -Koordinaten bekannt sind, lassen sich alle 11 Elemente aij bestimmen. Dieses Verfahren ist erstmals in [17] beschrieben und eignet sich sehr gut für eine einfache und robuste Kamerakalibrierung.
Schreibt man die Unbekannten aij in Form eines 11-Tupels:
| (5.9) |
Ausdruck 5.9 ist eine Schar linearer Gleichungen der Form
| (5.10) |
wobei A die oben konstruierte 2n ×11 Matrix, B ein 11-Tupel mit 11 Unbekannten und C ein 2n -Tupel repräsentiert.
M bzw. alle Elemente von M können also mit Hilfe der Methode der kleinsten Quadrate (siehe [24]) bestimmt werden, wenn 6 oder mehr48 linear unabhängige Korrespondenzen bekannt sind.
Die beschriebene Kamerakalibrierung hat den Vorteil, das weder interne noch externe Kameraparameter bekannt sein müssen. Die Orientierung der Kameras muß nicht bekannt sein oder vermessen werden. Durch die Verwendung von homogenen Koordinaten ist die Anzahl der notwendigen Transformationen auf eine einzige beschränkt, was sich positiv auf die notwendige Rechenzeit für eine Implementierung dieser Algorithmen auswirkt. Der einzige Nachteil dieses Verfahrens, nämlich die fehlende Möglichkeit interne- und externe Kameraparameter zu berechnen, wird relativiert durch Untersuchungen von Ganapathy [21], in denen eine Dekompositionstechnik vorgestellt wird, die es erlaubt alle nötigen internen- und externen Kameraparameter aus der Kameramatrix M zu berechnen. Dieses Dekompositionsverfahren wurde von Faugeras und Toscani [22] auf die Bestimmung von epipolaren Kamerageometrien, und von Puget und Skordas [23] für die Kalibrierung einer mobilen Kamera entsprechend angewendet.
Das einfache, in Abbildung 5.1 beschriebene, Lochkameramodell bildet lineare homogene Weltkoordinaten in homogenen Bildkoordinaten ab. Die eingesetzten Kameras verfügen aber über ein Objektiv, dessen Linsensystem im Gegensatz zu einer Lochblende zu nicht linearen, radialen Verzerrungen führt (siehe Abbildung 5.2).
Wenn die Transformation nicht mehr genau genug durch eine lineare Transformation beschrieben werden kann, müssen Polynome höherer Ordnung für die Beschreibung eingesetzt werden. Polynome zweiter Ordnung werden häufig verwendet, um die geometrische Verzerrungseffekte zu beschreiben, wie sie durch Linsenverzerrungen entstehen. Im folgenden beschriebenen Verfahren [18] wird versucht für eine Korrektur der geometrischen Verzerrungen die tatsächlichen Bildkoordinaten (u,v) auf die gemessenen Bildkoordinaten (j,k) abzubilden.
Die Korrekturtransformation hat folgende Form:
| (5.11) |
| (5.12) |
wobei die Koeffizienten a0,...,a5 und b0,...,b5 Konstanten sind, welche die notwendige geometrische Korrektur beschreiben. Diese Koeffizienten können durch zwei Vektoren folgendermaßen beschrieben werden:
| (5.13) |
| (5.14) |
Ziel des Korrekturverfahrens ist die Minimierung des Fehlers zwischen den gemessenen und idealen Bildpunkten. Die quadratische Abweichung in Pixeln zwischen den idealen (j,k) und gemessenen Punkten (j¢,k¢) ist
| (5.15) |
Der Betrag eines Vektors x der Dimension m
| (5.16) |
kann verwendet werden, um den Fehler E für m Punkte zu beschreiben,
| (5.17) |
wobei j und k jeweils Vektoren der m Punktekoordinaten sind
| (5.18) |
| (5.19) |
und P eine Matrix ist, welche die Terme der zweiten Ordnung der beobachteten Bildpunkte enthält und definiert ist als:
| (5.20) |
Die Vektoren a und b , die den Fehler E des Korrekturverfahrens minimieren, können mit dem Verfahren der kleinsten Quadrate (siehe [24]) gefunden werden.
| (5.21) |
| (5.22) |
Man beachte das der Ausdruck ( PTP) -1PT in den Formeln 5.23 und 5.24 die bereits in Abschnitt 6 eingeführte Pseudoinverse der Matrix P darstellt.
Dieses Verfahren erlaubt eine Lösung des überdeterminierten Systems. Nur 6 Punkte sind notwendig, um Werte für die Vektoren a und b zu finden. Allerdings reduziert eine größere Anzahl von Punkten und eine Minimierung des Fehlers E die Abhängigkeit von statistischen Abweichungen.
Für die Realisierung einer Kamerakalibrierungs-Software bietet sich die Verwendung von frei verfügbaren Bildverarbeitungsbibliotheken an. Es existieren einige umfangreiche Bildverarbeitungsbibliotheken, wie beispielsweise KOHROS, die für akademische Zwecke frei nutzbar sind. Allerdings ist keines dieser freien Pakete für das Betriebsystem OS9 zur erhältlich. Einige freie Bildverarbeitungsoftwarepakete stehen im Quelltext zur Verfügen, was eine Portierung auf OS9 ermöglicht. Der in Abschnitt 2.2.6 beschriebene GNU-C-Crosscompiler ermöglicht eine relativ einfache Portierung von Softwarepaketen. Allerdings muß bei einer Portierung, insbesondere auf ein Zielbetriebssystem wie OS9, welches in mehreren Hinsichten ein ,,Exot'' unter den Betriebssystemen ist, abgeschätzt werden ob der Aufwand hierfür nicht den Aufwand für eine neue Implementierung übersteigt.
Besonders günstig für eine mögliche Portierung auf OS9 sind Softwarepakete, die keine besonderen Anforderungen an zusätzliche Bibliotheken, oder an eine zu verwendende grafische Benutzeroberfläche stellen. Eine Implementierung der im UNIX-Umfeld weit verbreiteten grafischen Benutzeroberfläche XWINDOW ist zwar für OS9 verfügbar, aber sie hat sich als nicht netzwerkfähig und wenig kompatibel erwiesen.
Softwarepakete, die eine einfache Textkonsole voraussetzen, bzw. sich auf die einfache Implementierung von C-Libraries beschränken, sind komplizierteren Paketen für eine Portierung vorzuziehen.
Ein Bildverarbeitungs-Softwarepaket, das alle diese Forderungen erfüllt ist VIP [36].
VIP (Visual Information Processing) ist eine Bildverarbeitungs-Softwarebibliothek, die von der Robotics and Vision Research Group des Departement of Computer Science an der University of Western Autsralia entwickelt wurde.
Das System besteht aus zwei Teilen:
Die VIP-Bildverarbeitungsbibliothek ist speziell dafür angelegt worden, Benutzern auf einfache Weise zu ermöglichen, unter Verwendung einer standardisierten Bibliothek, eigene Bildverarbeitungsprogramme zu erzeugen.
Die Bibliothek beinhaltet Funktionen der folgenden Kategorien:
Die VIP Bild-Datenstruktur unterstützt eine Reihe von Bildtypen, angefangen von einfachen 8 Bit Grauwertbildern, bis zu 24 Bit Farbbildern. Das VIP-eigene Bildformat integriert in seiner Datenstruktur Parameter, die die Kamera Kalibrierung und Linsenverzerrungsparameter beinhalten. Außerdem gewährleistet das VIP-System die 3-D-Bildverarbeitung mit strukturiertem Licht- und Stereokamerasystemen.
Nutzbar ist das VIP-System für die Betriebssysteme UNIX auf DEC ALPHA, SUN SPARC und LINUX, ein Teil der Funktionalität steht auch unter DOS auf PC's zur Verfügung [36].
Das VIP-System enthält das für die Berechnung vom Kamerakalibrierungen vorgesehene Programm calibrate.
Dieses Programm errechnet eine 3×4 Kamerakalibrierungsmatrix und optional ein Korrektur-Polynom dritter Ordnung für die Linsenverzeichnung. Die Eingabedaten des Programms sind eine Reihe 3-D-Koordinaten von Kalibrierungspunkten mit korrespondierenden 2-D-Koordinaten dieser Punkte. Das Programm gibt eine binäre Datei aus, welche eine CAMERA-Datenstruktur (siehe Anhang Seite pageref) enthält. Die CAMERA-Struktur umfaßt die gesamten Kalibrierungsergebnisse. Für eine Kontrollmöglichkeit wird eine Version dieser Kalibrierungsdaten in eine Text-Datei gespeichert. Das Programm erfragt beim Start die Dateinamen der Textdateien, welche die 3-D- und 2-D-Information enthalten. Alternativ können diese Informationen auch einer Bild-Datei im VIP-Format entnommen werden. Nach Berechnung der Kameramatrix wird diese auf der Konsole angezeigt und der Benutzer kann auswählen, ob er eine weitere Berechnung der Linsenverzeichnung für sinnvoll hält.
Wenigstens die Korrespondenzen von 6 Punkten müssen in den 3-D- und 2-D-Testdateien eingetragen sein, um eine Kamerakalibrierung zu ermöglichen (Siehe auch Ausdruck 5.9). Für eine erfolgreiche Berechnung der Linsenverzeichnungskoeffizienten müssen diese Punkte weit verteilt im beobachteten Volumen liegen. Wird eine größere Anzahl von Punkten verwendet, erreicht man eine größere Unempfindlichkeit gegenüber statistischen Ausreißern.
Die im Abschnitt 5.3.1 erwähnten Bibliotheksfunktionen für Kamerakalibrierung und 3D-Datenrekonstruktion beinhalten die folgenden, für die hier beschriebene Anwendung, relevanten Funktionen:
Diese Funktion konvertiert (x,y,z) -Weltkoordinaten in (u,v) -Bildkoordinaten. Die Struktur CAMERA wird im Anhang aus Seite A.1 beschrieben. Sie enthält im wesentlichen die geeichte Kameramatrix der entsprechenden Kamera.
CAMERA cam1, CAMERA cam2, double P[3]);
Diese Funktion berechnet (x,y,z) -Weltkoordinaten (P[3]) aus (u,v) -Bildkoordinaten von zwei Kameras49.
CAMERA camera, int npts);
Die Funktion Lens_Comp_3 berechnet die Korrekturfaktoren der Linsenverzerrung.
int npts, CAMERA camera, char *filename, int lenscomp);
Die Funktion calibrate errechnet aus 3-D-Weltkoordinaten und 2-D-Bildkoordinaten eine Kameramatrix.
Diese Funktion liest 3-D-Kalibrierungsdaten aus einer Textdatei aus. Sie erwartet folgende Textformatierungen:
point 1 x y z
point 2 x y z
. . . . .
point n x y z
Alle Zeilen der Datei werden ignoriert, außer sie beginnen mit dem Token ,,point''. Die Numerierung der Punkte ist nur für die Unterstützung des Benutzers vorgesehen, diese Ziffern werden ignoriert.
Diese Funktion liest 2-D-Kalibrierungsdaten aus einer Textdatei aus. Sie erwartet folgende Textformatierungen:
imagepoint 1 u v
imagepoint 2 u v
. . . . . . . .
imagepoint n u v
Alle Zeilen der Datei werden ignoriert, außer sie beginnen mit dem Token ,,imagepoint''. Die Numerierung der Punkte ist nur für die Unterstützung des Benutzers vorgesehen, diese Ziffern werden ignoriert.
Diese Funktion schreibt eine CAMERA-Datenstruktur in eine Textdatei.
Diese Funktion liest ein binäres Kameradatenfile ein, speichert die Daten in einer CAMERA-Struktur und gibt einen Pointer auf diese Struktur zurück.
All diese Funktionen können verwendet werden, wenn die Header-Datei vip.h per #include-Anweisung in eigene Programme eingebunden wird.
Das endgültig ausführbare Programm muß dann mit der Bibliothek vip.l gelinkt werden.
Für die Portierung auf OS9 mußten folgende Dateien angepaßt werden:
Modifikationen für das vip.l Library:
Im Verzeichnis include/
Im Verzeichnis src/lib/
2
Im Verzeichnis src/vip/
Folgende Funktionen stellt das C-Library von OS9 nicht zur Verfügung:
Diese Funktionen mußten für OS9 nachgebildet werden. Ein Großteil der Modifikationen betrifft Header-Dateien, die OS9 nicht oder anders zur Verfügung stellt. Andere Anpassungen betrafen prozessorspezifische Details ( Little Endian, Big-Endian). Die Makefiles mußten für die Verwendung des Crosscompilers für OS9 stark verändert werden.
Insgesamt konnte die Portierung von VIP nach OS9 mit vertretbarem Aufwand realisiert werden.
Das beschriebene Library und das calibrate-Programm wurden in die erstellte Software integriert, so daß sich zwei verschiedene Verfahren der Kamerakalibrierung realisieren ließen.
Die Kamerakalibrierung muß für beide Kameras vorgenommen werden. Ändert sich die Orientierung oder die Brennweite einer Kamera, so muß die Eichung für diese Kamera wiederholt werden.
Die klassische Methode der Eichung ist die Verwendung eines Eichkörpers, der vermessene Eichmarken enthält, deren 3-D-Koordinaten bekannt sind. Der Ursprung des verwendeten Welt-Koordinatensystems kann prinzipiell frei gewählt werden, zweckmäßigerweise wird aber der Ursprung in den Maschinennullpunkt des Industrieroboters gelegt. Der verwendete Eichkörper besteht aus einer geschwärzten quadratischen Grundplatte, in die 16 Stangen unterschiedlicher Länge eingelassen sind, deren oberer Querschnitte mit weißen Eichmarken versehen sind. (siehe Abbildung 5.3)
Die Geometrie des Eichkörpers ist in einer Textdatei in dem für die VIP-Bibliothek lesbaren Format abgelegt. Diese mit einem Texteditor erzeugte Datei hat folgenden einfachen Aufbau:
#
# Ursprung ist der auf der Rueckseite des Eichkoerpers mit
# 0 bezeichnete Punkt, X UND Y-Achsen sind dort ebenfalls angegeben
#
# 0 --->x
# | 1 2 3 4
# v 5 6 7 8
# y 9 10 11 12
# 13 14 15 16
#
#
# Entfernung des Punktes 0 von dem naechsten Eckpunkt der Grundplatte:
# Xo= 50 mm Yo= 50 mm
# Dicke der Grundplatte: 12.7 mm , Z-Koordinatenursprung ist die
# obere Flaeche der Grundplatte
# Punkt 1 liegt auf der Kooedinate x=0 und y=0
#
point 1 0 0 130
point 2 100 0 140
point 3 200 0 150
point 4 300 0 160
point 5 0 100 20
point 6 100 100 60
point 7 200 100 100
point 8 300 100 140
point 9 0 200 100
point 10 100 200 60
point 11 200 200 60
point 12 300 200 120
point 13 0 300 20
point 14 100 300 100
point 15 200 300 20
point 16 300 300 100
Das Format dieser Datei entspricht dem im Abschnitt 5.3.3 erläuterten Eingabeformat der VIP-Bibliotheksfunktion Read_Calib_Pts.
Nach dem Start aller Bildverarbeitungskomponenten wird der Eichkörper im Arbeitsraum positioniert. Dann werden die jeweils 16 Koordinaten der erkannten 2-D-Objekte aus den beiden IC40-Bildverarbeitungskarten ausgelesen, für alle 2-D-Objekte die Mittelpunktkoordinaten bestimmt und abschließend in zwei Textdateien geschrieben.
Die 2-D-Kameraeichdateien, deren genaues Format im Abschnitt 5.3.3 erläutert wird, müssen die Eichpunkte in der gleichen Reihenfolge enthalten, wie sie in der obigen 3-D-Eichdatei angegeben sind, um die notwendigen Korrespondenzen herzustellen. Da zu diesem Zeitpunkt noch keine Kameraeichung50 vorhanden ist, kann diese Zuordnung manuell oder mit einem heuristischen Algorithmus, welcher eine festgelegte Orientierung der Kameras relativ zum Eichkörper erfordert, ermittelt werden. Eine auf diese Weise automatisierte Eichung ist einer manuellen Vorgehensweise vorzuziehen, weil ein neuer Eichvorgang bei jeder Änderung der Orientierung der Kameras notwendig ist. Für den eingesetzen Eichkörper ist ein solcher heuristischer Algorithmus implementiert worden, allerdings muß dieser für stark veränderte Kamerapositionen bzw. Eichkörper neu angepaßt werden.
Nachteil des verwendeten Eichkörper ist es, daß nicht der gesamte Arbeitsraum des Industrieroboters abgedeckt wird, ein so großer Eichkörper wäre allerdings schwer zu handhaben.
Sind beide 2-D-Dateien und die notwendige 3D-Textdatei erzeugt worden, wird durch Systemaufrufe zweimal51 das Programm calibrate aufgerufen, welches die Berechnung der Kameramatrix und optional der Linsenverzeichnung ausführt. Schließlich werden beide binären Ausgabedateien der calibrate-Durchläufe in das realisierte Programm eingelesen und für die kontinuierliche Berechnung von 3-D-Weltkoordinaten verwendet.
Bildverarbeitungssysteme werden unter anderem auch für die Kalibrierung von Industrierobotern eingesetzt [14]. Daher liegt der Gedanke nahe, umgekehrt den zu überwachenden Industrieroboter für eine Kamerakalibrierung einzusetzen. Die Robotersteuerung teilt der überwachenden Haupt-CPU kontinuierlich die aktuellen Ist-Positionen des Tool-Center-Points des Industrieroboters mit. Somit lassen sich diese Informationen nutzen, um mit einer in der Nähe des TCP52 angebrachten Eichmarke verschiedene Raumpunkte im Arbeitsraum des Roboters anzufahren, deren Koordinaten dann für die Kamerakalibrierung genutzt werden.
Zu diesem Zweck ist ein Verfahren implementiert worden, daß es erlaubt, mittels einer an eine serielle Schnittstelle der Haupt-CPU-Karte angeschlossenen 3-D-Steuerkugel, Eichpositionen zu teachen, die in einem VIP-konformen Textfortmat abgespeichert werden können.
Der implementierte Eichvorgang kann so vollkommen automatisch abgearbeitet werden. Die 3-D-Eichdatei wird eingelesen und der in Abschnitt 3.1beschriebene Bahninterpolator führt den Industrieroboter an die angegebenen 3-D-Positionen. Die aktuellen 2-D-Koordinaten der Eichmarke werden jeweils aus beiden IC40-Karten ausgelesen.
Wenn alle Positionen angefahren worden sind liegen die vollständigen 2-D-Koordinaten in der richtigen Reihenfolge vor und können so in die beiden VIP-konformen 2-D-Eichdateien geschrieben werden. Die Korrespondenzauflösung erfolgt hier automatisch durch die festgelegte zeitliche Abfolge in der die Eichmarke an verschiedenen Positionen beobachtet wird. Die weitere Vorgehensweise unterscheidet sich nicht von der im Abschnitt 5.4.1.
Dieses Verfahren hat folgende Vorteile gegenüber der Verwendung eines Eichkörpers:
Mit dieser Kamerakalibrierung ist ein für die betrachtete Problemstellung günstiges und robustes Verfahren implementiert worden.
Die Korrespondenzauflösung zwischen zwei 2-D-Bildern ist kein triviales Problem. Allgemein lassen sich die in der Literatur beschriebenen Verfahren [19] [25][27] im wesentlichen einteilen in
Die Korrespondenzauflösung mit Hilfe von merkmalsbasierten Verfahren wird häufig durch die Epipolarlinienbedingung auf ein eindimensionales Problem reduziert. Die Epipolarlinienbedingung fordert, daß korrespondierende Punkte in beiden Bildern eines Stereokamerasystems auf den Epipolarlinien liegen müssen, die durch den Schnittpunkt der Epipolarebene mit der Abbildungsebenen der Sensoren gebildet werden. Die Epipolarebene wird durch den Raumpunkt und die beiden Abbildungspunkte auf den Kamerasensoren aufgespannt (siehe Abbildung 5.6).
Das hier beschriebene Verfahren der Kamerakalibrierung ermittelt allerdings nicht die externen Kameraparameter wie Position und Orientierung, so daß ein anderer Ansatz verfolgt werden muß.
Wenn identische Kameras (gleiche Brennweite, interne Kameraparameter, usw.) auf gleicher Höhe parallel den Arbeitsraum überwachen, liegen die korrespondierenden Punkte in der gleichen Bildzeile und das Suchproblem wird eindimensional.
Zwei dieser Bedingungen sind in etwa erfüllt, die Kameras sind allerdings gegeneinander geneigt, damit der Phantombereich des Stereokamerasystems minimiert wird. Korrespondierende Punkte sollten in der gewählten Anordnung tatsächlich in ähnlichen u -Bildzeilenkoordinaten liegen. Außerdem sollte bei einem recht großen vertikalen Abstand vom Arbeitsraum, bzw. einer kleinen Brennweite der Kameras, die relative Größe der 2-D-Objekte in u unter den genannten Bedingungen auf beiden Sensorebenen sehr ähnlich sein.
Mit diesen beiden Bedingungen wird eine Suche nach ähnlichen 2-D-Objekten durchgeführt. Es handelt sich bei den von den IC40-CPU-Karten vereinfachten 2-D-Objekten um solche, mit nur zwei Extremwerten. Diese können anhand ihrer Größen und ihrer Position leicht einander zugeordnet werden. Sind die Korrespondenzen zweier Objekte anhand ihrer zu ähnlichen u -Lage und u -Ausdehnung nicht aufzulösen wird aus diesen beiden Objekten ein einziges größeres generiert, deren Korrespondenzen sich nun einfacher auflösen lassen. Diese einfache heuristische Korrespondenzauflösung ist für das beschriebene Problem ausreichend, da hier keine genaue Vermessung des Arbeitsraums erforderlich ist, sondern für die Zwecke der Kollisionsvermeidung die ungefähre Lage eines Hindernisses erkannt werden soll. Wenn die dreidimensionale Ausdehnung eines Hindernisses durch ein solches Stereoverfahren überschätzt wird, ist dieses für eine Anwendung der generierten 3-D-Daten für eine Kollisionsvermeidung unkritisch.
Durch den Einsatz der Vektorisierungskarten in der 2-D-Bildverarbeitung ergeben sich folgende Probleme für die Erkennung markanter Punkte, die sich für eine Korrespondenzauflösung eignen.
Das in Abschnitt 4.8 erläuterte Vektorisierungsverfahren bricht die Vektorisierung einer Teilkontur immer ab, wenn der aktuelle Vektor um einen bestimmten Winkel von der Kontur abweicht, um dann einen neuen Vektor zu erzeugen. Diese, sich durch die Vektorisierung ergebenden, markanten Punkte (Stellen an denen ein neuer Vektor begonnen wird) korrespondieren bei Objekten, die nicht über scharfe Knickstellen in ihrer Kontur verfügen, nicht miteinander in verschiedenen 2-D-Ansichten.
Das eingesetzte vereinfachende 2-D-Objekterkennungsverfahren (siehe Abschnitt 4.9) berechnet nur die Extremwerte der 2-D-Objekte. Eine Korrespondenzauflösung dieser eventuell nur virtuell existierender Extremwerte (siehe Abbildung 5.7)
ist sehr einfach, allerdings führt die 3-D-Bearbeitung solch virtueller, außerhalb der Objektkontur liegender Punke, zur Detektion einer zu großen dreidimensionale Ausdehnung eines Objektes. Wenn die dreidimensionale Ausdehnung eines Hindernisses durch ein solches Stereoverfahren überschätzt wird, ist dieses für eine Verwendung der generierten 3-D-Daten für eine Kollisionsvermeidung unkritisch.
Das in Kapitel 7 beschrieben Kollisionsvermeidungsverfahren basiert auf unscharfer Fuzzy-Logik, weshalb an dieser Stelle kein zu hoher Genauigkeits-Aufwand getrieben werden soll.
Untersuchungen über die mit diesem einfachen Ansatz einer Stereobildverarbeitung zu erreichende Genauigkeiten werden im Abschnitt 9 angestellt.
Unter dem Begriff Kollisionsvermeidung versteht man die Überwachung von Werkzeugmaschinen und Industrierobotern auf Kollisionen mit Werkstücken, Hindernissen oder weiteren Werkzeugmaschinen, bzw. Industrierobotern, und die Vermeidung dieser Risiken.
Es können zwei grundsätzlich verschiedene Verfahren zur Kollisionsvermeidung unterschieden werden.
Online-Kollisionsvermeidungsverfahren gewinnen im Zuge der fortschreitenden Automatisation und durch den Einsatz flexibler Fertigungsverfahren zunehmend an Bedeutung.
Industrieroboter mit 6-Achsen stellen besondere Anforderungen an Kollisionsvermeidungsalgorithmen, da aufgrund ihrer Kinematik ( kinematische Ketten) nicht nur der Greiferort, sondern auch die Lagen des Ellbogens im Unter- und Oberarm und der Schulter des Robotors in die Ermittlung von kollisionsfreien Trajektorien eingehen müssen. Es existieren Verfahren, die die Kinematik eines 6-Achsen Indutrieroboters auf ein einfacheres Modell, dem sogenannten ,,Reduzierten Aktuellen Roboter'' (R.A.R), abbilden, um die Ermittlung von kollisionsfreien Trajektorien zu vereinfachen.[26] Dieses Verfahren ist eine konsequente Weiterentwicklung des ürsprünglich in [29] vorgestellten Verfahrens, das in [30] auf Mehrrobotersysteme erweitert worden ist.
In [26] ist ein Fuzzy-Logik basierter Ansatz für die Kollisionsvermeidung von 6-Achsen Industrierobotern vorgestellt worden. Das dort beschriebene Verfahren der Kollisionsvermeidung zweier Roboter mit sich überschneidenden Arbeitsräumen wird in dieser Arbeit für einen einzelnen Roboter vereinfacht eingesetzt.
Weitere Vereinfachungen des hier eingeführten Verfahrens betreffen die Beschränkung der Überwachung auf den Tool-Center-Point (TCP) des Industrieroboters. Für eine Erläuterung der behandelten Problematik ist eine kurze Einführung in die für die Beschreibung von Robotern verwendeten Koordinatensysteme und Transformationen notwendig.
Für die mathematische Modelierung einer Roboterkinematik werden den Gliedern des Roboterarmes körperfeste Koordinatensysteme zugeordnet.
Die bereits in Abschnitt 5.2.1 eingeführten homogenen
Koordinaten können dazu verwendet werden, die Lage eines Koordinatensystems
relativ zu einem Referenzsystem darzustellen. Die Denavit-Hartenberg Notation
beschreibt den Übergang von einem Gliedkoordinatensystem Ti-1 zu einem
nachfolgende Gliedkoordinatensystem Ti eines Roboters. Die homogene
4×4 Transformationsmatrix Ai , welche diesen Übergang
beschreibt, wird durch die vier
Denavit-Hartenberg
Parameter ji,di,ai und ai
folgendermaßen definiert[31]:
| (6.1) |
Die Matrix Ai stellt die reduzierte Form der homogenen Tranformation durch zwei Translationen ai und di und zwei Rotationen ji und ai dar. Die Greiferstellung Tg erhält man nun in Basiskoordinaten durch Multiplikation aller 4×4 Matrizen Ai . (Für einen 6-Achsen Roboter ergeben sich also 6 Transformationsmatrizen)
| (6.2) |
Die verwendete Robotersteuerung teilt dem Bildverarbeitungrechner kontinuierlich die Position des Tool-Center-Point bzw. die Greiferstellung in folgender Notation als Transformationsmatrix mit:
| (6.3) |
Wobei px,py,pz die Position des Greifers und die Einheitsvektoren ig,jg,kg die Orientierung des Greifers bezüglich eines raumfesten Koordinatensystems beschreiben. Da die gewählte Realisation der Kollisionsvermeidung nur die Position des TCP auswertet, ist eine Rücktransformation auf entsprechende Roboterglieder hier nicht erforderlich. Das vorgestellte Konzept kann aber in dieser Hinsicht erweitert werden. Die erwähnte Rücktransformation würde die Auflösung von Mehrdeutigkeiten und Singularitäten der Gelenkpositionen bedingen.
In Abschitt 7.3 wird die hier eingesetzte Fuzzy-Kollisionsvermeidungsstrategie ausführlich beschrieben. Es folgt zunächst eine kurze Einführung in die Thematik ,,Fuzzy Control''.
,,Fuzzy'', auf deutsch ,,fusselig, verschwommen'', wird in diesem Kontext günstigerweise als ,,unscharf'' übersetzt. Die in den 60'er Jahren von Zadeh entwickelte Theorie unscharfer Mengen soll hier nicht näher erläutert, sondern nur auf für die Implementierung notwendige Details eingegangen werden. Eine Umfangreiche Einführung findet sich in [35].
Das realisierte Kollisionsvermeidungskonzept umfaßt die in Abbildung 7.1 aufgeführten Komponenten.
Stichwortartig verkürzt sollen hier die Schritte einer Fuzzy-Regelung erläutert werden (siehe [35]):
Für die Modellierung der hier beschriebenen Fuzzy-Kollisionvermeidung wurde das FOOL-Paket [32] eingesetzt. FOOL, der ,,Fuzzy Organizer OLdenburg'' ist ein Softwarepaket, das an der Universität Oldenburg entwickelt wurde. FOOL erlaubt die Modellierung von Fuzzy-Regelungen mit einer einfach zu bedienenden grafischen Benutzeroberfläche.
Linguistische Variablen können ebenso wie eine Regelbasis einfach erzeugt und editiert werden. Die verwendeten lingustischen Terme können grafisch angezeigt werden. Den modellierten Fuzzy-Regler speichert FOOL in einem speziellen Textformat ab, so daß Projekte weiterbearbeitet, bzw. modifiziert werden können.
Ursprünglich wurde FOOL in C entwickelt, die aktuelle C-Version 1.33 enthält allerdings noch einige Fehler, die z.B. ein Arbeiten mit linguistischen Variablen verhindern, deren Grenzen keine ganzen Zahlen sind. Die JAVA-Version von FOOL (Vers. 2.1 alpha 3) läuft allerdings stabil.
Der mit FOOL entwickelte Fuzzy-Regler kann mittels des Zusatzprogrammes FOX ,,Fuzzy Organizer Executor'' getestet und eingesetzt werden. FOX liest den modellierten Fuzzy-Regler aus der mit FOOL generierten Textdatei ein und fuzzyfiziert Eingabewerte, welche über Komandozeilenparameter übergeben werden können. Die Inferenzmaschine von FOX arbeitet das Fuzzy-Regelwerk ab und, abhängig von einem mittels Komandozeilenparameter übergebenen Flag, werden Fuzzy oder defuzzyfizierte Ausgangswerte ausgegeben.
Eine relativ neue Zusatzentwicklung ist FolToC [33], ein Programm, welches aus dem mit FOOL modellierten Fuzzy-Regler-Dateien C-Programmcode generieren kann. Dieser C-Programmcode läßt sich problemlos in das hier beschriebene Kontrollprogramm integrieren.
Über die grafische Benutzeroberfläche von FOOL können Änderungen am Fuzzy-Regler für die Kollisionsvermeidung vorgenommen und im Quellverzeichnis der Kontrollsoftware abgespeichert werden. Ein make-Aufruf aktualiesiert dann automatisch den im Kontrollprogramm enthaltenen Fuzzy-Regler53.
Die hier beschriebene Fuzzy-Kollisionsvermeidung setzt ein wenn die Bildverarbeitungssensorik ein Hindernis innerhalb einer bestimmten Entfernungsschwelle um den TCP detektiert.
Für das gegebene Kollisionsvermeidungsproblem ist es günstig in Anlehnung an [26] zunächst nur den Tool Center Point des sechsachsigen Industrieroboters in einem zylindrischen 3D-Koordinatensystem zu betrachten. Der Winkel und der Radius im zylindrischen Koordinatensystem sind dann die entsprechenden linguistischen Variablen für dieses Problem. Die in diesem Koordinatensystem gewählten linguistischen Terme sind in Abbildung 7.2 visualisiert.
Die Koordinatenen des TCP wurden also vor der Fuzzyfizierung in Zylinderkoordinaten transformiert. Nach der Defuzzyfizierung ist dann eine Rücktransformation der Zylinderkoordinaten in Kartesische notwendig.
Für die linguistischen Variablen können zweckmäßigerweise folgende Parameter gewählt werden:
In einem ersten Ansatz wird auf die Integration der Höhenkomponenten in den Fuzzyregler verzichtet. Allerdings wird bei Detektion eines potentiellen Kollisionsrisikos durch die 3-D-Bildverarbeitung der TCP in der Höhenkomponente so verfahren, daß eine Position erreicht wird, die wenig anfällig für Singularitäten der Roboterachsen ist.
Es wurden zunächst verschiedenen Fuzzyregler für die Winkel- und Radialkomponenten realisiert. Es hat sich gezeigt, daß bereits ein relativ günstiges Verhalten erreicht werden kann wenn nur die Radialkomponente der Roboterbewegung durch einen Fuzzy-Regler beeinflußt wird.
Mit dem gewählten Ansatz verbleiben vier linguistische Variablen für die Modellierung der Fuzzy-Sets:
Die für die Kollisionsvermeidungsstrategie gewählten Inferenzen gibt die Abbildung 7.7 in der in FOOL üblichen Darstellung wieder.
Die Defuzzyfizierung wird im beschriebenen Ansatz aus Geschwindigkeitsgründen mit der ,,Mean of Maximum''-Methode vorgenommen. Mit dieser Methode ergibt sich ein erheblicher Geschwindigkeitsvorteil der Berechnung gegenüber dem Verfahren ,,Center of Gravity''. Die Defuzzyfizierungsmethode kann der Benutzer in FOOL unter mehreren Alternativen auswählen. Der beschriebene Geschwindigkeitsunterschied ist deshalb so hoch, weil FOOL bzw. FolToC Fuzzy-Sets intern als diskrete Wertepaare ( Singletons) und nicht als parametrische Darstellung in Form analytischer Funktionen abspeichert, bzw. bearbeitet.
Der einfache realisierte Fuzzycontroller ist in der Lage, Hindernissen auszuweichen und versucht weiterhin sein Ziel zu erreichen. Die generierten Trajektorien sind sicherlich nicht die für den jeweiligen Fall günstigsten, aber es wird im Allgemeinen eine Lösung des Kollisionsvermeidungsproblem gefunden. Kann der Fuzzy-Contoller keine Trajektorie mehr angeben, verharrt der Roboter aufgrund übergeordneter Kontrollstrukturen an seiner Position, bis wieder neue Handlungsmöglichkeiten entstehen. Insbesondere die in Abschnitt 7.3 erläuterte Strategie, bei drohenden Kollisionen immer auf eine für Singularitäten unempfindlichere Höhe zu verfahren, hat sich bewährt.
Das hier beschriebene Verfahren kann durch die zukünftige Berücksichtigung von Geschwindigkeiten des Roboters bzw. der Hindernisse noch wesentlich verbessert werden.
Im Rahmen dieser Arbeit sind folgende Softwarekomponenten erstellt worden:
Das erstellte Kontrollprogramm für eine Echtzeit-Kollisionsvermeidung, realisiert folgende Einzelfunktionalitäten:
Die Abbildung 8.1 ermöglicht einen Umfassenden Überblick über die realisierten Softwarekomponenten und ihre Kommunikation untereinander.
Das Kontrollprogramm besitzt die folgende textorientierte Oberfläche:
| |Val5 PID: 17 |
| | |
| | |
| | |
| | |
|-VAL-Altb-|-VAL-Ctrlb----|-DEBUG------|--------------Transformation----------|
| | | | |
| | | v[0]=0 d[0]=1 |-0.43 -0.90 -0.01 -177.65 |
| | | v[1]=0 d[1]=0 |-0.90 0.43 0.05 654.0 |
| | | v[2]=0 d[2]=0 |-0.04 0.02 -0.99 -456.00 |
| | | Fall:1 | |
| | | Fall:1 | |
| | | Fall:1 | |
| | | v[5]=0 d[5]=433 | |
| | | | |
|-3D Bildverarbeitung---------------------------------------------------------|
|Anz.O.G1:1 Frame:119804 Anz.O.G2:1 Frame:119802 Korresp:1 Obj1:1 Obj2:1 Kri:0|
| min: -195.60325166 | 662.22414216 | -451.07710572 |
| max: -182.58415609 | 651.17940893 | -457.05421241 |
|-CMD-------------------------------------------------------------------------|
|(S)tart Anz. (F)ahr (K)ont. (I)ni-Bild. (Z)ielpos. k(U)gel (O)pt. (Q)uit > |
|-----------------------------------------------------------------------------|
In diesem Kapitel werden die Daten einer beispielhaften Kamerakalibrierung ausgewertet.
Die folgende Tabelle enthält die x,y und z Koordinaten einer Eichfahrt mit 45 Punkten:
# Verlassen von umacs mit ctrl-X-C
# point N X Y Z point 1 -181.593750 660.656250 -456.000000
point 2 -178.562500 618.781250 -576.000000
point 3 -299.531250 618.562500 -576.000000
point 4 -302.656250 546.500000 -576.000000
point 5 -431.437500 546.031250 -576.000000
point 6 -428.937500 377.750000 -576.000000
point 7 -104.875000 505.125000 -576.000000
point 8 111.968750 511.906250 -584.000000
point 9 125.781250 511.906250 -584.000000
point 10 124.468750 504.593750 -448.000000
point 11 291.343750 511.937500 -456.000000
point 12 418.656250 511.375000 -456.000000
point 13 482.468750 511.687500 -456.000000
point 14 480.468750 432.000000 -448.000000
point 15 480.687500 436.375000 -368.000000
point 16 344.843750 437.562500 -368.000000
point 17 349.562500 518.875000 -368.000000
point 18 346.093750 598.812500 -368.000000
point 19 347.312500 670.656250 -368.000000
point 20 193.906250 678.156250 -368.000000
point 21 81.718750 677.687500 -368.000000
point 22 -70.906250 677.000000 -368.000000
point 23 -67.937500 748.156250 -368.000000
point 24 -64.468750 578.406250 -368.000000
point 25 -296.218750 570.156250 -368.000000
point 26 -349.593750 569.437500 -368.000000
point 27 -346.875000 648.375000 -368.000000
point 28 -245.812500 711.125000 -376.000000
point 29 -246.062500 706.593750 -200.000000
point 30 -78.562500 706.250000 -200.000000
point 31 17.093750 705.812500 -200.000000
point 32 23.500000 777.343750 -200.000000
point 33 182.968750 776.750000 -200.000000
point 34 178.406250 672.250000 -200.000000
point 35 330.156250 679.531250 -208.000000
point 36 329.343750 567.062500 -208.000000
point 37 486.718750 558.281250 -208.000000
point 38 342.031250 556.562500 -88.000000
point 39 233.625000 661.031250 -88.000000
point 40 41.437500 660.843750 -88.000000
point 41 -100.312500 771.968750 -88.000000
point 42 -96.937500 810.937500 -88.000000
point 43 -62.437500 762.031250 56.000000
point 44 120.875000 767.531250 136.000000
point 45 48.093750 767.093750 120.000000
# Verlassen von umacs mit ctrl-X-C
imagepoint 1 249 117
imagepoint 2 238 124
imagepoint 3 183 122
imagepoint 4 181 138
imagepoint 5 119 133
imagepoint 6 109 173
imagepoint 7 265 151
imagepoint 8 361 157
imagepoint 9 364 158
imagepoint 10 381 163
imagepoint 11 455 167
imagepoint 12 507 171
imagepoint 13 534 173
imagepoint 14 529 190
imagepoint 15 544 193
imagepoint 16 488 190
imagepoint 17 497 169
imagepoint 18 499 151
imagepoint 19 505 133
imagepoint 20 437 126
imagepoint 21 389 122
imagepoint 22 315 116
imagepoint 23 322 99
imagepoint 24 312 140
imagepoint 25 197 137
imagepoint 26 169 133
imagepoint 27 178 115
imagepoint 28 230 102
imagepoint 29 247 105
imagepoint 30 337 112
imagepoint 31 381 114
imagepoint 32 390 94
imagepoint 33 468 103
imagepoint 34 457 130
imagepoint 35 528 133
imagepoint 36 520 162
imagepoint 37 585 169
imagepoint 38 548 169
imagepoint 39 506 137
imagepoint 40 410 129
imagepoint 41 340 92
imagepoint 42 347 83
imagepoint 43 386 99
imagepoint 44 504 106
imagepoint 45 460 103
channel 0
gain -268439016
offset -277038608
uvoffset 0
calib_status 2
Calibration Data
0.552931921 0.043645239 0.008009932 351.011493523
0.054124827 -0.282566678 -0.030235412 309.789776375
0.000121412 -0.000083478 -0.000384610 1.000000000
Lens Distortion Parameters
Ucomp Vcomp
2.03860607994310e+01 -3.43334553287294e+01
1.12647458142566e+00 1.69947432121952e-01
-7.28612313239068e-01 1.18521323159028e+00
-4.09557073689629e-04 -1.59631543110517e-04
1.83528306429403e-04 -1.43193707703679e-03
4.85611194716187e-03 1.24440554271993e-03
4.07615599798360e-07 3.89633616729293e-08
-1.53621820499783e-08 6.89060344730839e-07
-1.36590153617876e-06 2.95095437289277e-06
-9.01754883540607e-06 -6.79533798966758e-06
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
Calibration Accuracy Data - all units are in 'pixels'
1st Col is observed image position
2nd Col is corrected image position
3rd Col is ideal image position
4th Col is difference between observed and ideal image positions
5th Col is difference between compensated and ideal image positions
1 249.000 249.143 251.128 -2.12775 -1.98501
Uncompensated Data
Mean Squared U error 2.148995
Mean Squared V error 0.835122
Compensated Data
Mean Squared U error 1.602255
Mean Squared V error 0.541317
Die ermittelte Kameramatrix (vergl. auch Formel 5.6) für Kamera 1 lautet also:
|
Für die unkompensierten u- und v- Koordinaten ergibt sich ein höherer mittlerer quadratischer Fehler in der Abweichung zu idealen Werten als für den Fall mit Berücksichtigung der Kompensation für die Linsenverzerrung.
Die Fehler (in Pixeln) sind recht klein, die Kalibrierung ist also für diese Kamera erfolgreich durchgrführt worden.
# Verlassen von umacs mit ctrl-X-C
imagepoint 1 147 124
imagepoint 2 168 131
imagepoint 3 121 129
imagepoint 4 120 144
imagepoint 5 70 140
imagepoint 6 65 175
imagepoint 7 194 157
imagepoint 8 285 163
imagepoint 9 289 163
imagepoint 10 272 168
imagepoint 11 348 173
imagepoint 12 406 178
imagepoint 13 436 181
imagepoint 14 431 199
imagepoint 15 425 202
imagepoint 16 362 197
imagepoint 17 369 176
imagepoint 18 369 156
imagepoint 19 374 137
imagepoint 20 301 130
imagepoint 21 252 127
imagepoint 22 182 122
imagepoint 23 187 106
imagepoint 24 182 145
imagepoint 25 85 142
imagepoint 26 62 139
imagepoint 27 69 123
imagepoint 28 109 111
imagepoint 29 74 112
imagepoint 30 151 117
imagepoint 31 192 119
imagepoint 32 199 99
imagepoint 33 276 106
imagepoint 34 268 133
imagepoint 35 346 136
imagepoint 36 341 167
imagepoint 37 419 175
imagepoint 38 329 174
imagepoint 39 278 140
imagepoint 40 181 132
imagepoint 41 116 98
imagepoint 42 121 89
imagepoint 43 102 104
imagepoint 44 178 107
imagepoint 45 140 105
channel 0
gain -268439016
offset -277038608
uvoffset 0
calib_status 2
Calibration Data
0.446308123 0.026567568 -0.260531256 115.713461713
0.013048250 -0.275414834 -0.039096409 306.967096760
-0.000150457 -0.000093997 -0.000391016 1.000000000
Lens Distortion Parameters
Ucomp Vcomp
7.40847754796773e+00 7.24054619910675e+00
1.03394493471750e+00 1.14520314457303e-01
-2.02925897804731e-01 6.18317667225794e-01
-5.81956303613890e-04 -1.44951954946166e-04
1.36338197708643e-03 -9.84301591884372e-04
4.44882718357835e-04 3.71358606048348e-03
5.15619029352175e-07 3.04789780004741e-08
1.60228820749051e-06 6.63364394556838e-07
-7.68042610447870e-06 2.08049874119473e-06
2.87379984852855e-06 -1.00881006369262e-05
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
0.00000000000000e+00 0.00000000000000e+00
Calibration Accuracy Data - all units are in 'pixels'
1st Col is observed image position
2nd Col is corrected image position
3rd Col is ideal image position
4th Col is difference between observed and ideal image positions
5th Col is difference between compensated and ideal image positions
1 147.000 147.403 149.556 -2.55587 -2.15291
Mean Squared U error 2.797268
Mean Squared V error 0.678343
Compensated Data
Mean Squared U error 2.120540
Mean Squared V error 0.454559
0.446308123 0.026567568 -0.260531256 115.713461713
-0.000150457 -0.000093997 -0.000391016 1.000000000
Die ermittelte Kameramatrix (vergl. auch Formel 5.6) für Kamera 2 lautet also:
|
Für die unkompensierten u- und v- Koordinaten ergibt sich ein höherer mittlerer quadratischer Fehler in der Abweichung zu idealen Werten als für den Fall mit Berücksichtigung der Kompensation für die Linsenverzerrung.
Die Fehler (in Pixeln) sind für diese Kamera etwas größer als für Kamera 1, aber in ihrer Größenordnung ebenfalls recht klein, die Kalibrierung ist also auch für diese Kamera erfolgreich gewesen.
Um eine Überprüfung der Genauigkeit der Stereo-Bildverarbeitung vornehmen zu können ist eine Kontrollfunktion in das Steuerprogramm integriert worden. Diese Kontrollfunktion liest ein 3-D-Koordinatenfile ein und führt eine Eichkontrollfahrt mit am Industrieroboter befestigter Eichmarke durch. An jedem spezifizierten Punkt der Eichkontrollfahrt wird die Position des TCP mit der Position, die die Bildverarbeitung generiert hat verglichen. Die so gewonnenen Daten werden in folgendem Format in eine Kontrolldatei geschrieben:
x-Position, y-Position, z-Position des TCP, x-Position, y-Position, z-Position, beobachtet durch die Bildverarbeitung, delta-x delta-y, delta-z Differenz zwischen beobachteter und realer 3-D-Position.
Die Eichkontrollfahrt wurde so ,,geteacht'', daß ein möglichst großer Bereich des Arbeitsraums überstrichen wird.
# Verlassen von umacs mit ctrl-X-C
# point N X Y Z
point 1 -112.250000 814.906250 0.000000
point 2 -112.062500 694.687500 0.000000
point 3 -117.750000 558.937500 0.000000
point 4 65.687500 550.843750 0.000000
point 5 217.781250 551.187500 0.000000
point 6 352.875000 551.656250 0.000000
point 7 359.187500 678.875000 0.000000
point 8 190.031250 781.312500 0.000000
point 9 -267.093750 780.437500 0.000000
point 10 -268.375000 700.156250 0.000000
point 11 -268.187500 564.187500 0.000000
point 12 -270.812500 468.406250 0.000000
point 13 -319.531250 543.218750 -152.000000
point 14 -175.906250 542.687500 -152.000000
point 15 -31.625000 541.218750 -152.000000
point 16 420.437500 524.218750 -152.000000
point 17 411.187500 666.031250 -192.000000
point 18 415.593750 484.468750 -296.000000
point 19 406.125000 485.250000 -400.000000
point 20 180.187500 486.312500 -416.000000
point 21 182.406250 573.750000 -416.000000
point 22 71.468750 604.437500 -416.000000
point 23 -104.437500 604.125000 -416.000000
point 24 -243.218750 607.156250 -424.000000
point 25 -412.375000 606.406250 -424.000000
point 26 -421.218750 518.062500 -424.000000
point 27 -416.218750 469.187500 -424.000000
point 28 -418.125000 470.250000 -504.000000
point 29 -421.093750 510.281250 -504.000000
point 30 -307.843750 518.968750 -504.000000
point 31 -147.937500 519.187500 -504.000000
point 32 -147.250000 607.343750 -504.000000
point 33 48.906250 608.593750 -496.000000
point 34 168.781250 608.593750 -496.000000
point 35 326.062500 568.781250 -512.000000
point 36 250.968750 571.562500 -576.000000
point 37 -47.437500 570.406250 -576.000000
point 38 -135.968750 575.093750 -568.000000
point 39 -129.312500 604.656250 -568.000000
point 40 -185.812500 604.281250 -568.000000
point 41 -234.687500 603.843750 -568.000000
x-TCP | y-TCP | z-TCP | x-Bildv. | y-Bildv. | z-Bildv. | delta x | delta y | delta z |
-114.250000 | 815.875000 | 0.000000 | -103.093216 | 818.134277 | 1.760492 | -11.156785 | -2.259307 | -1.760492 |
-111.843750 | 695.031250 | 0.000000 | -101.388710 | 692.176147 | 2.163613 | -10.455039 | 2.855117 | -2.163613 |
-119.937500 | 559.375000 | 0.000000 | -112.342514 | 556.410767 | 5.509451 | -7.594988 | 2.964230 | -5.509451 |
63.812500 | 551.562500 | 0.000000 | 75.086899 | 557.399231 | 10.664970 | -11.274396 | -5.836723 | -10.664970 |
216.156250 | 556.843750 | 0.000000 | 233.514603 | 555.421936 | 6.571251 | -17.358356 | 1.421825 | -6.571251 |
350.656250 | 549.562500 | 0.000000 | 366.994110 | 553.872803 | 3.987822 | -16.337862 | -4.310306 | -3.987822 |
359.968750 | 677.406250 | 0.000000 | 375.842255 | 685.683960 | 1.381896 | -15.873494 | -8.277735 | -1.381896 |
189.500000 | 780.031250 | 0.000000 | 202.477402 | 785.786255 | 2.177386 | -12.977406 | -5.754975 | -2.177386 |
-267.718750 | 778.281250 | 0.000000 | -257.351135 | 780.835876 | -13.975016 | -10.367613 | -2.554632 | 13.975016 |
-264.062500 | 696.906250 | 0.000000 | -254.625504 | 704.750671 | -6.221084 | -9.437004 | -7.844437 | 6.221084 |
-264.031250 | 561.031250 | 0.000000 | -262.732483 | 568.483093 | -12.643683 | -1.298755 | -7.451835 | 12.643683 |
-271.875000 | 472.812500 | 0.000000 | -269.506622 | 469.179565 | -15.839537 | -2.368384 | 3.632948 | 15.839537 |
-319.062500 | 545.343750 | -152.000000 | -310.118408 | 545.232544 | -165.789932 | -8.944103 | 0.111235 | 13.789927 |
-174.375000 | 544.593750 | -152.000000 | -167.943878 | 549.536011 | -161.588882 | -6.431128 | -4.942245 | 9.588888 |
-27.000000 | 541.718750 | -152.000000 | -18.077660 | 547.957947 | -151.487061 | -8.922340 | -6.239174 | -0.512935 |
416.093750 | 523.812500 | -152.000000 | 253.706680 | 485.672607 | 184.379242 | 162.387070 | 38.139900 | -336.379242 |
410.500000 | 667.000000 | -192.000000 | 275.158783 | 600.167114 | 145.172440 | 135.341232 | 66.832863 | -337.172455 |
415.812500 | 481.968750 | -296.000000 | 433.998810 | 491.547363 | -306.641357 | -18.186319 | -9.578629 | 10.641348 |
407.812500 | 481.906250 | -400.000000 | 421.244812 | 492.472900 | -408.052185 | -13.432316 | -10.566651 | 8.052184 |
176.343750 | 488.437500 | -416.000000 | 207.541367 | 494.419556 | -423.525421 | -31.197615 | -5.982063 | 7.525408 |
183.843750 | 572.625000 | -416.000000 | 203.385437 | 582.649292 | -418.789276 | -19.541691 | -10.024262 | 2.789268 |
74.093750 | 603.843750 | -416.000000 | 92.000610 | 607.041748 | -418.453522 | -17.906857 | -3.197990 | 2.453507 |
-99.718750 | 602.843750 | -416.000000 | -88.360352 | 609.736816 | -418.639221 | -11.358397 | -6.893095 | 2.639207 |
-240.218750 | 602.625000 | -424.000000 | -227.471527 | 613.337524 | -427.329865 | -12.747218 | -10.712549 | 3.329864 |
-410.031250 | 605.843750 | -424.000000 | -259.168121 | 611.468140 | -421.509827 | -150.863144 | -5.624363 | -2.490165 |
-416.343750 | 517.562500 | -424.000000 | -409.044708 | 526.253662 | -424.470398 | -7.299049 | -8.691154 | 0.470391 |
-419.750000 | 468.687500 | -424.000000 | -403.552582 | 473.991058 | -425.824280 | -16.197416 | -5.303555 | 1.824266 |
-423.218750 | 472.906250 | -504.000000 | -399.430817 | 477.746948 | -503.081451 | -23.787949 | -4.840689 | -0.918538 |
-416.218750 | 507.875000 | -504.000000 | -403.639374 | 516.522034 | -500.633545 | -12.579384 | -8.647054 | -3.366456 |
-304.125000 | 515.375000 | -504.000000 | -297.473450 | 521.612549 | -507.316132 | -6.651555 | -6.237532 | 3.316128 |
-151.937500 | 523.062500 | -504.000000 | -126.670410 | 527.449280 | -508.239014 | -25.267088 | -4.386767 | 4.239003 |
-151.781250 | 610.937500 | -504.000000 | -127.966698 | 615.857666 | -503.628143 | -23.814550 | -4.920194 | -0.371870 |
46.375000 | 607.656250 | -496.000000 | 62.609489 | 616.303955 | -497.781586 | -16.234488 | -8.647725 | 1.781587 |
168.937500 | 609.937500 | -496.000000 | 190.455978 | 616.509094 | -498.065033 | -21.518471 | -6.571594 | 2.065023 |
326.281250 | 566.312500 | -512.000000 | 341.957336 | 573.728882 | -513.543213 | -15.676096 | -7.416364 | 1.543213 |
249.187500 | 570.062500 | -576.000000 | 271.948029 | 577.986633 | -574.081543 | -22.760523 | -7.924148 | -1.918467 |
-47.468750 | 570.437500 | -576.000000 | -25.691507 | 576.728271 | -579.450684 | -21.777243 | -6.290779 | 3.450674 |
-131.656250 | 572.937500 | -568.000000 | -120.436165 | 582.869812 | -560.586853 | -11.220088 | -9.932330 | -7.413172 |
-127.750000 | 606.562500 | -568.000000 | -114.279556 | 609.690552 | -563.836792 | -13.470443 | -3.128064 | -4.163236 |
-183.875000 | 606.625000 | -568.000000 | -162.174088 | 607.520386 | -565.363464 | -21.700912 | -0.895364 | -2.636565 |
-232.156250 | 598.312500 | -568.000000 | -215.490295 | 607.215454 | -559.841187 | -16.665958 | -8.902978 | -8.158792 |
deltax = -9.876mm
deltay = -2.557mm
deltaz = -14.916mm
Entfernt man die drei Werte mit den offensichtlichen Ausreißern (wahrscheinlich Korrespondenzfehler)
erhält man:
deltax = -14.52mm
deltay = -5.37mm
deltaz = -1.697mm
Diese Ergebnisse bestätigen die erfolgreiche 2-D-Kalibrierung auch für das 3-D-Stereo-Bildverarbeitungssystem.
Die realisierten Verfahren zur Kamerakalibrierung und Fuzzy-Kollisionsvermeidung ermöglichen den Einsatz dieser Module für einfache Kollisionsvermeidungsprobleme. Die in der Aufgabenstellung geforderte Funktionalität konnte mit den Mittel der zur Verfügung stehenden Hardware erreicht werden. Insbesondere ist durch die Integration des mit FolToC generierten Fuzzy-Reglers eine hochflexible Möglichkeit der Modifikation verwendeter Fuzzy-Kollisionsvermeidungsstrategien geschaffen worden.
Folgende Problemstellung soll aber nicht unerwähnt bleiben:
Denkbare Erweiterungs- und Verbesserungsmöglichkeiten des realisierten Konzeptes sind beispielsweise:
typedef struct {
int idcode;
char version[8];
int channel; /* Channel on PIP board */
int gain, offset; /* Gain and offset for the channel */
int uvoffset; /* UV offset in using calibration matrix
* and lens compensation data */
int calibstatus; /* Flag indicating type of calibration data
* present */
double gamma[5]; /* For grey scale correction if needed */
double calib.matrix[3][4]; /* Calibration matrix */
double Ucomp[18]; /* Coeffs of lens compensation polynomial*/
double Vcomp[18]; /* Coeffs of lens compensation polynomial*/
} CAMERA;
----------------------------------------------------
V M E - B U SV S B - B U S
--------------------------
Ethernetkarte:
-------------
ET 001FE 800 000 - FE8FF FFF
Grafikkarte:
-----------
GRC 06FC 000 000 - FC1FF FFF
FF F00 000 - FFFF7 FFF
FF FF4 000 - FFFF4 FFF
Bildverarbeitung 1.Block:
------------------------
IC 4094 000 000 -
THINC0 000 000 -
VECTD0 000 000 -VSB:FD 000 000 -
Bildverarbeitung 2.Block:
------------------------
IC 4084 000 000 -
THINA0 000 000 -
VECTB0 000 000 -VSB:FB 000 000 -
Alle Adressen hexadezimal.
/h0/ic40/startic40_1
/h0/ic40/startic40_2
*go "-c=shell icginit" -s=ic_1
*/h0/ic40/cmds/imenu -k
*go "-c=shell icginit" -s=ic_2
chd /h0/vectex/cmds
chx /h0/vectex/cmds
echo test1
thin_ini_1 2 d s -f -a
thin_ini_2 2 d s -f -a
echo test2
chd /h0/ic40
chx /h0/ic40
echo 775 -n n -n !/h0/ic40/cmds/imenu -k
echo 775 -n n -n !/h0/ic40/cmds/imenu -k -b=84000000
Active Vision, 5-1
CCD-Kameras, 4-5
DAC, Digital Analog Converter, 2-1
EIA, 2-1
Gauß'scher Tiefpaß, 4-7
homogene Koordinaten, 5-2
KI, 4-0
Laplace-Filter, 4-7
Mean of Maximum, 7-6
Nordgradient, 4-7
Optischer Fluß, 5-1
Pipeline, 2-1
Robertsoperator, 4-7
Singletons, 7-6
TCP, 5-4
VAL-II Roboter Programmiersprache, 3-0
XEMACS, 2-2
1 Der VME-Bus ist ein weit verbreitetes Backplane-Bussystem, das von einem Firmenkonsortium angeführt von Motorola entwickelt wurde, standardisiert als IEEE 1014
2 Die Funktionalität eines Framegrabbers, einer Kantenverstärkungskarte und einer Vektorisierungskarte werden in den Abschnitten 4.6, 4.7 und 4.8 erläutert.
3 Die Systemkonsole ist für Bootvorgänge unbedingt erforderlich. Nach erfolgreichem Bootvorgang kann der Rechner über das Netzwerk oder eine grafische Benutzeroberfläche bedient werden.
4 EIA= Electronics Industry Association
5 Der Begriff LUT wird im Abschnitt 4.6 erläutert.
6 Parallele Datenverarbeitung wird unterschieden in symmetrisches Multiprocessing, d.h. mehrere gleiche Prozessoren verarbeiten gleichberechtigt Daten, und pipeline-artiges Multiprocessing, d.h. spezialisierte Prozessoren arbeiten nacheinander Teile der Aufgabe ab.
7 Digital Analog Converter, Digital-Analog-Wandler
8 Red Green Blue
9 Ein zweiter SPARC-Prozessor ist optional auf der Hauptplatine installierbar.
10 ``K'' wird häufig als Synonym für Tausend verwendet. ``K'' ist hier eine Anspielung auf die 68000 Prozessorfamilie, die auch mit 68K abgekürzt wird.
11 OS9 als Betriebssystem ist ohne Modifikation aus ROM-Modulen ablauffähig
12 OS9 ist erst ab Version 2.4 Jahr 2000 fähig, so daß ein upgrade vorgesehen werden muß. Ein update ist also erforderlich!
13 Auf diese Weise ist der Kommunikations-Device-Treiber implementiert, der im Abschnitt 2.2.2.1 beschrieben ist.
14 Flash Eproms sind EEPROM's. Electrical Eraseable Programable Read Only Memory
15 OS9 arbeitet ebenso wie UNIX device-orientiert, d.h. alle Hardware-Ressourcen (Speicher, Schnittstellen, Massenspeicher, Netzwerkinterfaces) werden über Devicetreiber angesprochen, die unter UNIX im Dateisystem unter /dev und OS9 im Modulverzeichnis (anzeigbar mit ``mdir'') als Module abgelegt sind.
16 Beim GNU-Projekt (selbstbezügliche Definition von GNU: GNU is not UNIX) der Free Software Foundation handelt es sich um eine Sammlung hochwertiger, freier Software. Ziel der Free Software Foundation (FSF) ist es, ein UNIX-kompatibles Betriebssystem zu entwickeln, das nur aus freier Software besteht. Frei bedeutet im Sinne der FSF, da das System der GNU General Public License (GPL) unterliegt, die unter anderem fordert, daß bei der Weitergabe der Software grundsätzlich auch der komplette Quelltext zur Verfügung gestellt werden muß. Die GNU-Programme zeichnen sich durch außergewöhnliche Portabilität und Funktionalität aus. Einige der wichtigsten GNU-Programme sind auf OS9 portiert worden und stehen auf FTP -Servern zum Download zur Verfügung [3].
17 Der GNU-C-Crosscompiler wird abgekürzt mit ``xgcc'' bezeichnet.
18 Der Nachfolger der 68040 CPU ist die 68060 CPU mit erweitertem Befehlssatz, integriertem Cache und Taktfrequenzen von bis zu 80MHz. Mit dieser CPU bestückten VME-BUS Boards sind die momentan schnellsten 68XXX basierten Alternativen zu 68040 CPU's.
19 Metrowerks Crosscompiler laufen auf Windows als Host-System, Microwares Lösung ist für SUN und PC-Plattformen erhältlich.
20 Compileroptionen
21 Walter Hunt, der Entwickler des xgcc-OS9-Ports, konnte den Port aus beruflichen Gründen nicht beenden. Er hat freundlicherweise den Source-Tree über das OS9-FTP Archiv[3] frei zur Verfügung gestellt.
22 Diskussionen zum Thema OS9 finden in der Newsgroup comp.os.os9 statt.
23 Patches sind Änderungen an Quellcodeprojekten die in Form von Differenzdateien veröffentlicht werden, welche mit dem ``diff''-Utility erzeugt werden um mit dem ``patch''-Kommando auf die originalen Quellen angewendet zu werden. Ein Patch verhindert, daß ein Entwickler jedesmal bei einer Änderung eine komplette neue Version eines Quellpaketes von einem FTP-Server laden muß. Nur die relativ kleine Differenz zu der vorherigen Version wird in der Form eines Patches neu geladen.
24 Compiler werden ``gebaut''.
25 Die Binutilities sind Binärpogramme, die der gcc zur Unterstützung benötigt. Beispielsweise handelt es sich um den GNU-Assembler gas, den GNU-Linker ld, den Archiver ar und um das ranlib-tool, welches zur Generierung von Libraries aus mehreren OBJ-Files benötigt wird.
26 Insgesamt sollte für den Build (das Erzeugen) des gcc-Crosscompilers ca. 100 MB Festplattenplatz zur Verfügung stehen. (Sourcen, Objectfiles und Binaries)
27 Ebenso wie der Crosscompiler müssen die Binutilities als Crossassembler, Crosslinker usw. konfiguriert werden, weil auch sie auf dem Host-System ablaufen sollen, um den Code für das Targetsystem zu erzeugen. Nur das Make-Kommando des Host-Systems kann ohne Modifikationen verwendet werden.
28 File Transfer Protocol
29 Die configure-Scripte erfordern die bash, die Bourne Again SHell
30 Bahnprogrammierung vom Industrieroboter mittels Anfahren einzelner Bahnpunkte bezeichnet man als ``teachen''. Das teachen der Bahnpunkte erfolgt hier mittels eines 3-D-Kraft-Momentensensors (Steuerkugel). Der Aufbau und die Ansteuerung dieser Steuerkugel wird in [11] ausführlich erläutert.
31 Bildverarbeitung beschäftigt sich nicht wie die Bildbearbeitung mit der der einfachen Veränderung von Pixelbildern, sondern mit der Aufbereitung und Verarbeitung von Bildern zur Informationsgewinnung.
32 Digitalisierung d.h. ``grabben'' eines Bildes. Video-Bilddigitalisierer werden mit dem Begriff Framegrabber bezeichnet.
33 Das Lichtschnittverfahren ermöglicht die Extraktion von 3-D-Informationen aus einem einzelnen Kamerabild. Ein schmales Licht- (oder Schatten-) Band beleuchtet ein 3-D-Objekt in einem bekannten Winkel zum Kameraobjektiv. Aus dem gekrümmten Verlauf der reflektierten Licht- bzw. Schattenlinie können Rückschlüsse auf Höhenunterschiede auf dem zu vermessenden Objekt gewonnen werden.
34 Für die Farbbildverarbeitung werden Framegrabber eingesetzt, die jeweils die Grauwerte des Rot-, Grün- und Blau-Anteils eines Bildpunktes digitalisieren. Diese Framegrabber speichern die Bildinformation meist in 24 Bit (3*8 Bit für die Grundfarben) pro Bildpunkt (Pixel) ab.
35 ADC: Analog Digital Converter, Analog-Digitalwandler
36 Ein Standard-Videosignal wird nacheinander in zwei Halbbildern übertragen, von den eines die ungeraden Bildzeilen und das andere die geraden Bildzeilen enthält. Diese Verfahren wird auch als ,,Interlaced''-Übertragung bezeichnet und vermindert das sichtbare Flimmern von Videobildern auf Monitoren. Die ,,Interlaced''-Bildwiederholrate von 50 Hz würde bei gleichem Datenstrom einer ,,Noninterlaced''-Bildwiederholrate von 25 Hz entsprechen.
37 Um zweistellige Operationen, also beliebige mathematische- oder logische Verknüpfungen durchführen zu können benötigt die LUT bereit 64kB Speicher.
38 FIFO: First In First Out ist eine bestimmte Weise einen Puffer oder einen Stack zu organisieren.
39 Ein Datenwort ist auf Motorola 68K-Prozessoren 16Bit groß, d.h. das Symbol-Buffer hat eine Größe von 4kByte.
40 Die Wortlänge der Motorola 68K-Prozessoren beträgt 16 Bit, d.h. ein longword ist 32 Bit lang. Bei solchen Longword-Zugriffen muß darauf geachtet werden, daß auf passende Adressen zugegriffen wird, also Adressen die ein vielfaches von 32 darstellen. Solche Zugriffseinschränkungen bezeichnet man auch als ,,Alignment''. Zugriffe mit inkorrektem ,,Alignment'' Führen zur Fehlermeldung ,,Bus Error2''.
41 Eine Datenmenge von bis zu 160 Bytes. (Die Koordinaten für Xmin,Ymin, Xmax und Ymax werden in 16Bit Integer-Variablen gespeichert.)
42 Z.B. nach Einschalten des Rechners oder einem Systemreset.
43 Als Lichtquelle werden für solche Zwecke häufig Laser angewendet, die sich wegen der Parallelität und der Kohärenz des Laserlichts gut eignen.
44 Der optische Fluß ist in Analogie zur Strömungsmechanik als Zusammenhang zwischen ,,Strömungen'' von Grauwerten und Bewegungen definiert. Da sich der Grauwert als Funktion von Ort und Zeit (x,y,t) bei konstanter Beleuchtung nur bei Bewegung ändern kann, ist in Analogie zur Strömungsmechanik das totale Differential des Grauwertes f(x,y,t) gleich Null: df(x,y,t) = [(df)/( dx)]dx+[(df)/( dx)]dy+[(df)/( dt)]dt = 0
45 Die Disparität ist die vektorielle Bildpositionsdifferenz zwischen einem Bildpunkt auf einem 2-D-Sensor und seinem korrespondierendem Punkt auf einem zweiten 2-D-Sensor.
46 Für Anwendungen in der Computergrafik ergeben sich weitere Vorteile:
47 Auf die Kompensation der Linsenverzeichnung wird im Abschnitt 5.2.6 eingegangen.
48 Es handelt sich um ein überbestimmtes Gleichungssystem, weil A keine quadratische Matrix ist. (Nichtquadratische Matrizen haben keine Inverse).
Für eine quadratische Matrix M ließen sich die Parameter B einfach durch
| (1.1) |
| (1.2) |
49 In der VIP-Originaldokumentation sind fehlerhafterweise Parameter vertauscht.
50 Die automatische Korrespondenzauflösung während einer solchen Eichung ist schwierig, da zu diesem Zeitpunkt noch keine Transformationsmatrix bekannt ist.
51 Einmal für jede Kamera, beide Kameras werden jeweils einzeln geeicht. Für beide Eichvorgänge werden aber die gleichen 3-D-Koordinaten verwendet, was nicht notwendigerweise der Fall sein muß.
52 Die Eichmarke kann nicht direkt im TCP befestigt werden, da der im TCP befestigte Greifer die Sicht auf die Eichmarke der gewählten Kamerapositionen verhindern würde. Ein konstanter Koordinaten-Offset ist für die Eichung aber unkritisch, da ein Zusammenhang von einem extremen Punkt des Roboters und der Kameramatrix M hergestellt wird. Der gewählte Punkt am Greifer des Roboters stellt auch für die Kollisionsvermeidung den kritischen Punkt dar, an den Annäherungen verhindert werden müssen (siehe Abbildung 5.4).
53 Im verwendeten Makefile des Kontrollprogramms sind die Abhängikeiten vom Fuzzy-Regler-Modell beschrieben.
Nach einer Änderung der entsprechenden ,,.fol''- Fuzzy-Modelldateien stößt make einen Aufruf von FolToC an, um dann die veränderten C-Dateien neu zu compilieren und zu linken.