Was sind die bemerkenswerten Einschränkungen bei der Verwendung von Java mit Mindstorms NXT 2.0?

7

Ich bin ein langjähriger Java- Entwickler, der anfängt, sich mit Lego Mindstorms NXT 2.0 vertraut zu machen . Gibt es Einschränkungen bei der Verwendung der Java-API? Welche Sprache ist auf der Plattform am robustesten?

Ich habe einen Beitrag gefunden. Welche Programmiersprache soll ich mit dem NXT verwenden? das erwähnt viele der Alternativen. Die Antwort ist hilfreich, erwähnt jedoch nicht die Einschränkungen der verschiedenen Sprachen.

Bob Paulin
quelle
Welche Recherchen haben Sie durchgeführt? [Link] lejos.sourceforge.net/nxt/nxj/api/index.html
Spiked3
Diese Frage ist zu weit gefasst. Vielleicht könnten Sie speziell fragen, was Sie tun möchten?
Josh Vander Hook
Denken Sie also, dass die Absicht der Frage darin besteht, dass Lejos eine voll funktionsfähige Sprache für nxt ist oder dass ihre Operationen nur von der Muttersprache ausgeführt werden können?
Bob Paulin
"oder sind ihre Operationen, die nur von der Muttersprache ausgeführt werden können" - Sie verlieren mich immer noch - keine Ahnung, was es verlangt. LeJOS ist eine Implementierung einer JVM. Unangemessene Teile von Java (z. B. TCP) werden nicht implementiert. Was gibt es sonst noch zu wissen? Die Frage, welche Sprache am robustesten ist, ist zu vieldeutig - Ford oder Chevy? teamhassenplug.org/NXT/NXTSoftware.html hat eine Vergleichstabelle
Spiked3
@ Spiked3: Danke für die Vergleichstabelle. Man könnte auch gerne wissen, (1) welche (falls vorhanden) dieser Alternativen harte Echtzeitsysteme unterstützt (a) , (2) wie viel Speicher auf dem NXT für meine Programme und Daten auf "Benutzerebene" übrig bleibt Die Sprachunterstützungs-Infrastrukturbibliotheken werden geladen. (3) Unterstützen Sie eine dieser Alternativen mit Interrupt-Handlern usw.
David Cary,

Antworten:

2

