01.05.2013, 17:57
Hallo zusammen
Ich bin relativ neu, was LabView angeht. Habe mich nun für ein Uniprojekt eingearbeitet. Wir müssen einen Lego NXT programmieren.
Nun stehe ich vor einem grösseren Problem. Zwar wollen wir einen Roboterarm mit zwei Gelenken und vier Servos mit einem PS Controller ansteuern. Für Servos und PS Controller gibt es von Mindsensors die Funktionisblöcke geliefert. Die Joysticks am PS Controller sollen einen Wert von 0-100, resp. -100-0 liefern. Wir können nun also nicht die Werte vom Joystick als Servoposition durchgeben, da sich sonst der Arm immer gerade zurückbewegt, wenn man den Joystick loslässt. (Zweites Problem: Der Servo würde auf schnelle Kommandowechsel nicht reagieren, sondern die Anweisung nacheinander ausführen). Crashgefahr ist also recht hoch für unseren liebevoll in hunderten von Stunden hergestellten Roboterarm .
Nun wollte ich die Geschwindigkeit mit dem Joystick steuern (abs(x)=Geschw.) und mit einer case-Anweisung dem Servo durchgeben, dass er sich je nach dem ob x>0, x=0, x<0 (x: Joystickwert) um "eine Einheit" in positive Richtung (x<0) oder negative Richtung (x<0) bewegen soll. Alles in einer Schleife. Nun müsste ich also den vorherigen Positionswert n vom Servo in der case-Anweisung inkrementieren, resp. dekrementieren. Nur weiss ich nicht, wie ich auf diesen Wert zurückgreifen kann.
x>0: n=n+1
x=0: n=n
x<0: n=n-1
und nachher Position = n
Die Idee war, dass ich die Argumente kurz vor dem erreichen des Servos nach dem Case nochmals "unbundle" um das n für die nächste Runde zu speichern... aber Variablen und so .
Irgendwann würde der Arm dann halt auch crashen, wenn man unvorsichtig steuert. Das werde ich aber später mit einem if-else lösen.
Im Anhang befindet sich meine LabView Datei für einen Motor. Da ich mir nicht sicher bin, ob man alles sieht, wenn man das Lego Zeugs nicht hat, habe ich noch ein Bild vom Programm angefügt.
Bin dankbar für jede Hilfe.
Gruss
pp
Ich bin relativ neu, was LabView angeht. Habe mich nun für ein Uniprojekt eingearbeitet. Wir müssen einen Lego NXT programmieren.
Nun stehe ich vor einem grösseren Problem. Zwar wollen wir einen Roboterarm mit zwei Gelenken und vier Servos mit einem PS Controller ansteuern. Für Servos und PS Controller gibt es von Mindsensors die Funktionisblöcke geliefert. Die Joysticks am PS Controller sollen einen Wert von 0-100, resp. -100-0 liefern. Wir können nun also nicht die Werte vom Joystick als Servoposition durchgeben, da sich sonst der Arm immer gerade zurückbewegt, wenn man den Joystick loslässt. (Zweites Problem: Der Servo würde auf schnelle Kommandowechsel nicht reagieren, sondern die Anweisung nacheinander ausführen). Crashgefahr ist also recht hoch für unseren liebevoll in hunderten von Stunden hergestellten Roboterarm .
Nun wollte ich die Geschwindigkeit mit dem Joystick steuern (abs(x)=Geschw.) und mit einer case-Anweisung dem Servo durchgeben, dass er sich je nach dem ob x>0, x=0, x<0 (x: Joystickwert) um "eine Einheit" in positive Richtung (x<0) oder negative Richtung (x<0) bewegen soll. Alles in einer Schleife. Nun müsste ich also den vorherigen Positionswert n vom Servo in der case-Anweisung inkrementieren, resp. dekrementieren. Nur weiss ich nicht, wie ich auf diesen Wert zurückgreifen kann.
x>0: n=n+1
x=0: n=n
x<0: n=n-1
und nachher Position = n
Die Idee war, dass ich die Argumente kurz vor dem erreichen des Servos nach dem Case nochmals "unbundle" um das n für die nächste Runde zu speichern... aber Variablen und so .
Irgendwann würde der Arm dann halt auch crashen, wenn man unvorsichtig steuert. Das werde ich aber später mit einem if-else lösen.
Im Anhang befindet sich meine LabView Datei für einen Motor. Da ich mir nicht sicher bin, ob man alles sieht, wenn man das Lego Zeugs nicht hat, habe ich noch ein Bild vom Programm angefügt.
Bin dankbar für jede Hilfe.
Gruss
pp