- LiFePO4 Speicher Test         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 55

Thema: Anfänger braucht Hilfe

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Nachtag: Warum funktioniert am Anfang die 25 nicht richtig, später aber wieder???
    Die Ausgabe "SPEED RIGHT IS TOO LOW!!!!"
    Heisst hier das der Motor nicht läuft!
    Du musst einmal zu beginn einen etwas höhren Wert einstellen um den Anlaufstrom des Motors erreichen zu können.
    Wie schon gesagt in dem Test ist keine Regelung aktiv die das automatisch machen würde


    Die Werte sehen jedenfalls besser aus.
    Aber bitte beachten das Umgebungslicht (bei abgeschraubtem Mainboard) die Werte verändern kann.


    MfG,
    SlyD

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.082
    Motoren haben einen relativ hohen Einschaltstrom. Wenn die Spannung bzw PWM Wert zu niedrig ist erreichst du den Wert nicht, damit das Drehmoment ausreicht das der Motor zu drehen beginnt. Du musst deswegen eine höhere PWM wählen damit der Motor anläuft. Damit der Motor weiter dreht braucht man ein nicht so hohes Drehmoment und somit kann man die PWM verringern.

    MfG Hannes

  3. #13
    Guten Abend,

    ich war heute sehr fleißig und habe sehr viel Probiert....

    Nun bin ich seit ca. 3 Std. an einem kleinem Programm dran, welches folgedes machen soll:

    Der Robby fährt einfach los, und wenn ein Hindernis kommt, soll er ihm ausweichen, zudem wenn die Bumper aktivert werden soll er zurückfahren und drehen....

    Soweit so gut, könntet Ihr da mal kurz drüber schauen, denn mein Robby fährt los, und wenn ein Hindernis kommt, bleibt er stehen, dreht sich und dann macht er aber nix mehr....

    (Ich glaube auf die Bumper reagiert er auch nicht richtig, weiß ich aber nicht genau.)

    Versteht Ihr wo mein Problem liegt?

    Eine Frage hätte ich zusätzlich noch:
    Wenn ich einen Winkel fahren will (rotate), dann muss ich z.B. bei 90° etwas mehr angeben. Wo kann ich das einstellen, auch in der Config? - Da hab ich aber noch nix gefunden

    Vielen Dank, mein Code fürs Programm ist in der Anlage

    Crystal Eye
    Angehängte Dateien Angehängte Dateien
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Hallo,
    Eine Frage kann ich dir schonmal Beantworten:
    In der RP6Config.h - Datei findest du ab Zeile 36 verschiedene Encoder-Auflösungen. Um herauszufinden, welche Auflösung dein RP6 hat machst du zum Beispiel folgendes:
    - Du schreibst ein kleines Programm, das den RP6 eine bestimmte Distanz fahren lässt. ( mit move(<Speed>,<Direction>,DIST_MM(<Distanz>),true); )
    - nach der Distanz soll er anhalten und über die Schnittstelle die gezählten Encoder-Schritte (links und rechts) ausgeben.
    - Miss die tatsächlich zurückgelegte Distanz.
    - Widerhole diese Testreihe 3-mal und mach einen Mittelwert der tatsächlichen Distanz und der Encoder- Schritte.
    - Die Encoder- auflösung berechnet sich nun: Distanz / Enc.Schritte.
    - Mach denselben Test noch ein zweites Mal. Bei mir waren es dann durchschnittlich 9 mm zuviel auf 2m !

    Rotieren:
    PR6Config.h zeile 48 - 64 lesen.
    Es ist eigentlich nur durch Experimentieren möglich. versuche es einfach mit grösseren und kleineren Werten.
    Da 90° etwas kurz sind, kannst du ja 360° oder mehr drehen. Dann spielt die Toleranz der Motoren auch weniger mit.

    Zu deinem Programm:
    Ev. Hilft es dir weiter, die Move_04 Beispiele genau anzuschauen und abzugucken.

    MfG
    Filou

  5. #15
    Hallo Filou89,

    vielen Dank für die Antwort. Ich habe das mit dem Programm heute gemacht, also 300 mm fahren, stoppen.
    Daraufhin habe ich die RP6Config.h - Datei abgeändert. Aber evtl. sollte ich das wirklich mehrmals & mit einem mittelwert genauer einstellen. Warscheinlich auch längere Strecken, obwohl es bei 30 cm schon eine große Abweichung war.

    Aber sehr gute Anleitung, Spitze! - Danke!

    Wegen dem Rotieren, das werde ich später durchprobieren.

    Mir macht eher das Programm noch zu schaffen. Kann es sein, dass er einfach nicht weiß was er machen soll wenn er das Hindernis erkannnt hat und rotiert hat? - Sprich ich müsste ihm i-wie "beibringen" wie er da wieder in das einfache geradeaus fahren geht....

    Wie stelle ich das am Besten an? - Wie gesagt, ich bin noch ein blutiger Anfänger.... Aber ich will das hinbekommen...

    Gruß

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Gute Nachrichten:
    Ich hab dein Programm mal auf meinen RP6 geladen. Hindernisse erkent er ja schon ganz gut. Einfach wie er weiterfahre soll ist ihm nicht ganz klar.
    in deiner fahrenFunction() hast du nur gesagt, dass die geschwindigkeit beider Raupen 90 sein soll, nich aber in welche Richtung. Deshalb nimmt er dieselbe Richtung, die er gerade zuletzt hatte.
    Folglich dreht er sich immer im Kreis!
    mit changeDirection(FWD) kannst du das Problem beheben.
    Zudem habe ich dir bei den Bumern noch eine kleine änderung gemacht.
    Mir wurde beigebracht, dass man denselben Code möglichst nur einmal verwenden soll.
    So bleibt es übersichtlicher.

    Code:
    #include "RP6RobotBaseLib.h"
    void acsStateChanged(void) //ACS
    {
    
        // Hindernis links
        
        if(obstacle_left){
            rotate(50, RIGHT, 49, true); // um 45° nach rechts drehen
        }
        // Hindernis rechts    
        
        if(obstacle_right){
            rotate(50, LEFT, 45, true); // um 45° nach links drehen
        }
        // Mitte?
        
        if(obstacle_left && obstacle_right) {
            rotate(50, LEFT, 188, true); // um 180° nach links drehen
        }
    
        statusLEDs.LED6 = obstacle_left && obstacle_right; 
        statusLEDs.LED3 = statusLEDs.LED6;
        statusLEDs.LED5 = obstacle_left; 
        statusLEDs.LED4 = (!obstacle_left); 
        statusLEDs.LED2 = obstacle_right; 
        statusLEDs.LED1 = (!obstacle_right); 
        updateStatusLEDs();
    }
    
    
    //Bumpers
    void bumpersStateChanged(void) {
        if(bumper_left || bumper_right){        //Wenn ein Bumper berührt wurde, dann mal das machen, egal welcher.
            moveAtSpeed(0,0);                       //Nicht unbedingt nötig, aber ich würde die beiden Zeilen zur Sicherheit schreiben.
            mSleep(500);
            move(60, BWD, DIST_CM(25), true); //25 cm Rückwärts
        }
        
        if(bumper_left && bumper_right)        
            rotate(50, LEFT, 188, true); // um 180° nach links drehen    
        else if(bumper_left)
            rotate(50, RIGHT, 49, true); // um 45° nach rechts drehen
        else if(bumper_right)
            rotate(50, LEFT, 45, true); // um 45° nach links drehen
        
    }
    
    void fahrenFunction(void){
        // Geschwindigkeit einstellen !!Richtung nicht vergessen!!
        changeDirection(FWD);
        moveAtSpeed(90,90);
    }
    
    
    int main(void) {
    
        initRobotBase(); 
        setLEDs(0b111111);
        mSleep(2500);
        setLEDs(0b001001); 
    
    
        // ACS Event Handler registrieren:
        ACS_setStateChangedHandler(acsStateChanged);
        // Set Bumpers state changed event handler:
        BUMPERS_setStateChangedHandler(bumpersStateChanged);
    
        // ACS Empfänger einschalten (und Encoder etc.)
        powerON();
        // ACS auf mittlere Sendeleistung stellen.
        setACSPwrMed();
        // Main loop
    
    
        while(true){
            // Aus der Hauptschleife ständig die motionControl Funktion
            // aufrufen – sie regelt die Motorgeschwindigkeiten!
            task_motionControl();
            // ADC Wird wegen den Motorstromsensoren aufgerufen!
            task_ADC(); 
            // Bumper automatisch alle 50ms auswerten
            task_Bumpers();
            // ständig die task_ACS Funktion aufrufen!
            task_ACS();
            //Fahren
            fahrenFunction();
    
        }
        return 0;
    }
    Hoffe, bei dir klappts,
    Viel Erfolg,
    MfG
    Filou

  7. #17
    Vielen Dank!

    Jetzt funktioniert es, der HAMMER... Ok, das mit den Bumpern habe ich jetzt auch verstanden....

    Jetzt habe ich ihn durch mein Zimmer fahren lassen, und dann ist er in eine Ecke gefahren, und kam nicht mehr raus....

    Jetzt müsste man doch einen Timer einstellen, für solche Fälle, oder? - Sprich er muss drehen....


    Einfacher wäre es natürlich wenn man ihm hier:
    Code:
    if(obstacle_left && obstacle_right) {
            rotate(50, LEFT, 188, true); // um 180° nach links drehen
    gleich das Rückwärts fahren + Drehung angibt, oder?

    Aber wie bzw. welches Ereignis startet den Timer?
    Ist das zu realisieren?

    Denkansatz:
    Wenn das Hindernis in der Mitte ist und er rechts und links auch nicht weiter kommt, dann soll er nach 5 sec. zurückfahren.

    Ist das vom Ansatz her richtig?

    ABER, nochmal rechtherzlichen Dank. Ich bin einfach noch nicht soweit bzw. hab das Problem nicht erkannt....
    Mit ein bisschen Übung bekomme ich das hoffentlich schon bald gebacken....

    Gruß

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Moin Crystal Eye,

    von Anfänger zu Anfänger:

    > Jetzt habe ich ihn durch mein Zimmer fahren lassen, und dann ist er in eine Ecke gefahren, und kam nicht mehr raus....

    Nur so'ne Idee (weil ich gerade das gleiche Problemchen hatte, und das so demnächst ausprobiere): Bei einem Bumper-Ereignis einfach eine zufällige Strecke zurückfahren und dann eine zufällige Drehung machen - "zufällig" heißt hier natürlich "pseudo-zufällig"

    Die libc hat eine random-Funktion, und wenn Du Spaß haben willst dann google mal nach "knuth random".

    viele Grüße
    Andreas

  9. #19
    Moin danimath,

    Eine gute Idee mit dem Bumper, jedoch wird der Bumper ja nicht aktiviert.... Die Sensoren checken es ja viel früher, so wie es auch sein sollte.

    Im moment bin ich noch beschäftigt mit den Rotationseinstellungen, wie Filou89 geschrieben hat, muss man dan Faktor in Zeile 64 der RP6Config.h - Datein ändern.
    Sie war bei mir auf 688 eingestellt, jetzt habe ich die zahl verändert (nur leicht, sprich 100 dazu usw.) Aber da tut sich gar nix, der dreht nicht weit genug. Probe halber habe ich 1950 eingesetzt, aber auch hier keine Reaktion, wie unverändert...
    Weiß jemand wo dran das liegen kann??

    Das mit dem Radom ist ja eine Lustige angelegenheit, wenn ich es richtig verstanden habe, sieht das wie folgt aus:
    Code:
    int random_number = random () % 200;
    Bedeutet, es wird eine zufällige Zahl zwischen 0 und 199 gesucht (&gefunden = ausgegeben)?

    Gruß

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Statt der Bumper kannst Du bestimmt auch das Kollisionssystem verwenden (wie gesagt - was Roboter angeht bin ich auch noch Anfänger)

    Zitat Zitat von Crystal Eye Beitrag anzeigen
    Code:
    int random_number = random () % 200;
    Bedeutet, es wird eine zufällige Zahl zwischen 0 und 199 gesucht (&gefunden = ausgegeben)?
    Das ist richtig. Im Programm im Initialisierungteil solltest Du allerdings noch "srandom (123456);" (oder eine andere Zahl) aufrufen; ohne das wird immer "1" als Startwert benutzt. Weil ich gerade im Büro sitze, kann ich kein komplettes (getestetes) Programm posten - vielleicht bekomme ich heute abend was hin.

    viele Grüße
    Andreas

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Ähnliche Themen

  1. Anfänger braucht Hilfe
    Von Tonyy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 14.12.2010, 08:16
  2. hilfe Anfänger braucht hilfe beim start
    Von thomas3 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 20.09.2010, 22:07
  3. Anfänger braucht Hilfe
    Von vitja09 im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 07.10.2006, 14:31
  4. Anfänger braucht hilfe!!!!
    Von mathisdedial im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 22.12.2004, 14:02
  5. Anfänger braucht hilfe
    Von khazad im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 25.10.2004, 12:27

Berechtigungen

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

Labornetzteil AliExpress