Differentialsteuerung Kreuzmischer Kettenfahrzeug

Moin,

ich steh grad n bisschen auf dem Schlauch.

Ich möchte ein Kettenfahrzeug (es ist kein Panzer :slight_smile: ) mit zwei Joysticks ansteuern.
Und zwar nicht jede Kette einzeln kontrollieren, sondern beide gleichzeitig.
Ich glaube sowas heisst Differentialsteuerung oder Kreuzmischer.
Sprich ein Joystick ist für Gas, vorwärts + rückwärts und der andere für links und rechts.
Ich lese also zwei Joysticks aus.
Die Werte sind folgendermaßen:
Gas vorwärts: 0
Gas Mittelstellung: 512
Gas rückwärts: 1023
Lenkung links: 0
Lenkung Mittelstellung: 512
Lenkung rechts: 1023
Diese Zahlen möchte ich nun verrechnen, so dass folgende Gaswerte für beide Ketten dabei herauskommen:
Nennen wir die Kette links "L" und die Kette rechts "R".
Fahrzeug fährt vorwärts: L = 0, R = 0
Fahrzeug steht: L = 512, R = 512
Fahrzeug fährt rückwärts: L = 1023, R = 1023

Fahrzeug fährt voll vorwärts und eine leichte Rechtskurve: L = 0, R = 100
Fahrzeug fährt voll vorwärts und eine mittlere Rechtskurve: L = 0, R = 500
Fahrzeug fährt voll vorwärts und eine starke Rechtskurve: L = 0, R = 800
Fahrzeug fährt auf dem Teller rechtsrum: L = 0, R = 1023

Fahrzeug fährt voll vorwärts und eine leichte Linkskurve: L = 100, R = 0
Fahrzeug fährt voll vorwärts und eine mittlere Linkskurve: L = 500, R = 0
Fahrzeug fährt voll vorwärts und eine starke Linkskurve: L = 800, R = 0
Fahrzeug fährt auf dem Teller linksrum: L = 1023, R = 0

Fahrzeug fährt voll rückwärts und eine leichte Linkskurve: L = 1023, R = 923
Fahrzeug fährt voll rückwärts und eine mittlere Linkskurve: L = 1023, R = 523
Fahrzeug fährt voll rückwärts und eine starke Linkskurve: L = 1023, R = 223
Fahrzeug fährt auf dem Teller linksrum: L = 1023, R = 0

Fahrzeug fährt voll rückwärts und eine leichte Rechtskurve: L = 923, R = 1023
Fahrzeug fährt voll rückwärts und eine mittlere Rechtskurve: L = 523, R = 1023
Fahrzeug fährt voll rückwärts und eine starke Rechtskurve: L = 223, R = 1023
Fahrzeug fährt auf dem Teller rechtsrum: L = 0, R = 1023

Nun komme ich nicht so richtig mit den Formeln weiter um aus den beiden Eingabewerten Gas und Lenkung die beiden Gaswerte L und R umzurechnen.

Hat da einer eine gute Idee?

Danke und lieben Gruß,
Chris

Hi

Mit dem Gas-Joystick bestimmst Du die 'Grundgeschwindigkeit' beider Ketten.
Mit dem Lenk-Joystick verschiebst Du diese Geschwindigkeiten.
Wenn Du 'volle Kanne vorwärts' wählst, soll das Fahrzeug mit 100% nach Vorne stürmen.
Wenn Du jetzt zusätzlich 100% Links dabei gibst, kann die rechte Kette ja nicht schneller werden - somit muß die Linke Kette langsamer werden.
Bei 'voll Links' müsste Das, was Du Rechts nicht schneller machen kannst, Links langsamer werden.
Somit sollte unterm Strich Rechts bei 100%, Link bei 0% landen - das Fahrzeug fährt mit maximaler Geschwindigkeit eine Linkskurve.

Im Stand ist diese Verschiebung ebenfalls vorhanden, nur, daß beide Ketten zuvor stehen und Beide verschoben werden können.
Hier dürfte das Ergebnis Rechts 50%, Links -50% ausfallen.

Wenn Du keine Maximalgeschwindigkeit fährst, aber 'voll Einschlägst', wird die kurveninnere Kette langsam rückwärts laufen, während die äußere Kette bei 100% ankommen wird.

Verständlich?

... ach ja ... wenn's läuft, nen Video wäre 'fett' :wink:

MfG

Erst mal eine grundsätzliche Frage: wie steuerst Du die Motoren an?
Normalerweise muß dafür ein Signal für die Drehrichtung (vorwärts/rückwärts) und eines für die Geschwindigkeit vorgegeben werden. Das sollte geklärt werden, bevor wir mit Zahlenwerten hantieren.

Den Rest hat postmaster ja schon erklärt, die eine Kette läuft mit Gas+Lenkung, die andere mit Gas-Lenkung. Und da muß irgendwie sichergestellt werden, daß kein Motor schneller als mit Vollgas laufen soll.

also ich würde das in kleine Aufgaben zerteilen und zunächst diese Vorwärts/Rückwärts Links/Rechts Übergänge klar trennen und schrittweise probieren.

