- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 618

Thema: Mono Wheel Bot

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.05.2006
    Beiträge
    260
    Hi,

    saubere Arbeit die Ihr bis jetzt geleistet habt.

    Ich habe jetzt das Software - Monowheel halbwegs zum fahren gebracht.



    Hier ein screenschot des Programms. Rechts kann man mehrere Parameter frei wählen. Der Masstab oben ist in Meter. Unten rechts sieht man die Stellung des Monowheel von hinten. Gesteuert wird mit der Maus. Pendel:Rechts- Links. Beschleunigung: vor-zurück. Die gefahrene Zeit in sec wird angezeigt. Das Tempo kann man an die Rechnergeschwindigkeit anpassen.

    Einfach ist es für mich nicht längere Zeit monowheel zu fahren. Die Wirkung der Pendel ist relativ komplex und stark, da Impus und Schwerpunktsverlagerung entgegengesetzt wirken. Wobei der Effekt durch den Impuls kräftiger ist. Es kommt leicht zu einem Hin - und Herpendeln, was aber durch passende Pendelausschläge wieder gedämpft werden kann. Man braucht ein Feld von mindestens 10 m. Aufrichten mit Beschleunigen funktioniert.

    Nicht berücksichtigt ist das Vor- und Zurückpendel des Innenteils bei Beschleunigen oder Abbremsen.

    Hier der gesamte VB6- Code

    Code:
    Dim MotorDrehm, Antrieb, J, Mg, Hs, w, wneu, wkr, wkrneu, phi, phineu, Hp, Mp, Mrad, r, alpha, alphaneu, D, alphapunkt, alphapunktneu, n, t, g, pi, X, xneu, Y, yneu, v, Xmaus, Ymaus, Meter, Pendelausschlag, Pendelausschlagneu
    Dim F1, F2, F3, F4
    
    Private Sub Form_Load()
    Mg = 4: Mrad = 1: Mp = 0.1: r = 0.3: Hs = 0.2: alpha = 0: Hp = 0.4: D = 0.1: g = 10
    wkr = 0: v = 1.5: n = 1000: g = 10: MotorDrehm = 0.3: Meter = 100
    pi = 3.1415926535
    Label1 = "Zeitfaktor:" & vbCrLf & "Gesamtmasse (kg):" & vbCrLf & "Masse Reifen (kg):" & vbCrLf & "Radius Reifen (m):" & vbCrLf & "Höhe Schwerpunkt (m):" & vbCrLf & "Höhe Pendel (m):" & vbCrLf & "Masse Pendel (kg):" & vbCrLf & "Länge Pendel (m):" & vbCrLf & "Geschwindigkeit (m/s):" & vbCrLf & "MotorDrehmoment Nm:" & vbCrLf & "Massstab"
    Text2 = n: Text3 = Mg: Text4 = Mrad: Text5 = r: Text6 = Hs: Text7 = Hp: Text8 = Mp: Text9 = D: Text10 = v: Text11 = MotorDrehm: Text13 = Meter
    Command1.Caption = "Start"
    Form1.Show
    End Sub
    
    
    Sub berechnen()
    On Error Resume Next
    J = Mrad * r ^ 2
    
    Do
    DoEvents
    
    'Berechnungen nach  der Formel d/dt (delta L/deltaqi) = deltaL/deltaqi
    'als erstes von qi = alpha
    AbLalpha = AblLalpha(w, wkr, alpha, alphapunkt)
    dif = (AblLalphapunkt(w, wkr, alpha, alphapunkt + 0.0001) - AblLalphapunkt(w, wkr, alpha, alphapunkt)) * 10000
    alphapunktpunkt = AbLalpha / dif
    
    ' qi = w und qi = wkr hängen voneinander ab und werden durch Iteration bestimmt
    wkrpunkt = 1: wpunkt = 1
    For i = 1 To 10
    DoEvents
    dif1 = AblLw(w + wpunkt * 0.0001, wkr + wkrpunkt * 0.0001, alpha + alphapunkt * 0.0001, alphapunkt + alphapunktpunkt * 0.0001) - AblLw(w, wkr, alpha, alphapunkt)
    dif2 = AblLw(w + wpunkt * 0.0002, wkr + wkrpunkt * 0.0001, alpha + alphapunkt * 0.0001, alphapunkt + alphapunktpunkt * 0.0001) - AblLw(w, wkr, alpha, alphapunkt)
    wpunkt = wpunkt - wpunkt / (dif2 - dif1) * dif1
    dif3 = AblLwkr(w + wpunkt * 0.0001, wkr + wkrpunkt * 0.0001, alpha + alphapunkt * 0.0001, alphapunkt + alphapunktpunkt * 0.0001) - AblLwkr(w, wkr, alpha, alphapunkt)
    dif4 = AblLwkr(w + wpunkt * 0.0001, wkr + wkrpunkt * 0.0002, alpha + alphapunkt * 0.0001, alphapunkt + alphapunktpunkt * 0.0001) - AblLwkr(w, wkr, alpha, alphapunkt)
    wkrpunkt = wkrpunkt - wkrpunkt / (dif4 - dif3) * dif3
    Next
    
    
    'Aktualisieren der Werte nach Berechnung
    wpunkt = wpunkt + Antrieb / J       'Einfluss Motor
    wneu = w + wpunkt / n
    wkrneu = wkr + wkrpunkt / n
    'alphapunktpunkt = alphapunktpunkt + Pendelausschlagneu * Mp * Cos(alpha) / Mg / Hs ^ 2 ' Einfluss Pendel durch Schwerpunktverlagerung
    alphapunktneu = alphapunkt + alphapunktpunkt / n
    alphapunktneu = alphapunktneu - (Pendelausschlagneu - Pendelausschlag) * n * Mp * Hp / Mg / Hs ^ 2 ' Einfluss Pendel durch Impuls
    alphaneu = alpha + alphapunktneu / n
    v = wneu * r
    phineu = phi + wkrneu / n
    xneu = X + v * Sin(phineu) / n: yneu = Y + v * Cos(phineu) / n:
    
    zeichnen
    
    alphapunkt = alphapunktneu: alpha = alphaneu: w = wneu: wkr = wkrneu: phi = phineu: X = xneu: Y = yneu: Pendelausschlag = Pendelausschlagneu
    If alpha > pi / 2 Or alpha < -pi / 2 Then Command1.Caption = "Start"
    If Command1.Caption = "Start" Then Exit Sub
    DoEvents
    Loop
    End Sub
    
    
    Function L(w, wkr, alpha, alphapunkt)  'Lagrange-Funktion
    DoEvents
        L = 1 / 2 * Mg * (w * r - wkr * Hs * Sin(alpha)) ^ 2 'kinetische Energie durch Vorwärtsbewegung
        L = L + 1 / 2 * J * w ^ 2 'kinetische Energie durch Raddrehung
        L = L + 1 / 2 * Mg * Hs ^ 2 * alphapunkt ^ 2 'kinetische Energie durch Kippen
        L = L + 1 / 2 * Mrad * r ^ 2 * (1 + Sin(alpha) * Sin(alpha)) * wkr ^ 2 'kinetische Energie durch Raddrehung um Hochachse
        L = L - Mg * Hs * g * Cos(alpha)    'potentielle Energie
    End Function
    Function AblLw(w, wkr, alpha, alphapunkt) 'partielle Ableitung der Lagrange -Funktion nach w
        AblLw = L(w + 0.0001, wkr, alpha, alphapunkt) - L(w, wkr, alpha, alphapunkt)
        AblLw = AblLw * 10000
    End Function
    Function AblLwkr(w, wkr, alpha, alphapunkt) 'partielle Ableitung der Lagrange -Funktion nach wkr
        AblLwkr = L(w, wkr + 0.0001, alpha, alphapunkt) - L(w, wkr, alpha, alphapunkt)
        AblLwkr = AblLwkr * 10000
    End Function
    Function AblLalpha(w, wkr, alpha, alphapunkt) 'partielle Ableitung der Lagrange -Funktion nach alpha
        AblLalpha = L(w, wkr, alpha + 0.0001, alphapunkt) - L(w, wkr, alpha, alphapunkt)
        AblLalpha = AblLalpha * 10000
    End Function
    Function AblLalphapunkt(w, wkr, alpha, alphapunkt) 'partielle Ableitung der Lagrange -Funktion nach alphapunkt
        AblLalphapunkt = L(w, wkr, alpha, alphapunkt + 0.0001) - L(w, wkr, alpha, alphapunkt)
        AblLalphapunkt = AblLalphapunkt * 10000
    End Function
    
    
    Sub Formeln()
    'w = v / r
    'J = Mrad * r ^ 2
    'vs = v - wkr * Hs * Sin(alpha)
    'vs = w * r - wkr * Hs * Sin(alpha)
    'E = 1 / 2 * Mg * vs ^ 2
    
    'E = 1 / 2 * Mg * (w * r - wkr * Hs * Sin(alpha)) ^ 2
    'E = E + 1 / 2 * J * w ^ 2
    'E = E + 1 / 2 * Mg * Hs ^ 2 * alphapunkt ^ 2
    'E = E + 1 / 2 * J * (1 + Sin(alpha) * Sin(alpha)) * wkr ^ 2
    'P = Mg * Hs * g * Cos(alpha)
    'L = E - P
    'd/dt (delta L/deltaqi) = deltaL/deltaqi
    End Sub
    
    
    Private Sub Command1_Click()
    If Command1.Caption = "Stop" Then
        Command1.Caption = "Start"
    Else
        Command1.Caption = "Stop"
        t = 1: w = 0: wkr = 0: alpha = 0: alphapunkt = 0: X = 0: Y = 0: phi = 0
        n = Text2: Mg = Text3: Mrad = Text4: r = Text5: Hs = Text6: Hp = Text7: Mp = Text8: D = Text9: v = Text10: MotorDrehm = Text11: Meter = Text13
        w = v / r
        Picture1.Cls
        For i = 1 To 300
        Picture1.Line (Meter * i, 1)-(Meter * i, 100)
        Next
        berechnen
    End If
    End Sub
    Sub zeichnen()
    t = t + 1
    Picture1.Line (3000 - Meter * X, 3000 - Meter * Y)-(3000 - Meter * xneu, 3000 - Meter * yneu)
    Picture2.Cls
    Picture2.Line (700, 700)-(700 - 500 * Sin(alpha), 700 - 500 * Cos(alpha))
    Text1 = "Sec: " & t / n
    Picture1.Refresh
    Text12 = "Geschw.: " & Format(v, "##.###"): Text12.Refresh
    End Sub
    
    Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Command1.Caption = "Start" Then Xmaus = X: Ymaus = Y
    D1 = X - Xmaus: D2 = Ymaus - Y
    If D2 >= 600 Then D2 = 600
    If D2 <= -600 Then D2 = -600
    If D1 >= 300 Then D1 = 300
    If D1 <= -300 Then D1 = -300
    Pendelausschlagneu = -D1 / 300 * D
    Antrieb = MotorDrehm * D2 / 600
    Picture3.Cls
    Picture3.Circle (700 + D1, 700 - D2), 50
    End Sub
    Die Berechnunger erfolgen mit dem Lagrange-Formalismus. Wer sich damit auskennt, den möchte ich bitten darüber zu sehen. Fehler sind natürlich nicht auszuschließen. Insb. bin ich mir nicht sicher ob ich die Pendel halbwegs richtig eingebunden habe. Abgesehen von den Pendel bin ich mir ziemlich sicher, dass die Berechnungen realistisch sind.


    Leider kann ich keine zip-Dateien erstellen. Natürlich möchte ich Euch bei Interesse das Programm zur Verfügung stellen. Wem kann ich vielleicht den PaketOrdner mailen, damit er Sie als zip - Datei ins Internet stellt ??


    Vielleicht kann man doch die Eigenschaften des Monowheel gut vorhersagen und gleich bei der ersten Probefahrt richtig loslegen.
    Der A370 hat das erste Mal ja schließlich auch ohne Stützräder abgehoben.

    In Zeitlupe zu fahren ist relativ einfach. Da kann man schnell mit den Pendel regieren. In Echtzeit (bei mir Zeitfaktor 200) bin ich, insb. wenn ich aus dem Stand losfahren will zu langsam mit meinen Reaktionen. In Zeitlupe ist aber die Simulation genauer, da die zeitl. Auflösung ja höher ist. Das Aufschaukeln zu Pendelbewegungen ist in Zeitlupe geringer und somit wohl z.Tl. durch die Simulation bedingt und in der Realität hoffentlich geringer.


    Christian
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken monowheel_196.jpg   monowheel2.jpg  

Berechtigungen

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

Solar Speicher und Akkus Tests