Viele der verschiedenen Optionen in Bezug auf die Sprache sind auf der NXT-Wiki-Seite http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0 aufgeführt .

  • NXT-G NXT-G ist die Programmiersoftware, die im Standard-Basiskit enthalten ist. Es basiert auf der grafischen Programmierung von LabVIEW. Es verfügt über eine interaktive Drag-and-Drop-Umgebung. LabVIEW Toolkit [Bearbeiten] NXT-G basiert auf LabVIEW, einem Industriestandard für Programmierung. LabVIEW wurde von National Instruments erstellt und verwendet die Datenflussprogrammierung, um ein virtuelles Instrument zu erstellen. Um eine erweiterte Programmierung im grafischen Sinne zu ermöglichen, hat National Instruments ein Toolkit für den NXT veröffentlicht. Die Version 1.0 wurde im Dezember 2006 veröffentlicht. Seit ihrer Veröffentlichung wurden mehrere Fehler gefunden und neue Sensoren erstellt. Während das Toolkit die Erstellung neuer Sensoren ermöglicht, hat National Instruments noch kein offizielles Update veröffentlicht
  • Lego :: NXT Lego :: NXT bietet eine API zwischen Perl und NXT.
  • Ada Für den NXT ist ein Port von GNAT verfügbar. Zum Ausführen ist nxtOSEK erforderlich. Der Port enthält Ada-Bindungen an die NXT-Hardware und nxtOSEK.
  • Next Byte Codes & nicht genau C Next Byte Codes (NBC) ist eine einfache Open-Source-Sprache mit einer Assembler-Syntax, mit der der NXT- Baustein programmiert werden kann. Not eXactly C (NXC) ist eine Open-Source-Sprache auf hoher Ebene, ähnlich wie C, die auf dem NBC-Compiler basiert. Es kann auch zum Programmieren des NXT-Bausteins verwendet werden. NXC ist im Grunde NQC für den NXT. Es ist die am häufigsten verwendete Programmiersprache von Drittanbietern.
  • ROBOTC ROBOTC ist eine integrierte Entwicklungsumgebung für Schüler, mit der LEGO NXT-, VEX-, RCX- und Arduino-Roboter mithilfe einer auf der Programmiersprache C basierenden Programmiersprache programmiert und gesteuert werden.
  • RoboMind RoboMind ist eine Lernprogrammierumgebung, die eine übersichtliche Skriptsprache zum Programmieren eines simulierten Roboters bietet. Diese internationalisierten Skripte können jedoch auch direkt in Lego Mindstorms-Roboter exportiert werden. Zum Ausführen ist keine benutzerdefinierte Firmware erforderlich.
  • NXTGCC NXTGCC ist eine GCC-Toolchain zum Programmieren der NXT-Firmware in C. URBI [Bearbeiten] URBI ist eine parallele und ereignisgesteuerte Sprache mit Schnittstellen zu C ++ / Java und Matlab. Es hat auch eine Komponentenarchitektur (UObject) für verteilte Berechnungen. Urbi ist mit vielen Robotern kompatibel, einschließlich Nao (vgl. Robocup), Bioloid oder Aibo.
  • leJOS NXT leJOS NXT ist eine Open-Source-Sprache auf hoher Ebene, die auf Java basiert und benutzerdefinierte Firmware verwendet, die vom leJOS-Team entwickelt wurde.
  • nxtOSEK Um in C (Programmiersprache) / C ++ schreiben zu können, kann nxtOSEK verwendet werden, dies erfordert jedoch auch eine benutzerdefinierte Firmware.
  • MATLAB und Simulink MATLAB ist eine Programmiersprache auf hohem Niveau für numerisches Rechnen, Datenerfassung und Analyse. Es kann zur Steuerung von LEGO NXT-Robotern über eine serielle Bluetooth-Schnittstelle (die serielle Kommunikation ist Teil der Basisfunktionalität von MATLAB) oder über eine USB-Verbindung verwendet werden. Zum Beispiel mit der RWTH - Mindstorms NXT Toolbox (kostenlos & Open Source). Simulink ist eine MATLAB-basierte Umgebung zur Modellierung und Simulation dynamischer Systeme. Mit Simulink kann ein Benutzer Steueralgorithmen entwerfen, automatisch C-Code für diese Algorithmen generieren und den kompilierten Code auf den LEGO NXT herunterladen. MATLAB- und Simulink-Code für die NXT-Programmierung ist frei verfügbar.
  • Lua pbLua ist eine Implementierung der Programmiersprache Lua, einer allgemeinen Skriptsprache für Lego Mindstorms. FLL
  • NXT-Navigation FLL Nxt-Navigation Ein Open-Source-Programm zur Unterstützung der Navigation in der FLL-Wettbewerbstabelle. Verwendet NXT-G- und TXT-Dateien zum Schreiben von Programmen.
  • ruby-nxt ruby-nxt ist eine Bibliothek zum Programmieren des NXT für die Programmiersprache Ruby. Im Gegensatz zu den anderen Sprachen für den NXT wird der Code nicht in eine Binärdatei kompiliert. Stattdessen wird der Code über eine Bluetooth-Verbindung direkt an den NXT übertragen. Diese Ausführungsmethode ist erheblich langsamer als die direkte Ausführung von kompiliertem Code. Robotik.
  • NXT Robotics.NXT ist eine Haskell-Schnittstelle zu NXT über Bluetooth. Es unterstützt direkte Befehle, Nachrichten und viele Sensoren (auch inoffiziell). Es unterstützt auch eine einfache nachrichtenbasierte Steuerung eines NXT-Bausteins über ein remote ausgeführtes Programm (einschließlich des grundlegenden NXC-Codes).

Wie bereits erwähnt, ist das Diagramm in http://teamhassenplug.org/NXT/NXTSoftware.html ein guter Vergleich.

Welche Sprache ist auf der Plattform am robustesten?

Obwohl ich der Meinung bin, dass die Frage nach der Verwendung von NXT-G, Matlab, Labview und einer Reihe anderer Schnittstellen viel zu vieldeutig ist, habe ich festgestellt, dass die BricxCC-IDE und die NXC mit großer kontextbezogener Hilfe und vielem sehr einfach zu verwenden sind von Beispielen. Es ermöglicht viel mehr Programmierfreiheit, die die visuellen Lösungen nicht bieten. Ich habe nicht versucht, die höheren Programmiersprachen wie Java und C ++ zu verwenden, da die meisten Anwendungen, die ich verwendet habe, nicht von den erweiterten Funktionen profitiert hätten. Wenn Sie diese erweiterten Funktionen wünschen, ist NXT die richtige Hardware?

