Wieviel Bodenfreiheit hast du jetzt?
Druckbare Version
Wieviel Bodenfreiheit hast du jetzt?
Hallo,
ich habe die Motoren mal 1 1/2 Akkus ohne Räder einfahren lassen, jetzt habe ich nur keine Akkus mehr, um zu testen, ob der Bot jetzt geradeaus fährt. werde ich also morgen testen müssen.
die Bodenfreiheit beträgt ganze 49mm. Also recht viel.
@Mark,
hast du mal eine genauere Beschreibung eines PID-Reglers? Ich habe mir zwar das aus Wikipedia und der Wiki durchgelesen, habe auch google angestrengt, aber aus den Infos werde ich nicht schlau, wie ich das aufbauen muss. :-k
Vor allem verwirrt mich diese Bild etwas:
Bild hier
jon
Der PID wirde am Besten funktionieren, wenn du an jeden Motor direkt an die Welle kämst, um dort die Drehzahl ablesen zu können. PID-Regler lieben hohe Eingangswerte für eine schnelle Regelung. Einen Bascom-Schnipsel hätte ich für Dich. Aber unbedingt ein Studium der Reglergleichung machen ;-)
Wie soll ich das verstehen? Was ist kämen?Zitat:
Zitat von Opus
Auf jeden Fall mal her damit!Zitat:
Zitat von Opus
jon
kämst = kommen würdest...
Der Code ist angepasst an einen Modellbauregler. Ich habe nur wenige Eingangsimpulse (10 pro Radumdrehung) und nehme daher die Timerzeit zwischen den abfallenden Flanken bei Pulsein Pulse...Code:'DIMs for PID
Dim Cc As Integer
Dim C_old As Integer
Dim Drive As Bit ' Regulator on ?
Dim Manual_value As Single ' Output if not regulating
Dim Pulse As Word
Dim Pakt As Word
Dim Sp As Single ' Setpoint
Dim Pv As Single ' Process Value
Dim Cv As Single ' PID output
Dim First_execution As Byte ' First start recognition
Dim Initial_error As Single ' Startup difference
Dim Last_pv As Single ' Last PV
Dim Last_sp As Single ' Last SP
Dim Sum_error As Single ' Summed error value
Dim D_pv As Single ' Derrivated delta PV
Dim Error As Single ' Difference between SP and PV
Dim Pterm As Single ' Proportional calculated part
Dim Iterm As Single ' Integrated calculated part
Dim Dterm As Single
'-----------------------
do
alles mögliche und...
Drive = 1
Pulsein Pulse , Pind , 3 , 0 ' time slices
If Pulse = Pakt Then Goto Aa ' nur rechnen bei neuem Wert
Pakt = Pulse
Incr Etappe
If Pakt = 0 Then Pakt = 38000
Pv = Pakt / 111 'Fahrt start
Gosub Regulator
If C_old = Cc Then Goto Aa 'Servo nur bei neuem Wert stellen
Call Servo(4 , Cc)
C_old = Cc
while
'----------------------------------------------
Regulator:
' -----[ Start of PID Regulator]---------------------------------------------
Const Kp = 0.29 ' Proportional factor Eingang x P
Const Ki = .25 ' Integration factor diff + diff x zeit
Const Kd = .65 ' Derivation factor abweichung x zeit
Sp = Speed
' Derivated calculated part
' -----[ Code ]--------------------------------------------------------------
If Drive = 1 Then
' -------- Regulating modus
Error = Sp - Pv
Sum_error = Sum_error + Error
Iterm = Ki * Sum_error ' Integrated CV part
' -------- First time startup
If First_execution < 2 Then
If First_execution = 0 Then
Sum_error = Manual_value / Ki
First_execution = 1
Initial_error = Error
End If
Pterm = 0
Dterm = 0
If Initial_error > 0 And Error < 0 Then
First_execution = 2
Last_pv = Pv
End If
If Initial_error < 0 And Error > 0 Then
First_execution = 2
Last_pv = Pv
End If
Last_sp = Sp
' -------- Normal calculation loop
Else
D_pv = Last_pv - Pv
Last_pv = Pv
Dterm = Kd * D_pv ' Derivated CV part
If Sp = Last_sp Then
' -------- Normal loop when setpoint not changed
Pterm = Kp * Error ' Proportional CV part
' -------- Loop when setpoint changed
Else
Pterm = 0
Dterm = 0
If Sp > Last_sp And Pv > Sp Then
Last_sp = Sp
Last_pv = Pv
End If
If Sp < Last_sp And Pv < Sp Then
Last_sp = Sp
Last_pv = Pv
End If
End If ' Enf of SP change seperation '
End If ' Enf of first time running seperation '
Cv = Pterm + Iterm ' Summing of the tree
Cv = Cv + Dterm ' calculated terms
' -------- Forced modus
Else ' When running in non regulationg modus
Cv = Manual_value ' Set output to predefined value
First_execution = 0 ' restart bumpless
End If
If Cv < -5000 Then Cv = -5000
If 5000 < Cv Then Cv = 5000
Cc = Cv / 100
Cc = Cc * 2
If Backwards = 0 Then
Cc = 128 + Cc
If Cc < 80 Then Cc = 80
If 128 < Cc Then Cc = 128
Else
Cc = 120 - Cc 'bei Rückwärtsfahrt
If Cc < 128 Then Cc = 128
If 170 < Cc Then Cc = 170
End If
'Print "P_akt:" ; Pakt ; " Cv:" ; Cv ; " CC: " ; Cc ; "Car_bearing" ; Car_bearing
Return
Ich hoffe, alle DIMs mitgegeben zu haben. Übrigens stammt der Code auch aus diesem Forum. Ich finde nur die Stelle nicht mehr.
Warum muss das eigentlich so kompliziert sein?
Reicht es nicht, wenn ich auf beiden Seiten die Umdrehungen messe und dann die Seite langsamer stelle, die zu schnell dreht? (natürlich nur beim vor und rückwärts fahren)
jon
Kannst du nicht alle paar Sekunden den Bot nach dem Kompass ausrichten Also Wert speicher, fahren, vergleichen, ausrichten, fahren usw., kann ja alles während der Fahrt gemacht werden (Räder nicht gegensinnig drehen, halt nur die eine Seite verstärkt).
Theoretisch schon, bei IMADEIT-V1 hat es nur nie geklappt. War aber auch ein ganz anderer Roboter.
Ich denke, ich werde erstmal das Geradeausfahren so zustande bringen, dass ich mit dem PWM-Werten experimentiere, und wenn ich dann einen Kompass angeschlossen habe, erstmal über den. Eigentlich sollte es auf Strecken von bis zu 100m locker funktionieren, mehr als 1km sollte aber schwierig werden, da sich dann der Winkel zum Magnetfeld zu stark ändert, und damit die Ausrichtung nach Norden. Sollte das mit dem Kompass wider Erwarten nicht gehen, werde ich es mit dem Wegstreckensensor machen müssen.
Aber bis dahin wird viel Zeit vergehen.
Ich werde morgen mal versuchen das Layout fertig zu machen, dann weiß ich nämlich, was für Teile ich bei Reichelt bestellen muss, danach werde ich Motorregler kaufen, wenn der Bot dann erstmal durch den µC ohne Sensoren gesteuert wird (Blind fahrt), werde ich mich um die US und IR Sensoren kümmern. Den Kompass werde ich von IMADEIT-V2 nehmen.
Noch eine schöne Nacht und bis morgen!
jon
Hi Jon,
zum Test ob es nicht auch an deinem Fahrgestell liegt, kannst du die Motoren einmal komplett auf die andere Seite setzen. Wenn es an den Motoren liegt müsste er dann nach links drehen.
Und wenn es an den Motoren liegt, kannst du auch nur einen pro Seite tauschen. Dadurch hättest du auf jeder Seite einen langsamen und einen schnellen Motor.
Jörn
#-o Ich habe überlegt, wie ich die Motoren mal tauschen könnte, bin aber nicht auf die Idee gekommen, nur die Motoren mit den Rädern zu tauschen, und nicht die Motoren ohne dir Räder zu tauschen ](*,)
Deswegen; Danke für deinen Hinweis!
jon