nordish1982 hat geschrieben:
Bislang habe ich die Formeln l=(y+x)/2 und r=(y-x)/2 ermittelt. Das funktioniert auch soweit, nur ergibt das zum Beispiel
bei "Volle Kraft voraus", also y=1;x=0 nur 0.5 auf beide Motoren, also halbe Kraft voraus.
Die Beschreibung von deinem 2ten eintrag und deine Formeln hier können irgendwie nicht zusammenpassen.
Denn für folgendes Beispiel: y = 0.5 und x = 0.5 passiert bei dir ja folgendes: l = 0.5 und r = 0. dh. das fahrzeug dreht sich am stand nach rechts. y = 0.5 sollte aber doch eine vorwärtsbewegung mit immerhin der halben Leistung erzeugen oder nicht ?
Eigentlich hast du viele Möglichkeiten wie du von deinem Joysticksignal auf eine Steuerung kommst. Wie wärs mit folgender:
Nehmen wir an x und y bilden ein Koordinatensystem mit den üblichen Bezeichnungen - also x-achse = Horizontale und y-Achse die vertikale (ich verwechsle immer abszisse/ordinate).
dann würde zb y=0.5 und x=0.5 bedeuten das fahrzeug begwegt sich mit halber leistung nach vorne und 50% des möglichen einschlags nach rechts. ein negatives x heisst das fahrzeug fährt nach links und y<0 bedeutet das teil fährt rückwärts.
dann komme ich auf folgenden code:
Code: Alles auswählen
wmax = 2 # maximale Leistung (beide motoren auf vollgas)
g = 2 # gewichtung des verhältnisses bewegung/einlenken
w = y * wmax # die leistung die beide motoren liefern sollen
if y == 0: # voller einschlag falls nur links/rechts betätigt wird
r = -x
l = x
else:
t = w / (g+abs(x))
if x >= 0:
r = t
l = w - t
else:
r = w - t
l = t
Ein Beispiel:
y = 0.3, x = 0.5: vorwärtsbewegung mit 30% maximalleistung und 50% einschlag nach rechts
w = 0.6 -> t=6/25 = 0.24
also r = 0.24 und l = w - t = 0.36
der linke motor bringt also 36% seiner leistung und der rechte 24%, damit macht das fahrzeug eine vorwärtsbewegung mit insgesamt 50% leistung und dreht sich mit 50% nach rechts.
Auch für alle anderen Möglichkeiten liefert das brauchbare ergebnisse.
noch zur Formel t = w / (g + abs(x))
die kommt von folgender Umformung:
[t] + {(1+x) * t }= w
mit [eckige klammer] = linke motorleistung und {runde klammer} = rechte motorleistung (für positive x werte) sollen zusammen ja die leistung w ergeben, vereinfacht also l + r = w
da ja x und w bekannt ist formt man das ganze um und kommt auf obigen ausdruck für t, wobei für g eben 2 gesetzt wird. in diesem fall bedeutet das x also um wieviel % stärker nach rechts eingelenkt werden soll. änderst du das g, verändert sich das verhältnis von vorwärts/einlenk bewegung, kannst ja ein bisschen damit rumspielen um eine optimale steuerung rauszukriegen. dh ein wert kleiner 2 verstärkt den lenkeffekt und ein wert größer 2 macht die lenkung träger.
ich hoffe das funktioniert auch alles

habs am heimweg vom büro mal durchgedacht