# HG changeset patch # User schnalke@localhost.localdomain # Date 1210171469 -7200 # Node ID d7564f4705a9bb2a69b4ab5b08935ca8b8df3837 # Parent e1081de0b981efdc7f0b57c821cdee137c074b86 die verwendete Technologie beschrieben diff -r e1081de0b981 -r d7564f4705a9 das-projekt.tex --- a/das-projekt.tex Wed May 07 16:42:14 2008 +0200 +++ b/das-projekt.tex Wed May 07 16:44:29 2008 +0200 @@ -27,35 +27,120 @@ Kombiniert man nun beide Welten, DSP und Standard Computer, erhält man DSP-ähnliche Applikationen unter einem Linux Betriebssystem gekoppelt mit einer enormen Rechenleistung der nächsten Generation. +Im Laufe des Praktikums soll ein Roboter Controller Framework entstehen, welches auf der Cell- +Architektur von IBM basieren soll. Momentan werden in der Industrie Roboter über DSPs +angesteuert, welche nur schwierig programmiert werden können, da spezielle Kenntnisse nötig sind. +Grundgedanke dieses Projektes ist es, dieses Manko durch den Einsatz der SPUs des Cell- +Prozessors aufzuheben. Da die Cell-Architektur die Programmiersprache C und Linux unterstützt, +können so auf einfachem Wege schnell Robotersteuerungen entwickelt werden ohne spezielle DSP +und FPGA Entwicklung zu betreiben. Dies würde den Zeitfaktor neuer Entwicklung dramatisch +senken. +Ein weiterer Aspekt der Cell-Architektur ist die extrem hohe Skalierbarkeit und die äußerst geringe +Latenz dank mehrerer Prozessorelemente auf einem Chip. Da eine SPU das vielfache eines DSPs +leistet und bis zu acht SPUs auf einem Cell-Core Platz finden ist es denkbar komplette +Fertigungsstraßen durch dieses System zu ersetzen. +Kombiniert man nun beide Welten, DSP und Standard Computer, erhält man DSP-ähnliche +Applikationen unter einem Linux Betriebssystem gekoppelt mit einer enormen Rechenleistung der +nächsten Generation. + + \section{Verwendete Technologie} -Unser Entwicklungssystem war ein angepasster \emph{QS21}\footnote{FIXME} % FIXME -Cell/B.E. Blade-Server. An diesem waren vier Lynx6-Roboterarme von Lynxmotion\footnote{http://lynxmotion.com} angeschlossen, und außer dem noch eine \emph{myBlueFOX} Kamera von \emph{Matrix Vision}\footnote{http://matrix-vision.com}. Als Betriebsystem lief ein Fedora 7. +Unser Entwicklungssystem war ein angepasster IBM \emph{QS21}\footnote{beherbergt zwei Cell-Prozessoren mit je einem Gigabyte Arbeitsspeicher} Cell/B.E. Blade-Server. An diesem waren vier Lynx6-Roboterarme von Lynxmotion\footnote{http://lynxmotion.com} angeschlossen, und außer dem noch eine \emph{mvBlueFOX} Kamera von \emph{Matrix Vision}\footnote{http://matrix-vision.com}. Als Betriebsystem lief ein \emph{Fedora 7}\footnote{http://fedoraproject.org}. -\subsection{Der Cell-Prozessor} +\subsection{Cell-Prozessor} Ausgeschrieben \emph{Cell Broadband Engine Architecture} genannt, werde ich hier meist die Kurzformen \emph{Cell/B.E.} oder einfach nur \emph{Cell-Prozessor} verwenden. Dieser Chip wurde, zwischen 2001 und 2005, in einer Kooperation von Sony, Toshiba und IBM entwickelt. Der Hauptteil der Entwicklungsarbeit wurde dabei von \ibm\ übernommen. +\begin{figure}[hbt] + \centering + \label{fig:cellbe-chip} + \includegraphics[width=0.6\textwidth]{pics/cellbe-chip.png} + \caption{Der Cell/B.E. Chip} +\end{figure} + Bei der Cell/B.E. handelt es sich um eine heterogene Multicore-Architektur. Das bedeutet, dass der Prozessor aus mehreren Kernen besteht, die (im Gegensatz zu den x86-Multicores aber) aus verschiedenen Kerntypen bestehen. Der Cell verfügt über einen PowerPC-Kern (PPE/PPU) und acht sogenannten Synergistic Prozessor Elemente (SPE/SPU). Die PPE ist ein vollwertiger 64-bit PowerPC Kern. Er kann in herkömmlicher Weise verwendet werden, so kann darauf zum Beispiel ein Betriebsystem oder eine beliebige Anwendung laufen. Die SPEs dagegen sind für große Rechenleistung optimiert, Datentransfer-Operationen sind eher langsam. +\begin{figure}[hbt] + \centering + \label{fig:cellbe-structure} + \includegraphics[width=0.8\textwidth]{pics/cellbe-structure.png} + \caption{Schematischer Aufbau der Cell/B.E.} +\end{figure} + Üblicherweise übernimmt die PPE die Kontrolle und verteilt die Arbeit auf die einzelnen SPEs die dann unabhängig von einander arbeiten. Die Ergebnisse fließen dann an die PPE zurück. +Zur Kommunikation zwischen den einzelnen Kernen stehen drei verschiedene Kommunikationsarten zur Verfügung, welche alle über den Element Interconnect Bus (EIB) abgewickelt werden. +\begin{itemize} +\item \textbf{Mailboxen} Sie sind Hardwareimplementierungen von Nachrichtenwarteschlangen. Jede SPE hat drei davon. Nachrichten haben eine feste Größe von 32 Bit. +\item \textbf{Signale} Wie auch Nachrichten umfasst ein Signal ebenfalls 32 Bit, jedoch existieren keine Warteschlangen, so dass pro Signalkanal genau ein definierter Zustand aktiv sein kann. Jede SPE hat zwei Signalkanäle. +\item \textbf{DMA-Transfers} Hierbei wird den SPEs ermöglicht auf den allgemeinen Hauptspeicher zuzugreifen, ebenso kann die PPE so auf den lokalen Speicher einer SPE zugreifen. DMA\footnote{Direct Memory Access}-Transfers können mit bis zu 16 Kilobyte an Daten übertragen werden. Die Transfers werden vom Memory Flow Controller (MFC) der SPE durchgeführt und können somit parallel zu den aktuellen Instruktionen ablaufen. +\end{itemize} +Für DMA-Transfers empfiehlt es sich, die Technik \emph{Double-Buffering} einzusetzen, bei der die nächsten Daten schon geholt werden, während mit den aktuellen noch gerechnet wird. Auf diese Weise kann die SPE nahezu voll ausgelastet werden. +Mailboxen und Signale werden üblicherweise vor allem für die Übertragung von Statusinformatinen verwendet. -\subsection{Die Roboterarme} \label{robotarme} +Der Cell ist ein sehr leistungsstarker Prozessor mit einer Maximalleistung von 230 GigaFLOPS\footnote{FLoating point Operations Per Second --- übliches Maß zum Vergleich von Prozessorleistung}. +Er wird momentan vor allem in Sonys \emph{Playstation 3} und IBM Blade-Servern verbaut. Aber auch für Supercomputer, wie dem \emph{IBM Roadrunner}, der dieses Jahr noch fertig gestellt werden und zum ersten Mal ein PetaFLOP erreichen soll, wird er eingesetzt. Zudem plant die IBM ihn künftig in ihre Mainframes zu integrieren. + + + +\subsection{Roboterarme} \label{robotarme} + +Die von uns verwendeten Roboterarme sind das Modell \emph{Lynx6} vom Hersteller Lynxmotion. Die Roboter sind aus Lexan gefertigt und werden als Bausatz geliefert. Sie sind etwa 20 Zentimeter hoch und 40 lang. + +\begin{figure}[hbt] + \centering + \label{fig:lynx6} + \includegraphics[width=0.6\textwidth]{pics/lynx6.jpg} + \caption{Die von uns verwendeten Roboterarme} +\end{figure} + +Sie haben fünf Freiheitsgrade (Basisdrehung, Schulter, Ellenbogen, Handgelenk, Handdrehung) und damit einen weniger als gängige Industrieroboter oder der menschliche Arm. Die Zahl ``6'' in der Modellbezeichnung rührt von einem sechsten Gelenk her, das jedoch nur ein Greifer ist und damit keinen weiteren Freiheitsgrad darstellt. + +Die Bewegung der Gelenke wird von Servomotoren\footnote{Motoren die bestimmte Positionen anfahren und halten können. Häufig im Modellbau eingesetzt.} (kurz ``Servos'') übernommen. + +Angeschlossen sind die Roboterarme über USB am Cell-Blade und per serieller Schnittstelle am Roboter, dazwischen sitzt ein USB-zu-Seriell-Konverter. + + + +\subsection{Kamera} + +Die optische Komponente wurde erst kurz vor meiner Zeit in das Projekt eingeführt. Anfangs wurde noch eine handelsübliche Webcam verwendet. Später wurde diese durch eine professionelle CCD-Kamera der Firma \emph{Matrix Vision} ersetzt. Bei dieser handelt es sich um eine \emph{mvBlueFOX}, die 100 Mal pro Sekunde ein Schwarz-Weiß-Bild mit ein einer Auflösung von 640x480 Pixeln liefert. + +\begin{figure}[hbt] + \centering + \label{fig:mvbluefox} + \includegraphics[width=6cm]{pics/mvbluefox.jpg} + \caption{Unsere Kamera} +\end{figure} + +Zur Bilderkennung verwendeten wir die Open Source Bibliothek \emph{OpenCV}, welche auf den Cell portiert und dafür optimiert ist. + + +% FIXME: Echtzeit-Umgebung \section{Ausgangssituation} +Als ich meine Arbeit antrat waren folgende Dinge bereits vorhanden. +\begin{itemize} + \item Framework das die ganze low-level Kommunikation zwischen den SPEs regelt + \item Scheduler der die einzelnen Programmmodule verwaltet und die Echtzeiteinhaltung kontrolliert + \item Inverse Kinematik für den Roboterarm + \item Programme mit statischen Bewegungsanweisungen für den Roboter + \item Einfache dynamische Bewegungen anhand von Gesichtserkennung mit OpenCV +\end{itemize} -\section{Mein Projektteil} +Die alten Arbeiten meiner Vorgänger waren abgeschlossen und mein Teampartner, der schon ein halbes Jahr bei IBM war und während dieser Zeit das Framework ausgearbeitet hatte, feilte daran nur noch herum. Somit fand mit mir eine Art Neubeginn statt. Das Ziel war die \emph{Automatica} eine Messe für Automatisierungstechnik in München. Dafür sollte ein neuer Showcase erstellt werden. +Innerhalb unseres Teams hatte jeder ein Fachgebiet, für das er sich zuständig fühlte. Jedoch arbeiteten wir natürlich gemeinsam am Ganzen und in einer so kleinen Gruppe ist es normal, dass jeder an beliebiger Stelle anpackt wenn es erforderlich ist. Dennoch formierte es sich so, dass mein Teampartner hauptsächlich für das (sein) Framework und Installationen aller Art verantworklich war, zudem hatte er als der mit der meisten Erfahrung die Rolle des Projektleiters inne. Unsere Mitarbeiterin, die einen Monat nach mir dazu stieß, kümmerte sich um die visuelle Thematik. Ich übernahm den Teil der eigentlichen Anwendungsprogrammierung. Das heißt, dass ich die Arbeit der Anderen als Basis nahm um darauf die Anwendungsteile zu konstruieren, die spezifisch für unseren Showcase waren. diff -r e1081de0b981 -r d7564f4705a9 pics/cellbe-chip.png Binary file pics/cellbe-chip.png has changed diff -r e1081de0b981 -r d7564f4705a9 pics/cellbe-structure.png Binary file pics/cellbe-structure.png has changed diff -r e1081de0b981 -r d7564f4705a9 pics/lynx6.jpg Binary file pics/lynx6.jpg has changed diff -r e1081de0b981 -r d7564f4705a9 pics/mvbluefox.jpg Binary file pics/mvbluefox.jpg has changed