- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Linienverfolgung

  1. #11
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Anzeige

    Praxistest und DIY Projekte
    Wie gesagt, keine Doppelposts bitte. Ich werde die Posts jetzt nicht löschen, aber bitte lass das in zukunft sein.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    und hat es funktioniert?
    naja, aber jetzt habe ich noch eine frage zu euch:
    was meint iht mit einem thread oder einem neuen thread?
    ich dachte das wär das gleiche?^^

  3. #13
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    du schreibst die frage in 3 threads, also 3 themen. das solltest du nciht machen. entweder du schreibst es in einen (!!) vorhandenen thread, oder wenn du wirklcih nichts zum thema gefunden hast, eröffnest du einen neuen thread um deine frage zu stellen. aber nicht überall reinschreiben! danke
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    03.09.2008
    Beiträge
    21
    Hallo ich bin noch ziemlich am anfang mit c++(komme aus der php welt )

    und hätte folgende frage....
    was genau passiert hier
    links=120-(diffr*3);
    rechts=120-(diffl*3);
    if (links>120) {links=120;}
    if (rechts>120) {rechts=120;}
    kannst du bitte ne genauere erläuterung schreiben was dieser teil deines scriptes bringt?
    mfg lukas

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Hi,

    bitte nicht verwechseln, das ist das C Programm und kein C++ Script.
    Zum Programm selbst (ähnelt sich die Syntax nicht sowieso?):

    "links" und "rechts" sind Variablen, die die Geschwindigkeit der Motoren angeben.
    120 ist dabei ein guter Wert, der einfach eine bestimmte Geschwindigkeit definiert.
    Und in dem von dir geposteten Teil, wird eben diese Geschwindikeit anhand der Abweichungen der Sensoren eingestellt.
    Angenommen der linke Fototransistor hat den Wert 100, der rechte 150. (rein fiktive Werte)
    diffl wäre dann -50, diffr wäre 50.
    Die Geschwindigkeit des linken Motors wäre dann:
    120-(50*3)=-30.
    Rechts wäre: 120-(-50*3)=270.
    Danach wird allerdings abgefragt: Falls einer der beiden Werte größer als 120 ist, wird er auf 120 gesetzt.
    Der rechte Motor dreht also mit "120", der linke mit "-30".
    Achtung! Diese Werte werden wahrscheinlich NIE erreicht, die beiden Transistoren haben fast immer dieselben Werte (sie liegen ja direkt nebeneinander) und sobald ein Wert abweicht wird sofort korrigiert.
    Dennoch, die Motoren werden jetzt demnach eingestellt, der rechte Motor dreht also schneller als der linke, was eine Linkskurve zur Folge hätte. Das muss auch so sein, immerhin war der Wert des linken Transistors kleiner als der des rechten. Und wie du aus meiner Befehlsliste entnehmen kannst (siehe Signatur) bedeutet ein kleiner Wert gleich "mehr schwarz", was bedeutet das der Asuro von der Linie abkommt und demnach nach links korrigieren muss.

    Hoffe das war enigermaßen verständlich
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    03.09.2008
    Beiträge
    21
    sry meine frage war doof formuliert...aber super antwort

    eigentlich wollte ich wissen wie man hier drauf kommt
    "Die Geschwindigkeit des linken Motors wäre dann:
    120-(50*3)=-30.
    Rechts wäre: 120-(-50*3)=270. "

    warum wir dieser differenzwert verdreifacht und dann abgezogen?....sinn?
    "Danach wird allerdings abgefragt: Falls einer der beiden Werte größer als 120 ist, wird er auf 120 gesetzt. "
    wenn die "normal"geschwindigkeit doch bei 120 liegt warum wird dann "Rechts wäre: 120-(-50*3)=270." dieser wert ermittelt :P sry bin warscheinlich nur ein bisschen schwer von begriff

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Irgendwie musst du ja auf die Wertänderung der Fototransistoren reagieren. Du könntest natürlich auch sagen "sobald sich der der Wert um eine gewisse Spanne ändert, bremse den richten Motor um den Spannwert ab" oder weiss Gott was. Das bleibt alleine dir überlassen.
    Da wird sich der Autor des Programmes schon etwas dabei gedacht haben. Du könntest ja mal ein paar Werte durchrechnen, vielleicht ergibt sich mit dieser Formel die Beste Repositionierung.
    Lies dir einfach mal den 4. und 5. Beitrag dieses Threads durch
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    03.09.2008
    Beiträge
    21
    hm mir is ist eigentlich schon klar was da passiert aber das kann ja garnicht funktionieren(es funtioniert auf meinem asuro auch nicht) die differenz zwischen dem weißen plakat und der schwarzen linie liegt ja schon bei ca 800(bei meinem asuro eigentlich müsste sie ja bei 1000 nochwas leigen) und wenn jetzt diese differenz * 3 genommen -> und von den 120 abgezogen wird bleibt ja zwangsmäßig immer ein motor stehen oder? (bei mir bleiben nach einer weile sogar beide stehen)

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Du solltest lieber den gesamten Code ansehen und nicht nur einen Bruchteil, denn genau 2 Zeilen davor steht:
    diffl=data[0]-data[1];
    diffr=data[1]-data[0];
    Das heisst es wird immer nur die DIFFERENZ vom linken zum rechten Sensor als Referenz genommen.
    Und ausserdem, der Sensor wird nicht von einer Sekunde auf die andere von schwarz auf weiß kommen, sondern die "Beleuchtungsstärke" nimmt kontinuierlich leicht ab/zu. Beispielsweise bei einer leichten Linkskurve, fährt der Asuro gerade aus. Nun wird der Wert des linken Fototransistors niedriger, weil die Led ja (links) auf die schwarze Bahn kommt und weniger Licht reflektiert wird. Der Wert des rechten Fototransistors nimmt zu, weil er langsam auf die weiße Fläche kommt. Somit ist die Änderung der beiden Transistoren PRO Schleifendurchlauf nur äußerst gering. (Vergiss nicht wie oft die Schleife pro Sekunde durchlaufen wird). Ich schätze auf einen maximalen Änderungswert von 10-20. Sagen wir beide Transistorwerte ändern sich um 10 (also der linke um 10 dünkler, der rechte um 10 heller), bei einem Ausgangswert von 100 bei beiden, dank gleichmäßiger Beleuchtung auf einer geraden Strecke. Dann wäre "diffl" gleich 90-110=-20, "diffr" wäre 110-90=20.
    Und nun gehts weiter mit:
    links=120-(diffr*3);
    rechts=120-(diffl*3);
    links wäre demnach 120-(20*3)=60
    rechts wäre 120-(-20*3)=120 (eigentlich 180)
    Daraus resultiert, der linke Motor dreht sich halb so schnell wie der rechte und korrigiert somit die Abdriftung nach RECHTS.
    Muss auch so sein, denn immerhin wurde der Wert des linken Transistors ja um den Wert 10 kleiner, was auf einen dunklen Untergrund schließen lässt.
    So, hoffe es passt nun
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    03.09.2008
    Beiträge
    21
    ah ok vielen vielen dank ... sry dassichs o doofe fragen gestellt habe
    ^^das pgrogramm funktioniert jetzt auch super ...hatte wohl nen flash fehler... jetzt kommt gleich meine nächste frage :P .... warum verliert er wennich die geschwindikkeit auf 180 stelle so scnell die bahn?
    links wäre 180-(20*3)=120
    rechts wäre 180-(-20*3)=180
    die differenz der beiden motoren ist ja eigentlich immernoch genausogroß wie bei den werten von 120 ....also 60...demnach müsste er doch die gleichen kurven gleichgut fahren können oder ? -> oder ist der grund:
    durch die "schnellere" geschwindigkeit schafft er es nichtmehr die werte schnell genug abzugleichen? <- wenn ja wie ändere ich dass
    PS: bei mir berechnet er am anfang noch die reglabweichung der beiden motoren und zieht diese dann links=120-(diffr*3)-rab; ab^^

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad