Hallo miteinander dies ist mein erster Beitrag (bzw Frage^^) und ich möchte mich zuerst kurz vorstellen. Ich heisse Andi, bin 25 Jahre alt und studiere Systemtechnik (1.Semester). Im Modul Steuerungstechnik sollen wir aus Lego irgendwas bauen und programmieren. Wir (2er Team) wollen einen "Plotter" bauen. Dieser soll nach x- und y- Koordinaten eine Figur/Form auf ein Blatt Papier zeichnen. Wir sollen LabView mit NXT-AddOn zur Programmierung verwenden. Die Hardware haben wir aufgebaut, könnte also bei Bedarf Fotos liefern. Ein in x- und y-Richtung beweglicher Schlitten wird durch Gewindestangen (die mit den NXT Motoren angetrieben werden) bewegt. Da die Steigung des Gewindes bekannt ist, wissen wir um welchen Weg sich der Schlitten pro Motor-Umdrehung bewegt. Unsere Probleme: 1.:Kann man (WIE?) zum Beispiel mit Inventor CAD oder einer anderen Software eine Form erstellen und diese an LabView weitergeben, sodass die Koordinaten nicht Punkt für Punkt manuell eingegeben werden müssen? 2.: Hat jemand ein Codebeispiel mit dem die Punkte der Reihe nach angefahren werden können? Ich stelle mir das so vor: "Fahre Koord. (X.Y) (1.1) an, dann (2.2), dann (4.5) usw.. " dann sozusagen "Play"2 drücken und die Punkte werden abgefahren. Wir stehen total auf dem Schlauch und kennen die Programme, die wir brauchen sollen, kaum. Wären echt froh um jeden Tipp. Vielen Dank und Freundliche Grüsse Andi
Ihr könntet Euch mit HPGL beschäftigen. Das ist die "Druckersprache", mit der sehr viele Plotter angesteuert werden, und für die die meisten Zeichenprogramme entsprechenden Output erzeugen können. Damit bestünde Eure Aufgabe darin, einen HPGL-Interpreter zu schreiben, der die Plotbefehle entsprechend in die Ansteuerung Eures Plotters umsetzt. http://de.wikipedia.org/wiki/Hewlett_Packard_Graphic_Language
Andi A. schrieb: > Unsere Probleme: > 1.:Kann man (WIE?) zum Beispiel mit Inventor CAD oder einer anderen > Software eine Form erstellen und diese an LabView weitergeben, sodass > die Koordinaten nicht Punkt für Punkt manuell eingegeben werden müssen? mehr als einfache Formen ("Haus des Nikoaus") kriegt ihr auf die Art sowieso nicht hin. Ergo wird jetzt Frage 2 interessant: > 2.: Hat jemand ein Codebeispiel mit dem die Punkte der Reihe nach > angefahren werden können? Ich stelle mir das so vor: "Fahre Koord. (X.Y) > (1.1) an, dann (2.2), dann (4.5) usw.. " dann sozusagen "Play"2 drücken > und die Punkte werden abgefahren. Denn dazu braucht ihr eine Technik, die die Zwischenpunke ausrechnet. Um den Schlitten von (0/0) nach (30/10) zu verfahren, reicht es ja nicht, ihn zuerst in x Richtung fahren zu lassen und dann in y Richtung. Das ergibt keine gerade gezeichnete Linie zwischen den beiden angegebenen Koordinaten. Die Technik, die ihr braucht heißt jetzt "Bresenham Algorithmus". Er wird benutzt um den Stift von Position A nach Position B zu verfahren und zwar so, dass sich dabei eine möglichst geradelinige Verbindung zwischen den Punkten ergibt. Egal auf welchen Koordinaten die Punkte dann tatsächlich liegen. Wenn ihr den habt, dann melde dich noch mal. Es gibt da draussen einfache Vektor-Grafik Programme bzw. auch fertige 2D-Zeichnungen, die einfach zu lesen sind und dann auch schon komplexere Bilder ergeben. Man kann auch mittels Formeln recht ansprechende Grafiken erzeugen, die meistens auf der Überlagerung von Kreisen und/oder Lissajous-Figuren beruhen. Auch ein Muster aus Quadraten, die in sich geschachtelt werden, wobei sie in jeder Schachtelungstiefe etwas kleiner und gedreht werden, gibt recht interessante Effekte. Aber: Grundvoraussetzung ist der Bresenham. Solange ihr nicht eine gerade Linie von jedem beliebigen Punkt auf der Zeichenfläche zu jedem anderen beliebigen Punkt auf der Zeichenfläche ziehen könnt, ist das alles nutzlos.
:
Bearbeitet durch User
Viel Spass dabei, diese Algorithmen mit der GUI zusammen zu klicken. Dürft ihr alternativ Java (Lejos) verwenden? Damit wäre es sicher leichter umzusetzen.
:-) Gut, ich kenn jetzt die Möglichkeiten dieses Lego Systems nicht. Aber ich hoffe mal inbrünstig für ihn, dass da Schrittmotoren drinnen sind, so dass er die gezielt und exakt gleichzeitig um definierte Winkel drehen kann. Wenn das normale Gleichstrom-Motoren sind, wie man sie halt für, keine Ahnung, Kranhaken hochziehen oder Förderband ein/aus benutzt, dann seh ich sowieso schwarz. Denn dann wird das noch interessant, wie er die so genau angesteuert kriegt, dass eine unter 30° zu einer der Hauptachsen verlaufende Gerade dann am Papier auch wirklich eine Gerade ist und keine Wellenlinie, die halt zufällig an der angegebenen Position startet und an der angegebenen Position endet. Die Herausforderung bei einem Plotter liegt nicht darin, den Stift entlang der X-Achse hin und her fahren zu lassen. Sie liegt auch nicht darin ihn entlang der Y-Achse fahren zu lassen. Sie liegt darin, dass beides koordiniert gleichzeitig gemacht werden kann. Und zwar exakt und nicht einfach irgendwie.
:
Bearbeitet durch User
Die Lego NXT Motoren sind DC Motoren mit 1:50 Getriebe, sowie einem Sensor, der 360 Impulse pro Umdrehung liefert. Man kann den Ausgang des Motors auf etwa +/-2 Grad genau positionieren. Die angesprochene Entwicklungsumgebung muss man sich so vorstellen, dass man Symbole mit Linien zu einem Programmablaufplan verbindet und in den Symbolen Parameter eingibt. Zum Beispiel gibt es ein Motor Symbol, da stellt man ein, wie schnell er sich in welche Richtung drehen soll, oder wie lange er sich drehen soll, oder wie viele Umdrehungen er machen soll.
> Sie liegt darin, dass beides koordiniert gleichzeitig gemacht > werden kann. Und zwar exakt und nicht einfach irgendwie. Das Motor-Symbol kann zwei Motoren gleichzeitig laufen lassen und dabei sicherstellen, dass die Drehzahlen gleich bzw in einem bestimmten Verhältnis zueinander stehen. Das sollte reichen. Schwieriger stelle ich mir den Algorithmus vor, der die Grafikdateien einlesen soll und aus den Punkten die Bewegungen der Motoren berechnet.
Nimm mal Kontakt zu dem da auf: http://www.youtube.com/watch?v=6Og2czM_TGs Das Gerät kann sogar HPGL, also genau das, was Du vor hast. Programmier hat er offensichtlich in C (BricxCC).
Hoi Andi Du könntest auch ein Foto einlesen, und dies Pixel für Pixel auswerten, Schwellwert definieren und dann das Bild "punkten" wie ein Tintenstrahldrucker. Das müsste eigentlich relativ einfach mit labView umzusetzen sein... Ansonsten melde dich nochmals... Viele Grüsse PS: Grüsse an JPK :-)
Steuerungstechnik? Dann sollte sie LinuxCNC oder Mach3 nützen. Wenn sie (Lego) bausteine für die mechatronik nützt, denn warum nicht auch bausteine (LinuxCNC) für die kinematik? Ich glaube es gehört nicht unter fach Steuerungstechnik solche aufgaben zu lösen. LinuxCNC/Mach3 übersetzen G-Code zum X und Y schritte. Dann wird es ihre aufgabe diese schritte zum motorbewegungen zu übersetzen. (Stichwort: Servoregelung). Und für diese regelung ist LabView brauchbar. Wenn sie diese regelung gebaut hat, muss es eingestellt werden (P,I,D,...) so dass die motoren wirklich die einkommende schritte folgen. Nicht zu langsam, nicht selbstscwingend uzw. Diese aufgabe ist was ich mit Steuerungstechnik verbinden. Die umsetzung von bild/zeichnung zum koordinaten ist kinematik. http://de.wikipedia.org/wiki/Kinematik Wenn das oben genannte in ordnung ist mussen sie die G-code herstellen. In industrie nützt man CAM programme die CAD zeichnungen essen und diese zum G-Code übersetzt. Sie sollte einfache lösungen für einfache zeichnungen bewerten. Wie: http://cnc-toolkit.com/cnc_toolkit.html. Einar
Einar S. schrieb: > Steuerungstechnik? > > Dann sollte sie LinuxCNC oder Mach3 nützen. > Wenn sie (Lego) bausteine für die mechatronik nützt, denn warum nicht > auch bausteine (LinuxCNC) für die kinematik? Langsam. Er ist im 1. Semester und da geht es darum, dass sie selber eine erste einfache Steuerung durchführen. Irgendetwas mechanisches, das sich unter Programmkontrolle gezielt bewegt. Wenn die "Steuerung" einfache Dinge erledigt, dann ist das mehr als genug. Mehr kann man von jemandem im ersten Semester nicht erwarten. Ein simples ...
1 | ...
|
2 | |
3 | double MitteX = 250; |
4 | double MitteY = 100; |
5 | double Radius1 = 500; |
6 | double Radius2 = 200; |
7 | double n = 8; |
8 | double m = 3; |
9 | double angleStep = 0.001; |
10 | |
11 | int first = TRUE; |
12 | |
13 | double nextPosX, nextPosY; |
14 | |
15 | for( double alpha = 0; alpha < m*2*PI; alpha += angleStep ) |
16 | {
|
17 | nextPosX = MitteX + cos(alpha) * Radius1 + sin(n*alpha) * Radius2; |
18 | nextPosY = MitteY + sin(alpha) * Radius1 + cos(n*alpha) * Radius2; |
19 | |
20 | if( first ) |
21 | {
|
22 | MoveTo( nextPosX, nextPosY ); |
23 | first = FALSE; |
24 | }
|
25 | else
|
26 | DrawTo( nextPosX, nextPosY ); |
27 | }
|
28 | |
29 | ....
|
... liefert schon genug Stellschrauben um damit einfache 'Bilder' zu erzeugen und zu variieren, die trotzdem komplex genug sind, um die korrekte Funktion des Plotters zu demonstrieren und auch noch nett aussehen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.