- SF800 Solar Speicher Tutorial         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Sensorik am RP6, Befehle und Allgemeines

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hallo!
    Erst mal: Leider wurde das Projekt auf die nächste Woche verswchoben...
    Aber noch eine Frage dazu:
    Die Lib-Befehle mleftDist & mrightDist (oder so ähnlich), wann genau werden die mit Werten gefüllt? Nach jedem "isMovementComplete"? oder ununterbrochen?
    Und muss ich die selbst auf '0' zurücksetzen?
    Denn ich will ja nach jedem einzelnen Manöver folgendes in ein Array schreiben:
    Distanz links | Distanz rechts | gefahrene Strecke geradeaus | gedrehter Winkel | x-Position | y-Position
    Und da brauche ich natürlich nur die momentanen Werte...

    Danke Euch!
    Fabian

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Soweit ich mich erinnere werden die fortlaufend befüllt.
    Und ja, ich glaube du musst die auch per Hand nullen. Da würde ich mir aber noch mal genauer ansehen, ob das so ohne weiteres möglich ist, oder ob das die Lib eher verwirrt.
    Zur Not einfach eine zweite Variable als delta benutzen.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Ja. Ist einfacher...
    Hat jemand eine Idee, wie ich vom Distanzunterschied zwischen linkem und rechtem Encoder auf den gedrehten Winkel komme? Ich verstehe nicht ganz, wie die das in der Lib.c machen.
    Hier mal der Auszug, von dem ich glaube, dass er Winkel(unint16_t angle) in Distanzen umrechnet:
    Code:
    void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle, uint8_t blocking)
    {
        motion_status.move_L = true;
        motion_status.move_R = true;
        uint16_t distance = (uint16_t) (((uint32_t)(ROTATION_FACTOR) * (uint16_t)angle)/100);
        preDecelerate_L = distance - 100;
        preDecelerate_R = distance - 100;
        preStop_L = distance;
        preStop_R = distance;
        if(distance < 40) {
            distance = 40; 
            preStop_L = 20;
            preStop_R = 20;
            preDecelerate_L = 10;
            preDecelerate_R = 10;
        }
        moveAtSpeed(desired_speed,desired_speed);
        changeDirection(dir);
        
        mleft_dist = 0; 
        mright_dist = 0;
        distanceToMove_L = distance;
        distanceToMove_R = distance;
        
        motion_status_tmp = motion_status.byte;
        MOTIONCONTROL_stateChangedHandler();
        if(blocking)
            while(!isMovementComplete())
                task_RP6System();
    }
    Ich hätts gern andersrum... Winkel in Grad!

    mfg

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Also entweder machst du es über etwas Mathe mit den Kreisfunktionen (keine Ahung wie genau das wird) oder eben andersherum wie hier beschrieben.
    Dazu sollten dann deine Distanzen über beide Ketten etwa gleich groß sein (eventuell das Mittel nehmen)
    und dann stellst du dir die Formel da eben nach angle frei und du kannst zurück rechnen.
    Ich denke fast, dass das die genauere Lösung sein dürfte, der Author wird sich ja schon was bei dieser Lösung gedacht haben.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Und was ist der "ROTATION FACTOR"? Bzw. wo steht der?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Och komm schon...
    Der wird ja sogar in der Anleitung erwähnt...
    Das ist ein define in der RP6Config.h... Im OrdnerRP6common.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Oha
    Sorry, in den Commons hab ich noch nciht geguckt
    Aber danke dir!

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    mleft_dist und mright_dist werden in den encoder ISR geupdated. Darum wirden die dauernd actualisiert. Aber die werden auch gebraucht in die function move() und rotate(). Wen die auftrag lauft, darfs du naturlich nicht diesen variabelen aendern, oder die move() stimmt nicht mehr !!
    Das unterschied von distance_left und distance_right kan einfach in "Graden" umgesetz werden durch dividieren bei eine feste factor : die ROTATIONS_FACTOR. Da macht du einfach das umgekerhte von eine rotate() function.
    Das genau ist das problem mit ein "track" roboter : diese ROTATIONS_FACTOR ist sehr abhangig von geschwindigkeit, boden usw. Auf eine dreh von 90° kann das ruhig 20° mehr oder weniger sein. Bei eine differential drive ist das eher +/-1° !!

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Da hat RP6conrad vollkommen recht, ich persönlich würde das ganze mit der M32 realisieren und diese Konstante nicht konstant sondern variabel machen.
    Die Variable würde ich dann im EEPROM der M32 speichern und bei Bedarf an den RP6 weiter reichen (-->I2C).
    Somit könntest du die Variable während der Fahrt per Fernbedienung veränderbar machen und somit den RP6 während der Fahrt "kalibrieren".

    Damit könntest du sehr leicht einen passenden Wert herausfinden. Eventuell noch während der Fahrt den Wert im Display anzeigen oder so.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Klinkgt vernünftig.
    Dann wäre es aber sinnvoll, es erst einmal so (mit konstantem Faktor) zu machen, sich in verschiedenen Situationen die Abweichungen anzusehen und dann dementsprechend sich zu überlegen, wie mans Variabel macht, oder???
    Gruß

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Allgemeines zum C't-Bot
    Von Jobot im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 03.02.2010, 19:16
  2. Allgemeines Lob!
    Von adrisch im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 28.04.2007, 10:23
  3. c-control, allgemeines zu analog I/O
    Von Haveaniceday im Forum C-Control II
    Antworten: 1
    Letzter Beitrag: 26.04.2007, 13:20
  4. Allgemeines Handbuch?
    Von sonium im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 12.01.2006, 12:14
  5. Allgemeines Verständniss der Grundschaltungen
    Von Crash32 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.12.2005, 19:04

Berechtigungen

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

Labornetzteil AliExpress