LabVIEWForum.de
NXT: Servos kontinuierlich ansprechen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: Hardware (/Forum-Hardware)
+--- Thema: NXT: Servos kontinuierlich ansprechen (/Thread-NXT-Servos-kontinuierlich-ansprechen)



NXT: Servos kontinuierlich ansprechen - pixelpress - 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 Wink.

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

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


RE: NXT: Servos kontinuierlich ansprechen - NWOmason - 01.05.2013 20:44

(01.05.2013 17:57 )pixelpress schrieb:  x>0: n=n+1
x=0: n=n
x<0: n=n-1

und nachher Position = n

Also sowas?

[attachment=44521]

[attachment=44522]

Beste Grüße,
NWO


RE: NXT: Servos kontinuierlich ansprechen - GerdW - 02.05.2013 08:35

Oder so:
[attachment=44523]


RE: NXT: Servos kontinuierlich ansprechen - pixelpress - 04.05.2013 20:04

Hi zusammen

Sorry, zu Voreiliger Post. Bin grad auf dem Weg zur Lösung.

Danke für eure Hilfe. Hat mich schon mal weitergebracht.

pp


RE: NXT: Servos kontinuierlich ansprechen - pixelpress - 04.05.2013 21:48

So, ich muss nochmals kurz eure Hilfe beanspruchen.

Haben einen Teleskoparm. Diesmal keine Servos, sondern ein Motor. Bewegung auf Knopfdruck hat bisher funktioniert. Nun wollte ich noch eine Sicherheit einbauen, dass der Arm nicht über den Anschlag hinausfährt. Habe dazu den Drehwinkel des Motors ausgelesen. Und dann zwei Case-Anweisungen verschachtelt. Der Motor soll also einfach nicht mehr in die entsprechende Richtung bewegbar sein, sobald er auf Position 0, resp. 1600 ist. Nun bekomme ich einen Error: "Case Structure: Selector values are not unique". Habe auch schon versucht den Winkel zweimal auszulesen. Selber Error.

[attachment=44552]


Gruss pp


RE: NXT: Servos kontinuierlich ansprechen - Holy - 04.05.2013 22:37

Wie die Meldung sagt ist der Case-Wert nicht eindeutig. Du hast jeweils einen Bereich "..1600" bzw. "..0" und einen Bereich "1600.." bzw. "0..". Das führt dazu das in der jeweiligen Case-Struktur die 0 bzw. 1600 in mehr als einem Case vorkommt und das geht letztendlich nicht. Du musst den Bereich in einem der beiden Cases somit einkürzen z.B. auf "1601.." statt "1600..".
[attachment=44553]