\begin{document}
\title{Lego Forth NXT}
\author{Bernd Paysan}
\maketitle
\begin{multicols*}{2}
Lego bringt einen Nachfolger für den RCX auf den Markt: Den \href{http://mindstorms.lego.com/}{NXT}\footnote{\url{http://mindstorms.lego.com/}}. Für den RCX gab es bereits ein Forth, das \href{http://www.hempeldesigngroup.com/lego/pbForth/}{pbForth}\footnote{\url{http://www.hempeldesigngroup.com/lego/pbForth/}} von Ralf Hempel. Ulli Hoffmann formuliert dazu allerdings vernichtende Kritik:

\begin{quote}
Wenn ich an den RCX--Wettbewerb in Haminkeln zurückdenke, fand ich das
Forth und das Entwicklungssystem, das wir damals benutzten, primitiv
und lästig zu bedienen. Für ein Wettbewerbs--Rapid--Prototyping war das
nicht wirklich geeignet und als Vorzeige--Objekt, um andere für Forth
zu interessieren, würde es wohl eher abschreckend wirken.
\end{quote}

Wobei man fairerweise sagen muss, dass die Hardwareunzulänglichkeiten des RCX--Bricks sehr wohl zu dem unprofessionellen Auftreten beigetragen haben --- wenn der Motor keine Tachorückmeldung hat, kann man eben keine Regelung implementieren.

\section{Der Plan}

Der NXT ist wesentlich leistungsfähigere Hardware als der RCX. Auf diesem System sollte es möglich sein, ein leistungsfähiges Forth zu implementieren, das komfortabel bedient werden kann, und die Möglichkeiten des Geräts auch ausnützt.

Insbesondere sind auch die oben angedeuteten Schwachpunkte des RCX--Moduls behoben:

\begin{itemize}
\item Der Motor hat einen Drehgeber, mit dem eine Steuerung der Fahrzeuge möglich ist
\item Die Kommunikation über Bluetooth erlaubt eine sichere Kommunikation zwischen Host und Gerät und auch zwischen den Geräten
\end{itemize}

\subsection{Anforderungen}

\begin{itemize}
\item Ein vernünftiges Forth (z.B. Gforth); mit 256k Flash und 64k RAM auf dem ARM ist genügend Platz und Leistung vorhanden.
\item Interaktive Kommunikation mit Terminal--Programmen und Kommunikation zwischen den Robotern ähnlich wie bei ONF.
\item Die im Lieferumfang enthaltene Peripherie (Sensoren und Aktoren) müssen ausgereizt werden können --- es muss auch eine Bibliothek üblicher Regelalgorithmen vorhanden sein, damit nicht jeder Jugendliche das Rad neu erfinden muss.
\item Das Dot--Matrix--Display muss Text und einfache Grafik anzeigen.
\item Was machen wir mit dem AVR--Koprozessor? Lassen wir die vorhandene Firmware drinnen (Power-- und PWM--Management), oder tun wir ein Umbilical--Forth 'rein, dessen Host im ARM ist?
\end{itemize}

\subsection{Vorgehensweise}

\begin{itemize}
\item Beschaffung hinreichend detaillierter Informationen über den NXT
\item Machbarkeit? D.h. kann man die Firmware überhaupt ersetzen?
\item Beschaffung von Kits und Bricks für die Teilnehmer
\item Zusammenstellen eines Teams
\item Beta--Test mit echten Kindern (ewige Spielkinder zählen nicht)
\item Dokumentation mit angemessener Berücksichtigung des Vorwissens des Zielpublikums (das Zielpublikum hat noch \emph{kein} Diplom in Elektrotechnik oder Maschinenbau!)
\end{itemize}

\section{Informationen über den NXT}

Auf der
\href{http://mindstorms.lego.com/Overview/NXTreme.aspx}{NXTreme--Seite}\footnote{\url{http://mindstorms.lego.com/Overview/NXTreme.aspx}}
gibt es ein paar Informationen zum Aufbau, z.B. Schaltpläne, aber
keine weiteren Details. Gottseidank ist der Schaltplan sehr einfach,
d.h. man braucht eigentlich nur auf die verwendete CPU zu gucken, um
weiterzukommen:

Der verwendete Single--Chip--Contoller ist ein \href{http://www.atmel.com/dyn/products/product\_card.asp?part\_id=3524}{AT91SAM7S256}\footnote{\url{http://www.atmel.com/dyn/products/product\_card.asp?part\_id=3524}}. Da ist ein Boot--Assistent drin (SAM--BA), mit dem man die vorhandene Firmware "`ganz einfach"' über USB ersetzen kann (mit einem Windows--Programm natürlich).

Mehr findet man auf der \href{http://nxt.natulte.net/trac/}{NXT
  Hacks}\footnote{\url{http://nxt.natulte.net/trac/}}--Seite. Dort
gibt es auch einen Link auf ein Linux--Programm zum
\href{http://nxt.natulte.net/trac/wiki/LibNxt}{Firmware
  flashen}\footnote{\url{http://nxt.natulte.net/trac/wiki/LibNxt}},
GCC--Crosscompiler und mehr.
\end{multicols*}
\end{document}