Man könnte auch gerne wissen (1), welche (falls vorhanden) dieser Alternativen harte Echtzeitsysteme unterstützt

In diesem Beitrag für LeJOS wird dies in Bezug auf Java erörtert: http://www.lejos.org/forum/viewtopic.php?f=18&t=4619: - "Die NXT-Firmware wechselt alle 1 ms den Thread-Kontext. Außerdem ist der Scheduler der NXT-Firmware viel vorhersehbarer. Beispielsweise würde der Scheduler einen Thread mit hoher Priorität einem Thread mit niedrigerer Priorität vorziehen. Daher Threads mit hoher Priorität Es könnte ziemlich sicher sein, dass dies so schnell wie möglich geplant wird. Die Motorregelung wurde normalerweise als Thread mit hoher Priorität ausgeführt. Wie Sie bereits vermutet haben, war die NXT-Firmware jedoch auch kein Echtzeitsystem. Threads mit derselben Priorität werden im Round-Robin-Verfahren bereitgestellt. Oh, und hin und wieder stoppt der Garbage Collector die gesamte JVM. Dies gilt immer für die NXT. Die auf dem EV3 verwendete Oracle-JVM verwendet jedoch gleichzeitig Garbage Collectors. Im schlimmsten Fall greifen jedoch auch diese auf das Anhalten zurück die ganze JVM. Der Trick, dies zu vermeiden, besteht darin, Objekte, Arrays, wiederzuverwenden.und solche Sachen so weit wie möglich in leistungskritischen Codepfaden. "

Wie viel Speicher auf dem NXT bleibt für meine Programme und Daten auf "Benutzerebene" übrig, nachdem die Infrastrukturbibliotheken für die Sprachunterstützung geladen wurden?

In diesem Beitrag für LeJOS wird dies in Bezug auf Java behandelt: http://www.lejos.org/nxt/nxj/tutorial/AdvancedTopics/UnderstandingFilesLCPMemTools.htm

"Der NXT verfügt über 256 KB Flash-Speicher. Ein fester Abschnitt am Anfang des Flash-Speichers ist dem System zugeordnet. Er dient zum Speichern der Firmware, gefolgt vom Startmenü. Der Rest dieses Systembereichs wird nicht verwendet. Die Größe des Systembereichs variiert zwischen den Releases.

Die Firmware ist in C mit einer ARM-Assemblersprache geschrieben. Das Startmenü ist in Java geschrieben (im Startprojekt in SVN).

Der Flash-Speicher wird auf 256-Byte-Seiten gelesen und geschrieben. Die erste Seite nach dem Systembereich wird für dauerhafte Systemeinstellungen verwendet, die vom Startmenü verwaltet werden.

Der Rest des Flash-Speichers wird für das Benutzerdateisystem verwendet. Die ersten beiden Seiten enthalten die Dateitabelle (Verzeichnis) und die restlichen Seiten enthalten Benutzerdateien. Dateien werden als zusammenhängende Menge von Bytes gespeichert, dh sie verwenden einen einzelnen Bereich von Seitenzahlen ohne Lücken. Dadurch kann eine Datei als Speicherbereich adressiert werden. "

Unterstützt eine dieser Alternativen Interrupt-Handler?

Eine Möglichkeit zum Programmieren von Interrupt-Handlern auf dem NXT besteht darin, auf einer niedrigeren Ebene zu programmieren: http://www.tau.ac.il/~stoledo/lego/nxt-native/

"Der Einstieg ist ziemlich einfach. Sie benötigen zwei Tools: die GNU-Entwicklungstools für ARM-Prozessoren und eine Möglichkeit, die resultierenden Programme auf den NXT herunterzuladen. Ich verwende nexttool, um Programme auf den NXT herunterzuladen, aber ich nehme an, Sie könnten sie verwenden." NXT-G auch. Es gibt verschiedene Distributionen der GNU-Tools für ARM. Ich verwende normalerweise eine Distribution namens WinARM, die für Windows bestimmt ist. GNUARM und YAGARTO sind zwei weitere Optionen (ich habe GNUARM unter Linux verwendet). "

Tom Bamber
quelle
Während die Links geschätzt werden, sind sie früher oder später an Fäulnis gebunden. Um zukunftssicher zu sein, ist es eine gute Idee, die relevantesten Teile des Textes, auf den Sie in dieser Antwort verlinkt haben, zu zitieren.
Shahbaz
Shahbaz Ich habe den Beitrag bearbeitet, um zu verhindern, dass der Link verrottet.
Tom Bamber