Anzeige 
Ergebnis 1 bis 8 von 8

Thema: RSSI - Antennen Tracker mit 2 x 6T Helix

  1. #1
    User
    Registriert seit
    12.04.2002
    Ort
    Gütersloh
    Beiträge
    54
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard RSSI - Antennen Tracker mit 2 x 6T Helix

    Hallo

    Im Netz habe ich diesen Beitrag über einen Tracker gefunden:
    https://www.instructables.com/id/Arduino-FR632-RSSI-Antenna-Tracker/

    und auch gebaut.
    Funktioniert und trackt sehr gut.
    Mit 25mW Sendeleistung im Copter bin ich schon 1000m weit geflogen.

    Name:  index.jpg
Hits: 122
Größe:  157,8 KB

    2 x Helix 6Turn
    Servo 180° Grad, ergibt mit 60° Winkel der Helix eine Abdeckung von min. 240° Grad
    Arduino Micro Pro
    Empfänger: RX5808 Pro 5.8G 40CH Diversity FPV Receiver
    Interner 3S Akku
    20mW Sender zur Video-Weitergabe an FPV-Brille

    Da ich aber keine großen Programmierkenntnisse habe, würde ich gerne den Arduino-Code ein wenig besser verstehen.
    Den Code zum Tracker gibt es hier:
    https://github.com/andreiva/simple-r...na-tracker.ino

    Wäre super, wenn sich hier jemand finden würde, der den Code noch ein wenig weiter kommentieren könnte.

    Viele Grüße
    Jochen Causemann
    Like it!

  2. #2
    User Avatar von rubberduck
    Registriert seit
    22.03.2004
    Ort
    Deutschland
    Beiträge
    3.216
    Daumen erhalten
    346
    Daumen vergeben
    170
    0 Nicht erlaubt!

    Standard

    hallo,
    hier im RCN-Forum (ohne das Forum kritisieren zu wollen), ist vielleicht nicht gerade der richtige Ort für deine Frage, eher in der FPV-Community. Da wirst du sicher auf reichlich Interesse stossen.
    Kopter und FPV sind hier wenig vertreten, daran besteht hier bei RCN wohl wenig Interesse.

    Gruss
    Jürgen
    "Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.“
    -Sokrates-
    Like it!

  3. #3
    User
    Registriert seit
    12.04.2002
    Ort
    Gütersloh
    Beiträge
    54
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Jürgen
    Danke für den Tip.
    Habe ich gleich mal gemacht.
    https://fpv-community.de/threads/rss...t-helix.83949/

    Viele Grüße
    Jochen Causemann
    Like it!

  4. #4
    User
    Registriert seit
    18.05.2009
    Ort
    Hamburg
    Beiträge
    114
    Daumen erhalten
    6
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Zitat Zitat von Jochen Causemann Beitrag anzeigen
    Wäre super, wenn sich hier jemand finden würde, der den Code noch ein wenig weiter kommentieren könnte.
    Hallo Jochen,

    welche Stellen willst Du denn überhaupt resp. besser verstehen?
    Wir können das auch per PM machen.

    Gruß
    Dieter
    Like it!

  5. #5
    User
    Registriert seit
    12.04.2002
    Ort
    Gütersloh
    Beiträge
    54
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Dieter
    Ich habe früher recht viel mit PHP gemacht, aber eher prozuderal.

    Letztendlich würde ich gerne wissen, an welchen tellen ich das Verhalten des Trackers verändern/anpassen kann.

    #define SERVO_MAX_STEP 5
    Wenn ich diesen Wert verringere, bewegt sich das Servo langsamer

    Mich würde interessieren, warum.

    float x = float(avgRight - avgLeft) / 10;
    x = SERVO_MAX_STEP / (1+ exp(-SIGMOID_SLOPE * x + SIGMOID_OFFSET));
    ang = x * SERVO_DIRECTION * -1;
    #endif
    #if defined(SIGMOID)

    Aber da hört es bei mir schon auf.


    #define SERVO_MIN_STEP 0.09
    Habe ich noch nichts mit gemacht, würde mich aber interessieren.


    Das Lesen hier
    https://www.arduino.cc/en/Reference/Servo
    bringt mich auch nicht weiter.

    Natürlich weiß ich, das ich für grundsätzliches Verständnis bez. C ganz vorne anfangen sollte.
    Aber ich möchte "nur" ein wenig mit dem Tracker rumspielen. Weil er schon so gut funktioniert.

    Viele Grüße
    Jochen Causemann


    Like it!

  6. #6
    User
    Registriert seit
    18.05.2009
    Ort
    Hamburg
    Beiträge
    114
    Daumen erhalten
    6
    Daumen vergeben
    0
    1 Nicht erlaubt!

    Standard

    Hallo Jochen,

    das normale Vorgehen in Arduino ist, dass der Code in den Libs objektorientiert ist
    und dieser im sogenannten Sketch vom User prozedural verwendet wird.

    Der Code startet in einem C oder C++ Programm mit Ausführen der Funktion main()
    Diese Funktion wird von Arduino internalisiert und vom User verborgen. In main() wird
    hier per Konvention in einer Schleife ständig die Funktion loop() aufgerufen so schnell es die
    MCU hergibt.

    In Deinem Programm werden die Libs Timer und Servo verwendet.
    Hier wird in loop() nur die Methode
    Code:
    timer.update();
    aufgerufen. Das tackert den Code in der Timer Lib vorran.

    Das Objekt timer ist hier
    Code:
    timer.every(50, mainLoop);
    timer.every(5, measureRSSI);
    so eingerichtet, das alle 50ms die Funktion main_loop() und
    alle 5ms die Funktion measureRSSI() aufgerufen werden soll.
    Der Code der Timer Lib schaut also bei jedem Aufruf von timer.update
    auf die Uhr und führt die Funktionen bestmöglich zeitlich passend aus.

    Die Zeilen die in C oder C++ mit # beginnen sind sogenannte
    Präprozessor Direktiven. Hier werden zur Compilierzeit Entscheidungen
    getroffen. Z.B. Code nur berücksichtigt wenn etwas "defined" ist oder
    im Fall von sogenannten Makros Wörter mit Zahlen ersetzt ohne zur Laufzeit
    Speicher zu brauchen.

    Bei
    Code:
    #define SERVO_MAX_STEP 5
    Wird dann in
    Code:
        float x = float(avgLeft - avgRight) / 10;
        x = SERVO_MAX_STEP / (1+ exp(-SIGMOID_SLOPE * x + SIGMOID_OFFSET));
        ang = x * SERVO_DIRECTION;
    SERVO_MAX_STEP vor dem Compilieren durch 5 ersetzt.


    Das Prinzip:

    In der Funktion measureRSSI() werden die jeweils aktuellen
    RSSI Werte der linken und rechten Antenne vom AD Wandler
    gelesen und in zwei Arrays geschoben. Das heißt die Werte
    in den Arrays werden eins aufgerückt und die neuen Werte an
    die Spitze geschrieben.

    In main_loop() wird dann aus allen Werten eines Arrays der Durchschnitt
    gebildet (moving average) und die Entscheidung getroffen ob nicht doch
    besser ein definiertes Minimum als Durchnitt genommen wird.

    Code:
      uint16_t avgLeft = max(avg(rssi_left_array, FIR_SIZE) + RSSI_OFFSET_LEFT, RSSI_MIN);
      uint16_t avgRight = max(avg(rssi_right_array, FIR_SIZE) + RSSI_OFFSET_RIGHT, RSSI_MIN);
    Mit dem per #define aus gewähltem Algorithmus wird dann der Winkel ausgerechnet den
    das Antennenarray in die bessere Richtung gedreht werden soll.
    Dieser Winkel ist natürlich SERVO_MAX_STEP direkt proportional.

    Code:
        float x = float(avgLeft - avgRight) / 10;
        x = SERVO_MAX_STEP / (1+ exp(-SIGMOID_SLOPE * x + SIGMOID_OFFSET));
        ang = x * SERVO_DIRECTION;
    Wenn man weiß dass exp(bla) e hoch bla bedeutet kann man auch die ganze Formel
    mathematisch hin schreiben. Der Rest ist dann Physik resp. Regelungstechnik.

    Gruß
    Dieter
    Like it!

  7. #7
    User
    Registriert seit
    12.04.2002
    Ort
    Gütersloh
    Beiträge
    54
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Hallo Dieter
    Vielen Dank für Deine sehr ausführliche und kompetente Antwort.
    Jetzt ist ein wenig Licht im Dunkel.

    1. Man braucht fundierte C-Kenntnisse
    2. und ev. hier noch wichtiger: Mathe und Regelungstechnik

    Da beides bei mir nur rudimentär vorhanden ist, werde ich den Tracker "nur" benutzen wie er ist und mich daran freuen, daß er so gut funktioniert.
    Nur an
    #define SERVO_MIN_STEP 0.09
    werde ich noch ein wenig herum spielen.

    Vielen Dank nochmals

    Viele Grüße
    Jochen Causemann
    Like it!

  8. #8
    User
    Registriert seit
    25.03.2008
    Ort
    -
    Beiträge
    195
    Daumen erhalten
    7
    Daumen vergeben
    1
    0 Nicht erlaubt!

    Standard

    Gute Entscheidung, den RX5808 und nicht den empfohlenen FR632 zu nehmen. Den habe ich nämlich auch, die Empfangsqualität war von Anfang an ziemlich miserabel, nach einem Jahr Benutzung hatte ich dann immer schwarze Streifen im Bild.
    Zitat Zitat von Jochen Causemann Beitrag anzeigen
    Hallo Jürgen
    Danke für den Tip.
    Habe ich gleich mal gemacht.
    https://fpv-community.de/threads/rss...t-helix.83949/

    Viele Grüße
    Jochen Causemann
    Wie man anhand der Rückmeldungen in der FPVC sieht, ist auch dort nicht mehr viel los. Vor einigen Monaten wenigstens noch als Verkaufsbörse gebrauchbar aber auch das schläft da immer mehr ein. Die Leute mit Ahnung sind längst im englischssprachigen Bereich bei Entwicklerforen und weiterem verschwunden. Der Nachwuchs baut eh fast nur noch Racer und findet sich dann auch in diesen Foren. Dementsprechend flach werden dort jedoch die theoretischen Details diskutiert.

    Es bringt also auch nichts mehr, noch weiter die FPVC zu empfehlen. Wenn du der englischen Sprache mächtig bist, würde ich immer direkt dort nachfragen, wo die Projekte vorgestellt werden.
    Like it!

Ähnliche Themen

  1. Analyse Empfangsprobleme 35 MHz Empfänger mit RSSI?
    Von Gregmaan im Forum Fernsteuerungstechnik
    Antworten: 12
    Letzter Beitrag: 09.12.2011, 13:46

Lesezeichen

Lesezeichen

Berechtigungen

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