- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Joystick Fernsteuerung für Differentialantireb ("Panzer")

  1. #1
    HaWe
    Gast

    Joystick Fernsteuerung für Differentialantireb ("Panzer")

    Anzeige

    Powerstation Test
    hallo,
    ich wollte mich an die Programmierung einer Joystick Fernsteuerung für einen Differentialantireb ("Panzer") machen, stoße aber auf ein Programmierproblem:

    Der Joystick hat ein Sattelgelenk, d.h. zwei Potentiometer übereinander, die im rechten Winkel zueinander stehen.
    Die Schrägstellung ist also die Resultierende aus den Einzelauslenkungen (wenn ich mich nicht irre):

    (1) Winkel: tan(alpha) = Gegenkathete/Ankathete <=> alpha = atan2(Gegenkathete, Ankathete)
    (2) Auslenkung = 1/2 (SQRT (Ankathete² + Gegenkathete²) )

    Gedacht ist die Funktion so, dass natürlich bei schräger Joystickstellung die Innenkette langsamer dreht als die andere: soweit logisch.
    Aber:
    bei voller 90° Seitenbewegung des Joysticks soll nicht die Innenkette still stehen, sondern mir gleicher Geschwindigkeit aber gegenläufig, so dass der Roboter nicht "über die Innenkette schiebt", sondern auf der Stelle wie ein Kreisel um seinen Mittelpunkt dreht ("spinning").
    Bei schräg nach vorn mit 45° soll dann der Stillstand der Innenkette erreicht sein, ab 45-90° ihr Rückwärtslauf beginnen.

    Bei Drücken des Joysticks nach hinten ist das ganze dann spiegelverkehrt.

    Wie fasst man jetzt die ganze Sache trigonometrisch an?
    Ich kenne Winkel und Auslenkungsweite, und daher den Ausschlag nach Stärke und Richtung (s. (1)+(2) ),
    aber wie kriegt man jetzt daraus die gegenläufige Kettenbewegung zwischen 45-90° ?

    Hat das schon mal wer gemacht oder kennt einen Link?

    (wenns per Formel nicht klappt muss notfalls eine Lookup-Tabelle her, das finde ich aber SEHR hässlich!)
    Geändert von HaWe (28.02.2016 um 20:09 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    865
    Keine Ahnung, ob das hilft, probiers einfach aus:

    Code:
    // Calculate joystick data to tank mixed control 
            private void CalculateTankCoordinates()
            {
                double d = 0;
                int A = 0, B = 0;
                d = ((MaxY - System.Math.Abs(ValueY)) * (System.Math.Abs(ValueX) / MaxX));
                if (ValueX >= 0)
                {
                    A = (int)(ValueY + d);
                    B = (int)(ValueY - d);
                }
                else
                {
                    A = (int)(ValueY - d);
                    B = (int)(ValueY + d);
                }
                ValueLeft = A;
                ValueRight = B;
                
            }
    Mit ValueX/Y: Eingangswerte
    MaxX/MaxY: Maximalausschläge
    ValueLeft/Right: Ausgangswerte als int konvertiert (so ne PWM kann ja mit doubles nix anfangen)

  3. #3
    HaWe
    Gast
    hallo,
    ganz vielen Dank! Das muss ich wirklich mal ausprobieren und gucken was rauskommt, vielleicht sogar mal mit Excel simulieren.
    Überraschend ist, dass A und B nur aus ValueY abgeleitet werden, und ValueX gar nicht dabei vorkommt, aber mal gucken...

    danke nochmal! 8-)

    - - - Aktualisiert - - -

    ps,

    deine Stichwörter waren aber gar nicht schlecht - klar, nach "tank" muss man suchen....
    habe damit nochmal gesucht und jetzt zusätzlich gefunden:

    http://home.kendra.com/mauser/Joystick.html

    Get X and Y from the Joystick, do whatever scaling and calibrating you need to do based on your hardware.
    Invert X
    Calculate R+L (Call it V): V =(100-ABS(X)) * (Y/100) + Y
    Calculate R-L (Call it W): W= (100-ABS(Y)) * (X/100) + X
    Calculate R: R = (V+W) /2
    Calculate L: L= (V-W)/2
    Do any scaling on R and L your hardware may require.
    Send those values to your Robot.
    Go back to 1.


    und der noch:

    http://electronics.stackexchange.com...al-motor-drive


    muss ich beide auch mal durchprobieren!

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    865
    Zitat Zitat von HaWe Beitrag anzeigen
    Überraschend ist, dass A und B nur aus ValueY abgeleitet werden, und ValueX gar nicht dabei vorkommt, aber mal gucken...
    Das ist nicht richtig. ValueY gibt hier die Vorwärts/Rückwärts-Geschwindigkeit (auf dem Bildschirm ist das Vorwärts/Rückwärts in Y-Richtung) für beide Ketten an. Je nach Seitenausschlag wird dann auf die eine Kette d aufgeschlagen und auf der anderen Seite d von dieser Geschwindigkeit subtrahiert. d ist sehr wohl von ValueX abhängig.

  5. #5
    HaWe
    Gast
    hallo,
    da ich den Code für einen Arduino brauche und der Arduino-Link
    http://electronics.stackexchange.com...al-motor-drive
    bereits auch alle Skalierungen für analogRead und pwm-out hatte, und er wirklich gut funktioniert, habe ich mich für diesen entschieden.

    In jedem Fall aber vielen Dank nochmals für deinen Tipp!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    865
    Keine Ursache.

    Als ich damals 'nen virtuellen Joystick für C# programmieren wollte, hab ich allerdings auch erst mal ne Stunde blöde geguckt.
    Erst dann fiel mir auf, dass ich einfach den Seitwärtsausschlag auf die Vorwärts-/Rückwärts-Geschwindigkeit auf der einen Seite subtrahieren muss und auf der anderen Seite addieren.

    Manchmal hilft nur festes Nachdenken, auch wenn's weh tut.

  7. #7
    HaWe
    Gast
    Manchmal hilft nur festes Nachdenken, auch wenn's weh tut.
    ja, und manchmal helfen auch kluge Vordenker 8-)

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Ich würde beide Potis getrennt mit PWM auswerten: ersten fürs Lenken (links bzw. rechts) und zweiten für Fahrrichtung (votwärts bzw. rückwerts).
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  9. #9
    HaWe
    Gast
    nein, nicht nötig was zu ändern, so wie es ist, ist es ideal!

    es ist ja schließlich für einen Differential-Antrieb!

  10. #10
    HaWe
    Gast
    also ich kapiers nicht.
    Ich kriege bei dem C# code überhaupt keine brauchbaren Ergebnisse, und beim Arduino-Code habe ich einen ganz hässlichen offset drin von
    L +100 R -35
    (in Nullstellung, bei Auslenkung verschiebt sich der Fehler leider sogar).
    ...und seltsamerweise besonders schlimm dann, wenn gleichzeitig ein UART-Übertragungsprotokoll für die Fernsteuerung läuft, wofür es ja gebraucht wird!

    Ob nicht jemand doch einen funktionierenden, getesteten Code hat?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 01.11.2017, 12:53
  2. Panzer/Raupe mit 2-Achs Joystick
    Von goerdy im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 17.07.2012, 20:02
  3. Antworten: 2
    Letzter Beitrag: 15.06.2011, 21:18
  4. Panzer-/ Raupenketten "Links"
    Von squelver im Forum Mechanik
    Antworten: 34
    Letzter Beitrag: 17.05.2007, 16:47
  5. SnugTerm (aka "Winterm") - serielle Fernsteuerung
    Von Andree-HB im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 12
    Letzter Beitrag: 16.04.2007, 14:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress