- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 14

Thema: Stopp am Abgrund

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    danke für die Korrektur.
    hat irgendjemand eine Idee, wie man den Wert der Liniensensoren einlesen und den
    dann 5(z.B.) mal hintereinander mit dem aktuellen Wert vergleichen kann?
    mfG
    while (!asleep()) sheep++;

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    @Herbert: Mach ein Array, also int links[5] und int rechts[5].
    Dann schiebst du die Werte jeweils eins nach hinten, bevor du ganz vorne den aktuellsten Wert reintust.
    Du hast dann eine schöne Zeitreihe in den Arrays, wobei [0] das aktuellste, und [4] der älteste Wert ist. Das Rauschen der Sensoren lässt sich hiermit ganz gut eliminieren, wenn du z.B. die ersten beiden Werte addierst sowie die letzten beide Werte addierst, und dann schaust, wie die Differenz der beiden ist (ist eine Minimalversion eines Tiefpasses!).


    Hab vor Jahren mal ein Programm für die Kantenerkennung geschrieben, wobei die erste Funktion zum initialisieren aufgerufen wird, und die zweite um zu erkennen ob man über eine Kante gefahren ist(1==>Kante, 0==>keine Kante).
    Ich mach es allerdings auf die einfache Art und Weise, also aktuellsten mit dem vorherigen Wert vergleichen.
    Eleganter wäre es, eine längere Zeitspanne zu verwenden um das Rauschen auszugleichen(Tiefpass)==>siehe oben!

    hs_abgrund.h
    PHP-Code:
    #ifndef HSASURO
    #define HSASURO
    /*Helligkeitsunterschied bei dem eine Kante erkannt wird*/
    #define ABGRUND_DIFF 20


    /*Variablen für Abgrunderkennung*/
    int abgrund_ldata_ref[2];




    /*Muss aufgerufen werden,
    bevor die Funktion fkt_abgrund_erkennung verwendet wird.*/
    void fkt_init_abgrund_erkennung(void);

    /*Erkennt Kanten(z.B. beim Tisch). Am besten funktioniert die Erkennung
    mit einer Vorwärtsgeschwindigkeit von 100.*/
    unsigned char fkt_abgrund_erkennung(void);




    unsigned char fkt_abgrund_erkennung(void)
    {
        
    int ldata[2],diff_l=0,diff_r=0,schnitt_l=0,schnitt_r=0;
        
    unsigned char c=0;

        for(
    c=0;c<10;c++)
        {
            
    LineData(ldata);
            
    schnitt_l=schnitt_l+ldata[0];
            
    schnitt_r=schnitt_r+ldata[1];
        }
        
    schnitt_l=schnitt_l/10;
        
    schnitt_r=schnitt_r/10;

        
    diff_l=abs(schnitt_l-abgrund_ldata_ref[0]);
        
    diff_r=abs(schnitt_r-abgrund_ldata_ref[1]);

        if(
    diff_l>ABGRUND_DIFF || diff_r>ABGRUND_DIFF)
        {
            
    FrontLED(OFF);
            return 
    1;
        }

        return 
    0;

    }


    void fkt_init_abgrund_erkennung(void)
    {
        
    unsigned char c=0;
        
    int schnitt_l=0,schnitt_r=0;

        
    FrontLED(ON);
        for(
    c=0;c<10;c++)
        {
            
    LineData(abgrund_ldata_ref);
            
    schnitt_l=schnitt_l+abgrund_ldata_ref[0];
            
    schnitt_r=schnitt_r+abgrund_ldata_ref[1];
        }
        
    abgrund_ldata_ref[0]=schnitt_l/10;
        
    abgrund_ldata_ref[1]=schnitt_r/10;
    }


    #endif 
    Grüße,
    Harri

  3. #3
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    könntest du das vielleicht auch für mich einmal im ganzen Programm posten?
    danke
    mfG
    while (!asleep()) sheep++;

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Zitat Zitat von Herbert A. Beitrag anzeigen
    könntest du das vielleicht auch für mich einmal im ganzen Programm posten?
    danke
    mfG
    Hab ich nicht. Ist ja nicht schwer zum einbauen.
    Meinen Quelltext in eine Header Datei reinkopieren, diese dann in der Source Datei (C Datei) inkludieren.
    Dann erstmal fkt_init_abgrund_erkennung aufrufen.
    Und in einer Schleife dann fkt_abgrund_erkennung abfragen:

    -----Pseudocode-----------
    #include "abgrunderkennung.h"

    fkt_init_abgrund_erkennung()
    while(fkt_abgrund_erkennung()==0)
    {
    Vorwärts fahren
    }
    Sofort Stoppen
    ---------------------------
    Grüße,
    Harri

  5. #5
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    sorry ,ich weiß leider nicht wie das geht,aber wenn das so einfach ist, könntest du das vielleicht für mich machen???
    mfG
    while (!asleep()) sheep++;

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Es bringt doch nichts alles vorgekaut zu bekommen.
    Mehr als ein paar Grundlagen in C braucht man nicht, um das hinzubekommen.
    Beschäftige dich also mal mit C, danach wirst du dir viel leichter tun in Sachen Asuro programmieren!
    Hier ein super Online Tutorial für C:
    http://www2.fh-augsburg.de/informatik/vorlesungen/XX/c_cplus/tutorial/cyris/ckmain.htm
    Geändert von harry3 (12.03.2011 um 14:39 Uhr)
    Grüße,
    Harri

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von harry3 Beitrag anzeigen
    Es bringt doch nichts alles vorgekaut zu bekommen.
    Mehr als ein paar Grundlagen in C braucht man nicht, um das hinzubekommen.
    Beschäftige dich also mal mit C, danach wirst du dir viel leichter tun in Sachen Asuro programmieren!
    Hier ein super Online Tutorial für C:
    https://www2.fh-augsburg.de/informat...ris/ckmain.htm
    Kannst du die https:// ändern in http:// ? (also nur die 's' wegnehmen!) Sonnst bekommt man ein Frage von dem Browser ob es das Zertifikat akzeptieren soll? SSL Verschlüsselung ist aber keines Wegs nötig.

    P.S. Dazu gibbt es hier auch noch ein C-tutorial:

    http://www.rn-wissen.de/index.php/C-Tutorial
    Geändert von Valen (12.03.2011 um 14:40 Uhr)

Berechtigungen

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

12V Akku bauen