werd ich mal machen, wenn ich meinen asuro soweit zusammengebaut habe =)
Hallo Allle,
hier habe ich ein kleines Programm geschrieben, mit dem man den ASURO von einem PC aus steuern kann.
Leider konnte ich es nur unter Windows testen. Mich würde interessieren, ob es auch mit Linux oder mit einem Mac funktioniert.
Wer hat Lust, es mal auszuprobieren.
Gruß,
robo
Nachtrag: die ursprüngliche Diskussion zu ASURO und Java hat hier begonnen:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=38368
werd ich mal machen, wenn ich meinen asuro soweit zusammengebaut habe =)
Schon so viele Post's und noch keinen ASURO, das nenne ich mal eine reife Leistung.
Gruß,
robo
ich habe sogar zwei, aber die sind gerade im umbau
Hallo robo,
ich hatte gestern mal versucht dein Programm unter Linux (Ubuntu) zum Laufen zu bringen, habe es aber nicht geschafft.
Die meiste Zeit ging dabei fürs Installieren von Suns Java SDK drauf. Ich bin halt sowohl unter Linux als auch bei Java noch absoluter Noob.
Dank dieser Anleitung habe ich dann doch noch geschafft:
http://wiki.ubuntuusers.de/Java
Dein übersetztes Programm ließ sich von der Console nicht starten (Abbruch mit Fehlermeldung). Liegt wohl daran, das es aus mehreren Klassen besteht. Wahrscheinlich müßte man dazu erst alle Klassen in ein ausführbares Jar Archive packen.
Den Quellcode von der Konsole aus neu zu übersetzen schlug ebenso fehl, dazu benötigt man wohl die Eclipse IDE. Das werde ich heute abend noch mal ausprobieren, ebenso die Installation der RXTX Lib. Die Eclipse Installations Anleitung dazu habe ich schon mal gefunden:
http://wiki.ubuntuusers.de/Eclipse
Beim Übersetzen einzelner Quellen von der Console aus, vielen mir einige Warnungen wegen der Benutzung von Umlauten auf. Die Empfehlung dazu (laut google) ist wohl, die Textcodierung in Eclipse von Cp1252 auf UTF-8 umzustellen.
Ansonsten finde ich die Idee, den Asuro über Java zu steuern, sehr gut. Vielleicht finde ich ja selbst noch die Zeit, mich mit Java etwas näher auseinander zu setzen.
Übersetzen funktioniert unter Ubuntu so (aus dem Verzeichnis Java-PC/src):
javac -cp .:/usr/share/java/RXTXcomm.jar ch/AsuroControl.java
In AsuroControl.java sind allerdings noch Fehler - die "testAction" ruft ein "g.addWert" auf, "g" ist aber nicht bekannt. Einfach die Zeile auskommentieren, dann lässt sich die Anwendung übersetzen.
Zum Aufrufen muss (bei meiner Kommandozeilen-Übersetzung ...) das images Verzeichnis von bin nach src kopiert werden. Jetzt kann man mit
java -cp .:/usr/share/java/RXTXcomm.jar ch.AsuroControl
die Anwendung starten.
Weiter hab ich es noch nicht ausprobiert - aber ich halte es für unwahrscheinlich, dass auf jedem Rechner "COM10" die richtige Schnittstelle ist!
Hallo m.a.r.v.i.n, hallo trapperjohn,
es freut mich, dass Ihr das Ganze mal ausprobiert habt. Heute habe ich mir das Projekt nochmal vorgenommen und wollte es kompilieren. Mit ist tatsächlich in das Zip-File ein Zwischenstand reingerutscht.
Das ist richtig, einfach auskommentieren und es sollte gehen.In AsuroControl.java sind allerdings noch Fehler - die "testAction" ruft ein "g.addWert" auf, "g" ist aber nicht bekannt. Einfach die Zeile auskommentieren, dann lässt sich die Anwendung übersetzen.
Der Programmcode ist tatsächlich fest auf COM10 eingestellt. Ich habe es für meinen Rechner gemacht. Wenn Ihr den Schnittstellennamen an eurem Rechner kennt, sollte es ein leichtes sein z.B. COM5 in die AsuroControl einzugtragen.Weiter hab ich es noch nicht ausprobiert - aber ich halte es für unwahrscheinlich, dass auf jedem Rechner "COM10" die richtige Schnittstelle ist!
Bei der Auswahl der Schnittstelle bin ich mir noch unschlüssig: Ich könnte es mit einem "Dialog-Fenster" versuchen. Das ist aber lästig, weil man dann jedesmal beim Programmstart die Schnittstelle auswählen muss. Eine andere Möglichkeit wäre wohl ein "config" File. Da das ganze Projekt aber am Schluss in ein *.jar verwandelt werden soll, wird's wohl schwierig mit dem Pfad.
Bis demnächst,
robo
Hallo m.a.r.v.i.n,
mir ist gerade noch eine Idee gekommen: vielleicht solltest Du Dich der ganzen Sache schrittweise annähern.
Bei den von mir erzeugten Klassen gibt es die "Test"-Klasse. Die stellt testweise die Verbindung zum ASURO her. Wenn Du diese Klasse startest,
kannst Du also grundsätzlich die RS232 Verbindung testen oder die Methoden der Klasse "AsuroKommandos" ausprobieren.
Der wesentliche Teil des Codes der Testklasse sieht so aus:
...
AsuroKommandos asuro=new AsuroKommandos();
asuro.schnittstelleOeffnen("COM10");
asuro.verbindungOk() ; // prüfen
asuro.backLedL();
asuro.backLedR();
asuro.frontLed();
asuro.ledsOff();
asuro.schnittstelleSchliessen();
...
Du musst also nur asuro.schnittstelleOeffnen("COM10"); durch
asuro.schnittstelleOeffnen("/dev/tty0"); oder ähnlich bei Linux
ersetzen.
Die Klassen sind bei mir folgendermaßen geordnet:
Rs232.java ==> benutzt die Schnittstellenkommandos von RXTXcomm
Timer.java ==> eine Klasse, in der ich Msleep() auf dem PC nachgebildet
habe
AsuroKommandos.java ==> die ASURO "high-Level" Kommandos wie z.B. asuro.frontLed(); damit kann die FrontLed des ASURO eingeschaltet werden
Test.class ==> Testklasse, testet die ASURO Kommandos
Mann kann die einzelnen Klassen tatsächlich mit dem Java-Compiler auf Kommandozeilenebene übersetzen z.B.
javac Rs232.java
javac Timer.java
javac AsuroKommandos.java
javac Test.class
Wie immer kann es ein Problem mit den Suchpfaden geben. Ich habe mir bei Windows einachheitshalber auf c: das Verzeichnis j\ angelegt. Damit der Compiler die Klassen findet, müssen also die Klassenpfade gesetzt werden:
set CLASSPATH=c:\j\; c:\j\RXTXcomm.jar
RXTXcomm.jar habe ich auch ins c:\j\ Verzeichnis kopiert.
Das Compilieren kann auch schief gehen, weil ich in den Klassen ganz oben
package ch
stehen habe. Diese Zeile muss man rauswerfen, wenn sich die Dateien nicht in einem Verzeichnis ch\ befinden.
Mit dem vorgehen habe ich es geschafft, alle Klassen auf der Kommandozeile zu kompilieren. Es ist vielleicht sogar einfacher, als sich mit der etwas komplexen Entwicklungsumgebung von Eclipse auseinanderzusetzen.
Jetzt kann man eigentlich Test.class mit dem Kommando
java Test ( ohne die .class extension )
testen.
Ach ja, die rxtxSerial.dll sollte sich auch noch in dem Verzeichnis befinden.
Brauchst du nicht nachbilden, guck mal nach Thread.sleep()Zitat von robo.fr
Es reicht, wenn du die hierarchisch oberste Klasse (also die mit main()) übersetzt - der Java Compiler übersetzt Abhängigkeiten automatisch.Mann kann die einzelnen Klassen tatsächlich mit dem Java-Compiler auf Kommandozeilenebene übersetzen z.B.
javac Rs232.java
javac Timer.java
javac AsuroKommandos.java
javac Test.class
Einfach wie oben in meinem Beispiel aus der Verzeichnisebene oberhalb von "ch" kompilieren und dann entsprechend das Verzeichnis beim Kompilieren mit angeben (also bspw. ch/AsuroControl.java). Zum Starten der Klasse dann natürlich den Namen des Packages nicht vergessen (also ch.AsuroControl statt nur AsuroControl).Das Compilieren kann auch schief gehen, weil ich in den Klassen ganz oben
package ch
stehen habe. Diese Zeile muss man rauswerfen, wenn sich die Dateien nicht in einem Verzeichnis ch\ befinden.
Sehr praktisch, Deine Anleitung. Da lernt man es mal von der Pike auf.
Ich habe jetzt hier die neueste Version abgelegt. Der Fehler mit er fehlenden Klasse ist jetzt beseitigt. Ausserdem habe ich die Timer-Routinen nach Deinem Prinzip oben ausgemistet.
Im Moment versuche ich gerade, die graphische Darstellung der Liniensensoren etwas aufzupolieren. Dazu habe ich ja die Klasse "Graph" kreiert, die die Messwerte darstellt.
Mir scheint die Klasse "Graph" gut geeignet, um die Objektorientierung besser zu lernen. Ich möchte dem Graph jetzt beschriftete Achsen hinzufügen. Dazu wollte ich eine Klasse "Axis" erzeugen, die irgendwie dem Graph zugefügt werden.
Ich habe es allerdings nicht geschaft, weil die Verbindung der "repaint" Methode mit den Achsen nicht klappt.
Hier ist mir ohnehin unklar, wie man das am besten macht. Sollte man eine "Graph"-Klasse entwerfen und danach die Eigenschaften an eine "Axis" Klasse vererben? Oder sollte man die Klassen lieber vollständig getrennt entwerfen und dann später irgendwie zusammenfügen?
Gruß,
robo
Lesezeichen