Forum: Mikrocontroller und Digitale Elektronik Lego NXT (Projekt Bachelorstudium)


von Andi A. (y2k)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Stefan (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

:-)

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
von Stefan (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

> 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.

von Stefan (Gast)


Lesenswert?

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).

von Manuel K. (manuelk)


Lesenswert?

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 :-)

von Einar S. (Firma: Norwegen) (esjaavik)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.