Dann die Idee von postmaster aufgreifen und dann käme man ca auf so etwas:

Pseudo:

WENN (Gashebel < 512)               // Vorwärts
      Grundleistung = 512-Gashebel
      Motor_links = Grundleistung 
      Motor_rechts = Grundleistung 

      WENN (Lenkung > 512)    // Rechtskurve 
            langsamer = (Lenkung-512)*100/512            // je mehr Rechts desto weniger
            Motor_rechts = Grundleistung * langsamer

      WENN (Lenkung < 512)    // Linkskurve
            langsamer = Lenkung*100/512                  // je mehr links desto weniger
            Motor_links = Grundleistung * langsamer  


WENN (Gashebel > 512)             // Rückwärts
      Grundleistung = Gashebel - 512
      ...

Rückwärtsfahrt muss dann noch umdenken. Ich habe mich da jetzt bestimmt irgendwo Denkfehler drinnen, aber wenn man es erst mal hingeschrieben hat und ein Modell dazu hat, kommt man da schon drauf.

Für das bessere Verstehen würde ich den Wertebereich verschieben auf 512, 0 und -512
das was du möchtest, nannte sich vor Jahrzehnten Vollwegmischer, im Gegensatz zum Proportionalmischer. Kann so auch bei zweimotorigen Booten eingesetzt werden.

Nach dem Verrechnen musst du noch das Ergebnis auf max. 512 bzw. -512 begrenzen.

Kannst du nun den Wald schon sehen oder bloß Bäume?

Weil dann könnte ich mich später kurz an den PC setzen und die paar Zeilen schreiben.

Moin,

Kannst du nun den Wald schon sehen oder bloß Bäume?

Hab ihn schon abgeholzt! :slight_smile:

Weil dann könnte ich mich später kurz an den PC setzen und die paar Zeilen schreiben.

Vielen lieben Dank, aber in diesem Fall gar nicht mehr nötig!

Erst mal eine grundsätzliche Frage: wie steuerst Du die Motoren an?
Normalerweise muß dafür ein Signal für die Drehrichtung (vorwärts/rückwärts) und eines für die Geschwindigkeit vorgegeben werden. Das sollte geklärt werden, bevor wir mit Zahlenwerten hantieren

Sorry, hatte ich nicht erwähnt, weil ich die Frage ja auf das Wesentliche reduziert habe.
Die nötigen Zahlen hatte ich im Eingabspost ja geschrieben.
Dennoch schreibe ich es natürlich gerne:
Es handelt sich dabei um die LEGO Power Functions und speziell um den LEGO Technic RC Tracked Racer 42065 für meinen 4-jährigen Sohn.
Dabei ist eine IR Ferbedienung, die aber nur zwei Schaltkanäle mit jeweils Vollgas vorwärts, Stopp, Vollgas rückwärts hat.
Auf der Suche nach einer geeigneten Fernbedienung wurde ich sehr enttäuscht, denn sowas gibt es nicht. Für mich als RC Modellbauer mit über 22 Jahren Erfahrung völlig unverständlich.
Dann habe ich die Lego Powerfunctions Library (PFTransmitter.h) gefunden und einen Playstation Controller und einen Arduino nano v3 gekauft und nun ist die Software fertig und funktioniert :slight_smile:
Das coole ist, dass der Lego Empfänger nicht nur Vollgas schalten kann, sondern auch mehrstufig (ich glaube 8 Stufen für je vorwärts und rückwärts, nicht stufenlos, reicht aber) PWM ansteuerbar ist. Und das tut mein selbstgebauter Sender jetzt auch.
Damit lässt sich das Teil natürlich wesentlich besser steuern als mit dem originalen Sender.

Ich musste einfach nur ne Nacht drüber schlafen.
Dann hab ich an meinen RC Sender und den Servomonitor gedacht und mir vorgestellt wie das aussehen muss.
Das hatte ich ja im Eingangpost schon geschrieben, ist mir danach aber auch erst richtig klar geworden.
Dann hab ich mir in Excel ein paar Tabellen aufgemalt und die Ergebnisse erzeugt.
Der Knackpunkt war, dass ich nicht daran gedacht habe Werte zu kappen die über die erlaubte Skala hinausgehen.
Das war dann der Schlüssel zur Lösung.
Mit Wertebereichen für Gas und Lenkung von +/-100 war das dann schnell erledigt.
Mit den Wertebereichen vom Arduino von 0 bis 1023 war das dann doch nochmal ne schöne Knobelarbeit.
Das hat auch nicht auf Anhieb geklappt, also hab ich mir das nochmal in Excel aufgemalt und dann step-by-step entwickelt.
Mit dem Ergebnis dass es nun softwareseitig perfekt funktioniert.

Hier der Extrakt aus dem Code mit der selbsterarbeiteten Lösung meines Problems, die ich euch natürlich nicht vorenthalten möchte:

  // Gas = Gas
  // Lenkung = Lenkung
  // valA = linke Kette
  // valB = rechte Kette
  // yUp = 0         voll vorwärts
  // yMid = 500      stopp
  // yDown = 1023    voll rückwärts
  // xLeft = 0       voll links
  // xMid = 504      gerade
  // xright = 1023   voll rechts
  //----------------------------linke Kette------------------------------------------------------------------------------------------------------------
  if (Gas - Lenkung + xMid < yMid + 1) {   // wenn die Differenz aus Gas und Lenkung vorwärts fahren ist
    if (Gas - Lenkung + xMid > yUp) {        // wenn die Differenz aus Gas und Lenkung weniger als Vollgas vorwärts ist
      valA = Gas - Lenkung + xMid;             // dann linke Kette = Gas - Lenkung
    } else {
      valA = yUp;                              // ansonsten linke Kette = Vollgas vorwärts
    }
  } else {                                 // ansonsten ist die Differenz aus Gas und Lenkung rückwärts fahren
    if (Gas - Lenkung + xMid < yDown) {      // wenn die Differenz aus Gas und Lenkung weniger als Vollgas rückwärts ist
      valA = Gas - Lenkung + xMid;             // dann linke Kette = Gas - Lenkung
    } else {
      valA = yDown;                            // ansonsten linke Kette = Vollgas rückwärts
    }
  }
  //----------------------------rechte Kette------------------------------------------------------------------------------------------------------------
  if (Gas + Lenkung - xMid < yMid + 1) {   // wenn die Summe aus Gas und Lenkung vorwärts fahren ist
    if (Gas + Lenkung - xMid > yUp) {        // wenn die Summe aus Gas und Lenkung weniger als Vollgas vorwärts ist
      valB = Gas + Lenkung - xMid;             // dann rechte Kette = Gas + Lenkung
    } else {
      valB = yUp;                              // ansonsten rechte Kette = Vollgas vorwärts
    }
  } else {                                 // ansonsten ist die Summe aus Gas und Lenkung rückwärts fahren
    if (Gas + Lenkung - xMid < yDown) {      // wenn die Summe aus Gas und Lenkung weniger als Vollgas rückwärts ist
      valB = Gas + Lenkung - xMid;             // dann rechte Kette = Gas + Lenkung
    } else {
      valB = yDown;                            // ansonsten rechte Kette = Vollgas rückwärts
    }
  }

... ach ja ... wenn's läuft, nen Video wäre 'fett' :wink:

Gerne! Hätte ich auch voll Bock drauf. Wenn ich dann die Hardware mal schön gebaut habe wäre das sicherlich auch was für die Rubrik "Zeigt her eure geilen Projekte ! ".
Allerdings:

Leider hapert es noch an der Hardware, speziell die IR Sendediode die ich hier habe ist grottenschlecht dafür.
Reichweite <1m, Öffnungswinkel gefühlt <25°
Naja, kein Wunder, is ja auch nicht für ne IR Fernsteuerung, sondern für eine IR Reflektorlichtschranke (dafür funktioniert die auch).
Aber die hatte ich hier noch rumliegen und war schnell drangesteckt.

Hat jemand ne Empfehlung für ne richtig gute IR Diode für Fernbedienungen?

Liebe Grüße,
Chris

RC mit IR ist immer Mist. Nimm lieber was mit 433 oder NRF24 Module.

RC mit IR ist immer Mist.

Ja, weiss ich. Siehe oben, über 22 Jahre RC Erfahrung, aber das wollte ich nicht wissen.

  1. Die originale Lego IR Fernbedienung mit nur einer Sendediode hat für diesen Anwendungsfall (4 jähriger Sohn spielt im Wohnzimmer) eine völlig ausreichende Reichweite.

  2. Will ich den originalen Lego Empfänger nicht umbauen oder ersetzen, sondern weiterhin benutzen.

Das sind die gesetzten Randbedingungen.

Und dafür suche ich nun eine optimale IR Sendediode (und nix anderes).

Leider steht auf den Dioden nix drauf, sonst würde ich einfach eine baugleiche Diode wie im Lego Sender verwenden.

Daher meine Frage an Euch:

Hat jemand ne Empfehlung für ne richtig gute IR Diode für Fernbedienungen. Die Trägerfrequenz ist 38kHz.

Liebe Grüße,
Chris

Steht vielleicht am Empfänger etwas drauf?
Ich fürchte wohl auch nicht ...

Die Sache ist nämlich die:
IR-Dioden mit ca. 940nm funktionieren oft sehr gut - es gibt aber auch welche mit 950, 875 oder 880nm und andere.
Generell würde ich sarauf achten, dass sie einen relativ breiten Abstrahlwinkel haben und noch viel wichtiger, dass sie mit hohen Strömen (>100mA) betrieben werden können.

Ich verwende gerne zum Beispiel diese: IR-Emitter 940 nm +/-17 ° 5 mm radial bedrahtet Vishay TSAL 6200
Habe aber keine Erfahrung mit den Lego-Dingern.

Wahrscheinlich sind es 940nm, jedenfalls habe ich solche Hinweise im Internet gefunden